物理セクタサイズ4096 HDDに合わせて論理セクタサイズを最適化

物理セクタサイズ4096 HDDに合わせて論理セクタサイズを最適化

多くの新しいハードドライブの物理セクタサイズは4096です。システムにデフォルトの論理セクタサイズ512の代わりに同じサイズの論理セクタサイズを使用させることはできますか?

一括読み書き速度が速くなりますか?どこで設定できますか?

ベストアンサー1

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開始アドレスをバイトに変換し、それを物理ブロックサイズに分割します。パーティションがソートされている場合、リマインダーはゼロでなければなりません。

おすすめ記事