web-dev-qa-db-ja.com

ブロックサイズとクラスターサイズの違い

ブロックサイズとクラスターサイズについて質問があります。私がそれについて読んだことに関して、私は以下を仮定します:

  • ブロックサイズは、ブロックの物理サイズであり、ほとんどが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の作成時に指定されたブロックサイズに関連していますか?

21
pluckyDuck

おそらく、異なる用語を使用する複数のドキュメントを読んだことがあるので、混乱していると思います。 「ブロックサイズ」や「クラスターサイズ」などの用語は、ファイルシステムの文献の文脈においても、普遍的な意味を持ちません。

ファイルシステム

ext2 または ext の場合、状況は比較的単純です。各ファイルが特定の数の blocks を占有します。特定のファイルシステム上のすべてのブロックは同じサイズで、通常は1024、2048、4096バイトのいずれかです。サイズがNブロックと1バイトの間にあり、N + 1ブロックがN + 1ブロックを占めるファイル¹。そのブロックサイズは、mke2fs -bで指定するものです。クラスターの独立した概念はありません。

[〜#〜] fat [〜#〜] 特にMS-DOSおよび初期のバージョンのWindowsで使用されるファイルシステムには、同様に単純なスペース割り当てがあります。 ext2がブロックを呼び出すもの、FATは clusters を呼び出します。コンセプトは同じです。

一部のファイルシステムには、より洗練された割り当て方式があります。固定サイズのブロックがありますが、同じブロックを使用して複数のファイルの最後の数バイトを格納できます。これは block suballocation として知られています。 ReiserfsBtrfs はそれを行いますが、ext3やext4はできません。

ユーティリティ

Unixユーティリティでは、Wordの「ブロック」を使用して、任意のサイズの単位、通常512バイトまたは1kBを意味することがよくあります。この使用法は、特定のファイルシステムやディスクハードウェアとは無関係です。歴史的に、512Bブロックは、当時のディスクとファイルシステムが512Bチャンクで動作することが多かったために発生しましたが、最近の使用法は任意です。 1kBブロックが多くの場合、現在推奨されています ですが、従来のUNIXユーティリティとインターフェイスは512Bブロックを使用する場合があります。各ユーティリティのドキュメントをチェックして、使用しているブロックのサイズを確認する必要があります(一部のスイッチにはスイッチがあります。たとえば、Linuxではdu -Bまたはdf -B)。

GNU/Linux statユーティリティでは、blocksの数値は、ファイルで使用される512Bブロックの数です。 IO Blockの数値は、ファイル入出力の推奨サイズです。これは、原則としては無関係ですが、通常は、基礎となるファイルシステムのブロックサイズ(または、それを呼び出す場合はクラスターサイズ)を示します。ここでは、13バイトのファイルがあり、ブロックサイズが2048のext3ファイルシステムで1ブロックを占めています。したがって、ファイルは4つの512バイト単位(statでは「ブロック」と呼ばれます)を占有します。

ディスク

ほとんどのディスクは、ディスクを セクター の束として表示するインターフェイスを提供します。ディスクは、セクター全体の書き込みまたは読み取りのみが可能で、個々のビットまたはバイトはできません。ほとんどのハードディスクには512バイトのセクターがありますが、4kBセクターのディスクが数年前に登場し始めました。

ディスクのセクターサイズは、ファイルシステムのブロックサイズとは直接関係ありませんが、ブロックを整数のセクターにするとパフォーマンスが向上します。

¹ 例外: スパースファイル スペースを節約します。