ウィキペディアのページではいつものように、ブロック(データストレージ)は、すべてのキーワードのリンクについてあまりにも熱狂的であるにもかかわらず、有益です。
コンピューティング(具体的にはデータ送信とデータストレージ)では、ブロックはバイトまたはビットのシーケンスであり、公称の長さ(ブロックサイズ)を持ちます。このように構造化されたデータはブロックされていると言われます。データをブロックに入れるプロセスは、ブロッキングと呼ばれます。ブロッキングは、データを受信するコンピュータプログラムによるデータストリームの処理を容易にするために使用されます。ブロックされたデータは通常、一度にブロック全体が読み取られます。ブロッキングは、データを9トラックの磁気テープ、フロッピーディスク、ハードディスク、光ディスクなどの回転メディア、およびNANDフラッシュメモリに保存するときにほぼ一般的に使用されます。
ほとんどのファイルシステムはブロックデバイスに基づいています。これは、指定されたデータブロックの保存と取得を担当するハードウェアの抽象化レベルですが、ファイルシステムのブロックサイズは物理ブロックサイズの倍数になる場合があります。従来のファイルシステムでは、1つのブロックに1つのファイルの一部しか含まれない場合があります。これは、ファイルの長さがブロックサイズの倍数ではないことが多く、ファイルの最後のブロックが部分的に空のままになるため、内部の断片化によるスペースの非効率につながります。これにより、ファイルごとに平均して半分のブロックになるスラックスペースが作成されます。一部の新しいファイルシステムは、次のような手法でこれを解決しようとします。サブ割り当てとテールマージをブロックします。
古典的なUnixファイルシステムの合理的な概要もあります。
従来、ハードディスクのジオメトリ(ディスク自体のブロックのレイアウト)はCHSでした。
- ヘッド:各(a)プラッターの磁気リーダー/ライター。さまざまなシリンダーにアクセスするために出入りすることができます
- シリンダー:プラッターが回転するときに頭の下を通過するトラック
- セクター:シリンダーの一部に連続して保存された一定サイズのデータ。ドライブが処理できるデータの最小単位
CHSは最近あまり使用されていません。
- ハードディスクは、シリンダーごとに一定数のセクターを使用しなくなりました。一定の回転角ではなく、セクターごとに一定の弧長を使用することで、より多くのデータがプラッターに圧縮されるため、外側のシリンダーには、内側のシリンダーよりも多くのセクターがあります。
- ATA仕様により、ドライブは1ヘッドあたり2 16シリンダー、2 4ヘッド、および1シリンダーあたり28セクターを超えることはできません。512Bセクターの場合、これは128GBの制限です。BIOS INT13を介して、CHSを介して7.88GBを超えるものにアクセスすることはできません。
- 下位互換性のために、より大きなドライブは依然としてCHSジオメトリを持っていると主張します(そうでない場合、DOSは起動できません)が、より高いデータのいずれかに到達するには、LBAアドレス指定を使用する必要があります。
- CHSは、RAIDまたは非回転メディアでは意味がありません。
しかし、歴史的な理由から、これはブロックサイズに影響を及ぼしました。セクターサイズはほとんど常に512Bであったため、ファイルシステムのブロックサイズは常に512Bの倍数でした。(1kBおよび4kBのセクターサイズのドライブを導入する動きが進んでいますが、互換性はかなり苦痛に見えます。)
一般的に、ファイルシステムのブロックサイズが小さいと、多くの小さなファイルを保存するときに無駄なスペースが少なくなります(テールマージなどの高度な手法が使用されている場合を除く)。ブロックサイズが大きいと、外部の断片化が減り、大きなディスクでのオーバーヘッドが少なくなります。ファイルシステムのブロックサイズは通常2の累乗であり、ブロックデバイスのセクターサイズによって下に制限され、OSのページサイズによって上に制限されることがよくあります。
ページサイズはOSとプラットフォームによって異なります(Linuxの場合は、構成によっても異なります)。ブロックサイズと同様に、ブロックサイズが小さいほど内部の断片化は減少しますが、より多くの管理オーバーヘッドが必要になります。32ビットプラットフォームでは4kBのページサイズが一般的です。
次に、間接ブロックについて説明します。UFS設計では、
- iノードはファイルを記述します。
- UFS設計では、iノードが保持できるデータブロックへのポインターの数は非常に制限されています(16未満)。具体的な数は、派生した実装では異なるようです。
- 小さなファイルの場合、ポインタはファイルを構成するデータブロックを直接指すことができます。
- より大きなファイルの場合、ブロックへのより多くのポインターのみを含むブロックを指す間接ポインターが必要です。これらは、ファイルに属するデータブロックへの直接ポインターである場合があります。または、ファイルが非常に大きい場合は、さらに間接ポインターである場合があります。
したがって、間接ポインタが使用されている場合、ファイルに必要なストレージの量は、そのデータを含むブロックだけよりも多くなる可能性があります。
すべてのファイルシステムが、ファイルに属するデータブロックを追跡するためにこの方法を使用するわけではありません。 FATは、事実上巨大な一連のリンクリストである単一のファイルアロケーションテーブルを使用するだけであり、多くの最新のファイルシステムはエクステントを使用します。