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


20

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

バルクの読み取りと書き込みを高速化しますか?どこで設定できますか?


アライメントの問題に関するコメントについては、unix.stackexchange.com / a / 18542/1131を参照してください。の最近のバージョンでmkfs.*は、最適なセクターサイズを自動的に使用する必要があります。いくつかのmkfs.*テストを実行し、結果を検査できます(mkfsの詳細出力または関連するfsユーティリティプログラムのいずれかで)。
maxschlepzig

おかげではなく無アライメントの問題
Matan

回答:


29

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


おかげで、Linuxが論理的および物理的ブロックサイズとして説明していることを明確にすることは非常に役に立ちました。私は最近、同じ8TBハードドライブが、あるUSBエンクロージャーでは512バイトのブロックとして、別のUSBエンクロージャーでは4Kブロックとして論理的および物理的に表示される状況に遭遇しました。エンクロージャーを変更したときにLinuxがパーティションマップを表示しなかったため、何かが間違っていると思いましたが、GPTが2番目の論理ブロックで開始することがわかりました。gdiskを使用して1つの大きなパーティションを再作成しましたが、データはすべてそこにありました(4Kブロックのext4)。
Raptor007

アライメントを確認するために説明した方法は信頼できますか?「parted」ユーティリティを使用し、hddパーティションが整列していると報告しましたが、近づくと物理ブロックサイズを照会し、512を取得し、パーティションの開始アドレスをfdisk -l8から512で除算しました。パーティションが揃っていないことのようですので、余りは、0ではなかった
user907860

1
@ user907860なぜ8で割るのですか?fdisk -lレポートUnits = sectors of 1 * 512 = 512 bytes2048と1026048 I計算から始まる2つのパーティションを持つ4096分の512論理/物理ドライブのように、 -私のLinuxシステムのいずれかで、2048*512%40961026048*512%4096Pythonシェルに例えば- 。両方の式がゼロに等しいため、それらのパーティションは4kで整列されます。
maxschlepzig

説明してくれてありがとう、私はその数がビットではなくセクターであることに気付かなかった。私は、悲しいことに、再びそれを行うことはできませんカ月ほど前の答えをupvoted
user907860

2

いいえ、それは不可能ですし、もしそれが問題になっても大丈夫です。IOは通常、少なくとも4096バイトの単位で行われ、通常はそれ以上の単位で行われます。


2
この文が私の質問にどのように関係するかはわかりません。論理セクタサイズは、IOパイプラインの一部の小さなチャンクに加えて、HDDファームウェアの不要なエミュレーションを意味する場合があります。明確にする気ですか?
マタン

2
@マタン、あなたのコメントはまったく意味がありません。IOは一度に512バイト実行されないため、ディスクが512バイトセクターでアドレス指定されるという事実は重要ではありません。ドライブがエミュレートを行う必要があるのは、4kにアライメントされていない書き込みを行おうとした場合だけです。IOは通常4kの倍数で行われ、最新のパーティション分割ツールはパーティションが4k境界で開始することを確認するため、それは起こりません。
-psusi

1
この「答え」は、主張と結論の両方において完全に間違っています。論理サイズは、ボリュームがフォーマットされるときに設定されます。論理サイズと物理サイズの不一致は、フラッシュベースのストレージなどの技術に明確なコストがかかります。
クリスストラットン

@ChrisStratton、いいえ、あなたはファイルシステムのブロック/クラスタサイズを考えています。論理セクターサイズは、ドライブがOSに報告するセクターのサイズであり、そのサイズの単位またはそのサイズの倍数のみを読み書きでき、セクターはそのサイズの単位で番号が付けられます。一部のドライブは実際に4kセクターを内部で読み書きする物理セクターサイズと比較しますが、4k論理セクターを処理できない古いオペレーティングシステムとの下位互換性のために512バイトセクターを使用しているふりをします。
-psusi

間違っています。この問題は、ストレージシステムの物理サイズよりも小さいユニットでソフトウェアを操作しようとすると発生します。これは、フラッシュ消去ブロックサイズよりも小さい論理ユニットの場合に特に当てはまります。ソフトウェアは、未処理の部分を新しい物理ブロックに複製する必要があり、オペレーティングシステムのファイルシステムコードまたはコードごとに消去寿命を犠牲にしますドライブの内部。
クリスストラットン

1

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

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


私はそれがうまくまたはUnixや友人の下にあるすべてのサポートされていません(物事が過去数年間に変更されていない場合)として、それは、例えば、ファイルシステムとしてNTFSを使用しなかった場合は、この答えは良いことだと思う
フォックス

Kはキロを表します。キロは、1,000を意味するメートル単位のプレフィックスです。4 MiBは1024セクターであり、提案されている1ではありません。4096バイトは4 KiBまたは0,00390625 MiBです。
-Aeyoun

これは答えではありません。OPは、ファイルシステムのブロックサイズではなく、HDDのセクターサイズについて語っています。それは別のレイヤーです。
炸鱼薯条德里克

-1
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.

この引用の出典を書き損ねました。他の手では、これは以前のコメントのコピーだと思います:superuser.com/a/1372494/141252
andras.tim
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.