web-dev-qa-db-ja.com

物理セクターサイズ4096 HDDに対する論理セクターサイズの最適化

多くの新しいハードドライブディスクでは、物理セクターサイズは4096です。システムで、デフォルトの512の論理セクターサイズではなく、同じサイズの論理セクターサイズを使用することは可能ですか?

一括読み取りと書き込みを高速化しますか?どこで設定できますか?

23
Matan

512バイトは実際にはデフォルトのセクターサイズではありません。それはハードウェアに依存します。

たとえば、/sys疑似ファイルシステムを使用して、ディスクが報告する物理/論理セクターサイズを表示できます。

# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512

これら2つの値の違いは何ですか?

  • physical_block_sizeは、ドライブがアトミック操作で書き込むことができるブロックの最小サイズです。
  • logical_block_sizeは、ドライブが書き込める最小サイズです(Linuxカーネルのドキュメントを参照)。

したがって、4kドライブがある場合、ストレージスタック(ファイルシステムなど)が物理セクターサイズ以上のサイズを使用することは理にかなっています。

これらの値は、fdiskの最近のバージョンでも表示されます。たとえば、次のようになります。

# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes

現在のLinuxディストリビューションでは、mkfs.xfsのようなプログラム(最適なセクターサイズを考慮する必要があります)は、デフォルトで最適なセクターサイズ(4096バイトなど)を選択します。

ただし、オプションを使用して明示的に指定することもできます。次に例を示します。

# mkfs.xfs -f -s size=4096 /dev/sda

または:

# mkfs.ext4 -F -b 4096 /dev/sda

いずれの場合でも、ほとんどのmkfsバリアントは、実行中に使用されたブロックサイズも表示します。

既存のファイルシステムの場合、ブロックサイズは次のようなコマンドで決定できます。

# xfs_info /mnt
[..]
meta-data=                       sectsz=4096
data     =                       bsize=4096
naming   =version 2              bsize=4096
log      =internal               bsize=4096
         =                       sectsz=4096
realtime =none                   extsz=4096

または:

# tune2fs -l /dev/sda
Block size:               4096
Fragment size:            4096

または:

# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size             4
sys_array_size        97
sectorsize            4096
nodesize              16384
leafsize              16384
stripesize            4096
dev_item.sector_size  4096

パーティション上にファイルシステムを作成するときに確認するもう1つのことは、パーティションの開始アドレスが実際に物理ブロックサイズに揃えられているかどうかです。たとえば、fdisk -lの出力を見て、開始アドレスをバイトに変換し、物理ブロックサイズで除算します。パーティションが整列している場合、リマインダはゼロでなければなりません。

30
maxschlepzig

いいえ、それは不可能であり、可能であるかどうかは重要ではありません。 IOは通常、少なくとも4096バイトの単位で行われ、通常はそれ以上です。

2
psusi

はい、それは可能ですが、そうすることで、ドライブが必要以上に速く満たされることになります。 512K未満のファイルの場合、ほとんどのファイルシステム(NTFSなど)でファイルがセクターを共有できないため、各ファイルは4096K(4MB)を占有し、残りのセクターを0で埋めます。ファイルシステムの最良のオプションは、可変セクターサイズを許可することですが、これにより、MFT(マスターファイルテーブル)のサイズが増加し、データ破損のリスクが高まると同時に、データを簡単に回復する能力が低下します。言い換えれば、境界は回復ソフトウェアによって完全に知られているわけではありません。したがって、4096Kの論理セクターサイズは大きなファイルに最適ですが、通常の日常使用のPCの場合、それは単なる0の束です。さて、そうは言っても、論理セクターサイズより小さいデータに関しては、MFT自体にデータを格納するオプションがあります。ただし、これはMFTが巨大になり、データが2回書き込まれることを意味します(HDDにはMFTのコピーが2つあります)。また、MFTの最大サイズを指定する必要があります。最大サイズに達するか、ドライブの使用量がMFTで使用できる空き容量を超えると、問題が発生する可能性があります。これらはすべて、NTFSファイルシステムの使用に基づいています。明るい面では、NTFSでは、4MB以下の任意の論理セクターサイズのブロックレベルでファイルにネイティブ圧縮を使用できます。この制限は、NTFS圧縮が機能する方法が原因で適用されます。論理セクターサイズに関係なく、4MBのブロックが読み取られ、圧縮されます。もちろん、境界を超えてデータが失われるため、セクターサイズが4MBを超える場合はこれは発生しません。

だから、これはあなたのために少し物事を明確にしますか?

1
D337z