質問: 物理セクターサイズ4096 hddに対する論理セクターサイズの最適化 多くの新しいハードドライブディスクでは、物理セクターサイズは4096です。システムで、デフォルトの512の論理セクターサイズではなく、同じサイズの論理セクターサイズを使用することは可能ですか?一括読み取りと書き込みを高速化しますか?どこで設定できますか?
回答: 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の出力を見て、開始アドレスをバイトに変換し、物理ブロックサイズで除算します。パーティションが整列している場合、リマインダはゼロでなければなりません。