回答:
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
パーティション上にファイルシステムを作成する場合、次にチェックすることは、パーティションの開始アドレスが実際に物理ブロックサイズに合わせられているかどうかです。たとえば、fdisk -l
出力を見て、開始アドレスをバイトに変換し、それらを物理ブロックサイズで除算します。パーティションが整列している場合、リマインダーはゼロでなければなりません。
fdisk -l
8から512で除算しました。パーティションが揃っていないことのようですので、余りは、0ではなかった
fdisk -l
レポートUnits = sectors of 1 * 512 = 512 bytes
2048と1026048 I計算から始まる2つのパーティションを持つ4096分の512論理/物理ドライブのように、 -私のLinuxシステムのいずれかで、2048*512%4096
と1026048*512%4096
Pythonシェルに例えば- 。両方の式がゼロに等しいため、それらのパーティションは4kで整列されます。
いいえ、それは不可能ですし、もしそれが問題になっても大丈夫です。IOは通常、少なくとも4096バイトの単位で行われ、通常はそれ以上の単位で行われます。
はい、可能ですが、そうすると、ドライブが本来よりもはるかに速くいっぱいになります。512K未満のファイルの場合、ほとんどのファイルシステム(NTFSなど)がファイルを共有できないため、各ファイルは4096K(4MB)をすべて占有し、残りのセクターを0で埋めます。ファイルシステムの最適なオプションは、可変セクターサイズを許可することですが、これにより、MFT(マスターファイルテーブル)のサイズが大きくなり、データ破損のリスクが高まりますが、データを簡単に回復できなくなります。言い換えると、回復ソフトウェアは境界を完全には認識していません。そのため、4096Kの論理セクタサイズは大きなファイルには最適ですが、通常の日常使用のPCにとっては、単なる0の集まりです。さて、それで言った、論理セクターサイズよりも小さいデータに関しては、MFT自体にデータを保存するオプションがあります。ただし、これは、MFTが巨大になり、データが2回書き込まれることを意味します(MFTの2つのコピーがHDDにあります)。また、MFTの最大サイズを指定する必要があります。最大サイズに達するか、MFTが使用できる空き容量をドライブの使用量が超えた場合に問題が発生する可能性があります。これらはすべて、NTFSファイルシステムの使用に基づいています。明るいことに、NTFSを使用すると、4MB以下の論理セクターサイズのブロックレベルでファイルのネイティブ圧縮を使用できます。この制限は、NTFS圧縮が機能する方法のために適用されます。論理セクタサイズに関係なく、4MBブロックが読み取られて圧縮されます。もちろんこれは、
だから、これはあなたのために少し物事を明確にしますか?
Sector:
1) Logical Sector: Called Native Sector.
Manufacture default setting. user cannot change.
Before 2010 year: 512b/sector
After 2010 year: 4k/sector.
Few manufacture provide HDD tool to change native sector.
2) Physical Sector: Called Cluster(or allocation unit - FAT windows) or Block(Linux/Unix)
User can change physical sector size 512b,1k,2k,4k,... by format or partition tool. Physical sector contains one or few more native sectors.
(example1: if you have HDD 512b/native sector: user can set 4K/Physical sector. this mean 1 cluster = 4 native sector)
(example2: if you have HDD 4K/native sector: user can set 4K/Physical sector. this mead 1 cluster = 1 native sector)
3) File system deal with Physical sector(or block or Cluster) only.
mkfs.*
は、最適なセクターサイズを自動的に使用する必要があります。いくつかのmkfs.*
テストを実行し、結果を検査できます(mkfsの詳細出力または関連するfsユーティリティプログラムのいずれかで)。