web-dev-qa-db-ja.com

USBフラッシュドライブを正しくパーティション分割する方法と、ウェアレベリングを考慮して選択するファイルシステム

2つの問題。最初の1つ:フラッシュドライブをパーティション分割する方法?

私はこれを行う必要はありませんが、ドライブをFATからext4にフォーマットしようとしたときにgpartedの不満が出た後、削除して新しいパーティションテーブルを作成するように強いられたため、パーティションが適切に配置されているかどうかはわかりません。

素朴な答えは、「デフォルトを使用するだけですべてがうまくいく」ということです。ただし、次のリンクを読むと、物事はそれほど単純ではないことがわかります: https://lwn.net/Articles/428584/ および http:// linux-howto-guide .blogspot.com/2009/10/increase-usb-flash-drive-write-speed.html

次に、シリンダー、ヘッド、セクターの問題もあります。現在私はこれを手に入れています:

$sfdisk -l -uM  /dev/sdd
Disk /dev/sdd: 30147 cylinders, 64 heads, 32 sectors/track
Warning: The partition table looks like it was made
   for C/H/S=*/255/63 (instead of 30147/64/32).
For this listing I'll assume that geometry.
Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start   End    MiB    #blocks   Id  System
/dev/sdd1         1  30146  30146   30869504   83  Linux

$fdisk -l /dev/sdd
Disk /dev/sdd: 31.6 GB, 31611420672 bytes
255 heads, 63 sectors/track, 3843 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00010c28

したがって、現在の理解から、パーティションを4 MiBに揃える必要があります(現在は1 MiBです)。ただし、デバイスのヘッドとセクターを適切に設定する方法はまだわかりません。

2番目の問題:ファイルシステム。

ベンチマークから、ext4が最高のパフォーマンスを提供することがわかりましたが、ウェアレベリングの問題があります。トランセンドのJetFlash 700のマイクロコントローラーがウェアレベリングを提供していることをどのようにして知ることができますか?または、ドライブをより速く殺すだけですか?

私は、新しいドライブがすでにそれを処理することを心配しないでくださいと言っているウェブ上の多くの投稿を見ました。しかし、その裏付けとなる証拠が1つも見たことがありません。ある時点で、SSDとUSBフラッシュドライブテクノロジーを組み合わせ始めます。安全なオプションはext2に行くことですが、私が実行した深刻なテストは恐ろしいパフォーマンスを示しました!!!

これらの値は実際のシナリオからのものであり、一部の模擬テストではありません。

42 files: 3,429,415,284 bytes copied to flash drive
original fat32: 15.1 MiB/s
ext4 after new partition table: 10.2 MiB/s
ext2 after new partition table:  1.9 MiB/s

回答する前に、上に投稿したリンクをお読みください。たくさんのことを言ったり言い直したりするが、事実が欠けているので、いくつかの参考文献で裏付けられた回答にも興味があります。

お手伝いありがとう。

13
random1

シリンダー、ヘッド、セクターについて心配する必要はありません。セクターでのみ機能します。ファイルシステムを調整する最も簡単な方法は、単にパーティションテーブルを持たないことです(つまり、/dev/sdXにファイルシステムを直接作成します)。ほとんどのLinuxシステムはこれをうまく処理しますが、Windowsは異常動作し、起動可能にすることもできません。パーティションテーブルが必要な場合は、消去ブロックを構成する512バイトセクターの数を調べます。消去ブロックは約128〜512KiBなので、フラッシュドライブが何を使用しているのかわからない場合は、1024セクターを使用してください。パーティションがこの数の倍数で始まることを確認してください。

Ext2/3/4に消去ブロックサイズを通知して、ブロックを不必要に変更しないようにすることもできます。 stridestripe-widthの両方に、消去ブロックを構成するファイルシステムブロックの数を設定します。これにより、512KiBの消去ブロックで作業するには、以下を使用します。

mkfs.ext4 -b 4096 -E stride=128,stripe-width=128

パフォーマンスに関しては、ジャーナルがないとパフォーマンスが向上します(ただし、操作が中断された場合にデータが破損する可能性が高くなります)。ただし、ext4のエクステントを使用すると、大きなファイル用に変更する必要があるメタデータが少なくなるため、パフォーマンスが向上するはずです。おそらく、ジャーナルを無効にしてext4を使用します。

tune2fs -O ^has_journal
8
mgorven

最近のほとんどのLinuxパーティショニングおよびファイルシステム作成ツールは、デフォルトで4K境界にデータを揃える値に設定されており、ディスクがそれを公開している場合は基になるブロックサイズを使用するため、LWNの記事ほど問題ではありません。

TLDR;最新バージョンのツールで最新のLinuxディストリビューション(2013年以降など)を使用してパーティションとファイルシステムを作成すると、より良い(ただし完全ではない)アライメントが自動的に行われます。また注意してください-SDカードの最高の値はUSBスティックの値と異なる場合があります(お使いのトランセンドJetFlashはSDカードではなくUSBスティックだと思います)。あなたはする必要があります 安いフラッシュの真の根本的な消去ブロックサイズを推定するためのベンチマーク ...

4
Anon

また、fstabでは、ファイルにアクセスするたびに不要な書き込みが行われないように、必ずマウントオプション「noatime」を使用してください。

1
docwebhead