ブロックサイズとクラスターサイズについて質問があります。私が読んだことに関して、私は次のことを想定しています:
- ブロックサイズはブロックの物理サイズであり、ほとんどが512バイトです。これを変更する方法はありません。
- クラスターサイズは、OSによって読み取りおよび書き込みが可能なブロックの最小サイズです。新しいファイルシステムを作成した場合(例: ext3、スイッチ-bでこの最小ブロックサイズを指定できます。 dumpe2fs、mke2fsなどのほとんどすべてのプログラムは、クラスターサイズの名前としてブロックサイズを使用します。
次の出力が得られた場合:
$ stat test
File: `test'
Size: 13 Blocks: 4 IO Block: 2048 regular file
Device: 700h/1792d Inode: 15 Links: 1
サイズはバイト単位の実際のスペースであり、ブロックは物理的に使用されるブロック(それぞれ512バイト)であり、IOブロックはFSの作成時に指定されたブロックサイズに関連しているというのは正しいですか?
承認された回答:
おそらく、異なる用語を使用するいくつかのドキュメントを読んだことが原因で、混乱していると思います。 「ブロックサイズ」や「クラスターサイズ」などの用語は、ファイルシステムの文献の文脈の中でさえ、普遍的な意味を持っていません。
ファイルシステム
ext2またはext3の場合、状況は比較的単純です。各ファイルは特定の数のブロックを占有します。特定のファイルシステム上のすべてのブロックのサイズは同じで、通常は1024、2048、または4096バイトのいずれかです。サイズがNブロックプラス1バイトとN+1ブロックの間のファイル¹はN+1ブロックを占有します。そのブロックサイズは、mke2fs -b
で指定するものです。 。クラスターの個別の概念はありません。
特にMS-DOSおよび初期バージョンのWindowsで使用されているFATファイルシステムには、同様に単純なスペース割り当てがあります。 ext2がブロックと呼ぶもの、FATがクラスターと呼ぶもの。コンセプトは同じです。
一部のファイルシステムには、より高度な割り当てスキームがあります。固定サイズのブロックがありますが、同じブロックを使用して、複数のファイルの最後の数バイトを格納できます。これは、ブロックサブ割り当てとして知られています。 ReiserfsとBtrfsはそれを行いますが、ext3やext4は行いません。
ユーティリティ
Unixユーティリティでは、「ブロック」という単語を使用して、任意のサイズのユニット(通常は512バイトまたは1kB)を意味することがよくあります。この使用法は、特定のファイルシステムやディスクハードウェアとは関係ありません。歴史的に、512Bブロックは、当時のディスクとファイルシステムが512Bチャンクで動作することが多かったために発生しましたが、最近の使用法は任意です。従来のUNIXユーティリティとインターフェイスは依然として512Bブロックを使用することがありますが、現在では1kBブロックがしばしば好まれています。各ユーティリティのドキュメントをチェックして、使用しているブロックのサイズを確認する必要があります(du -B
などのスイッチがあるものもあります) またはdf -B
Linuxの場合)。
GNU/Linuxのstat
ユーティリティ、blocks
図は、ファイルで使用される512Bブロックの数です。 IO Block
図は、ファイルの入出力に適したサイズです。これは、原則として無関係ですが、通常、基になるファイルシステムのブロックサイズ(または、それを呼び出したい場合はクラスターサイズ)を示します。ここでは、13バイトのファイルがあります。これは、ブロックサイズが2048のext3ファイルシステムで1つのブロックを占有しています。したがって、ファイルは4つの512バイト単位(stat
では「ブロック」と呼ばれます)を占有します。 。
ディスク
ほとんどのディスクは、ディスクを一連のセクターとして表示するインターフェイスを備えています。ディスクは、個々のビットやバイトではなく、セクター全体の書き込みまたは読み取りのみを行うことができます。ほとんどのハードディスクには512バイトのセクターがありますが、4kBセクターのディスクは数年前に登場し始めました。
ディスクセクターのサイズはファイルシステムのブロックサイズに直接関係していませんが、ブロックをセクターの整数にすることでパフォーマンスが向上します。
¹例外:スパースファイルはスペースを節約します。