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


13

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が最高のパフォーマンスを提供することがわかりましたが、ウェアレベリングの問題があります。Transcend 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

答える前に、私が上に投稿したリンクを読んでください。また、多くのことを言って再言いましたが、事実が欠けているため、いくつかの参考文献でバックアップされた回答にも興味があります。

お手伝いありがとう。


「しかし、ウェアレベリングの問題があります」 -あなたは本当に問題に選択肢がありません。購入したUSBフラッシュドライブまたはSDカードは、ウェアレベリングで満足のいく仕事をしますが、そうではありません。ウェアレベリングを行うファイルシステム(JFFS2など)は使用できません/使用すべきではありません。また、UBIボリューム管理をインストールすることはできません(最初にMTDをインストールする必要がありますが、これはrawフラッシュデバイス用です)。そのため、組み込みコントローラーに頼る必要があります。
おがくず14

回答:


8

シリンダー、ヘッド、セクターを気にせず、セクターでのみ作業してください。ファイルシステムを調整する最も簡単な方法は、単にパーティションテーブルを持たないことです(つまり、ファイルシステムを/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

cat /proc/mtd接続されたフラッシュデバイスの消去ブロックサイズを調べるために使用できます。
トマラック

ファイルシステムがサポートされている限り、パーティションテーブルのないフラッシュドライブはWindowsで正常に動作します。通常、ペンドライブにはすぐに使用できるパーティションテーブルがなく、正常に動作します。
グロノスタジ14年

Dreamplug上のLinux / Fedoraのsdカード上のfsの最適化は、ext4に消去ブロックサイズを「認識」させ、それに応じてブロックサイズ「ストライド」値を設定する方法を示します。また、/ proc / mtdは、SD /スティックフラッシュメモリデバイスではなく、おがくずが言ったようにrawフラッシュデバイスでのみ使用できるため、ここでは関係ないと思います。
tuk0z

それを試してみました、それはひどく悪いアドバイスでした。USBフラッシュドライブではこれらのパラメーターを使用しないでください。blogofterje.wordpress.com/2012/01/14/optimizing-fs-on-sd-card-この男はより優れたパラメーターを持っていますが、gpartedがデフォルトで使用するものよりも、たとえあったとしてもわずかに優れています。
ズデネク

それは私が9月に与えた同じリンクです^^ parted / Gparted AFAIKについて正しいです。
tuk0z

4

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

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


1

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


この日はまだ真実であり、これにより、このオプションにはXD Thxが欠けていたことが思い出されました
HypeWolf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.