ブロックのサイズ
3次元トラック(すべてのディスクで同じトラック)はシリンダーと呼ばれます。各トラックは63セクターに分かれています。各セクターには、512バイトのデータが含まれています。したがって、パーティションテーブルのブロックサイズは64ヘッド* 63セクター* 512バイトer ...を1024で除算したものです::)
ソース:fdiskでのパーティション分割
Linuxがブロックサイズを参照するときはいつでも、それはほぼ常に1024バイトです -Linuxは、バッファキャッシュおよびすべてのプリミティブユニットとして1024バイトのブロックを使用します。粒度(たとえば、通常サイズのext3ファイルシステムでは、ファイルシステムのブロックサイズは通常4096バイトです)。ただし、ファイルシステムのブロックサイズを確認することはほとんどありません。実際にそれを見る唯一の方法は、カーネルハッカーであるか、dumpe2fsのようなプログラムを実行することです。
これに関する問題は、あなたが心に留めておかなければならない4つの異なるユニットがあるということです。さらに悪いことに、これらの2つのユニットには同じ名前が付いています。これらは異なるユニットです:
- ハードウェアブロックサイズ、「セクターサイズ」
- ファイルシステムのブロックサイズ、「ブロックサイズ」
- カーネルバッファキャッシュのブロックサイズ、「ブロックサイズ」
- パーティションテーブルのブロックサイズ、「シリンダーサイズ」
ファイルシステムのブロックサイズとバッファキャッシュのブロックサイズを区別するために、FATの用語に従い、ファイルシステムのブロックサイズには「クラスターサイズ」を使用します。
セクターサイズは、ハードウェアが処理する単位です。これはハードウェアの種類によって異なりますが、ほとんどのPCスタイルのハードウェア(フロッピー、IDEディスクなど)は512バイトのセクターを使用します。
クラスターサイズは、ファイルシステムが使用する割り当て単位であり、断片化の原因になります。中程度のサイズのext3ファイルシステムでは、これは通常4096バイトですが、で確認できますdumpe2fs
。これらは通常「ブロック」とも呼ばれていることを覚えておいてください。ここではそれらをクラスターと呼んでいます。st_blksize
プログラムがファイルの実際のディスク使用量を計算できるようにするために、クラスターサイズはstatバッファーで返されるものです。
ブロックサイズは、カーネルがストレージデバイスから読み取られたセクターをキャッシュするときにカーネルが内部で使用するバッファーのサイズです(「ブロックデバイス」という名前です)。これはカーネル内の最も原始的なストレージ形式であるため、すべてのファイルシステムクラスターサイズはこの倍数でなければなりません。このブロックサイズは、ほとんど常にユーザースペースプログラムによって参照されるものでもあります。たとえばdu
、-hまたは-Hオプションなしで実行
すると、ファイルが占めるこれらのブロックの数が返されます。df
これらのブロックのサイズも報告され、fdisk -l
出力の「ブロック」列はこのタイプになります。これは、最も一般的に「ブロック」と呼ばれるものです。2つのディスクセクターが各ブロックに収まります。
シリンダーサイズは、パーティションテーブルとBIOSでのみ使用されます(BIOSはLinuxでは使用されません)。
出典:Linuxのディスクブロックサイズ...
セクター0-31
フラッシュドライブはFATフォーマットのデバイスであるため、最初の32セクターに関する質問に答えると、FATファイルシステムの定義を見ると、FATファイルシステムは4つの異なるセクションで構成されていることがわかります。
a)予約セクター。
b)ファイルアロケーションテーブル(FAT)領域。
c)ルートディレクトリ領域、および
d)データ領域。
一番最初にある予約済みセクターは、(この場合)セクター0〜31です。
最初の予約済みセクター(論理セクター0)は、ブートセクター(別名
ボリュームブートレコード(VBR))です。これには、BIOSパラメータブロックと呼ばれる領域(いくつかの基本的なファイルシステム情報、特にそのタイプ、および他のセクションの場所へのポインタ)が含まれ、通常はオペレーティングシステムのブートローダーコードが含まれます。
ブートセクターからの重要な情報には、DOSおよびOS / 2 のドライブパラメーターブロック(DPB)と呼ばれるオペレーティングシステム構造を介してアクセスできます。
予約済みセクターの総数は、ブートセクター内のフィールドで示され、FAT32ファイルシステムでは通常32です。
FAT32ファイルシステムの場合、予約済みセクターには、論理セクター1のファイルシステム情報セクターと論理セクター6のバックアップブートセクターが含まれます。
他の多くのベンダーは、ブートストラップローダーにシングルセクターセットアップ(論理セクター0のみ)を採用し続けていますが、Microsoftのブートセクターコードは、FAT32の導入以来、論理セクター0と2に成長し、論理セクター0は論理セクタ2のサブルーチン。バックアップブートセクタ領域は、3つの論理セクタ6、7、および8で構成されています。場合によっては、Microsoftは拡張ブートローダー用に予約済みセクター領域のセクター12も使用します。
OPの質問に関連しない、単なる追加情報
FATリージョンはセクター32になります。
通常、これには冗長性チェックのためにファイルアロケーションテーブルの2つのコピー(異なる場合があります)が含まれますが、ディスク修復ユーティリティによってもほとんど使用されません。
これらはデータ領域のマップであり、ファイルとディレクトリで使用されているクラスターを示します。FAT12およびFAT16では、予約済みセクターの直後に続きます。
通常、追加のコピーは書き込み時に厳密な同期で保持され、読み取り時には、最初のFATでエラーが発生したときにのみ使用されます。FAT32では、デフォルトの動作から切り替えて、使用可能なFATから単一のFATを選択して診断に使用することができます。
マップの最初の2つのクラスター(クラスター0と1)には、特別な値が含まれています。
ルートディレクトリ領域:
これは、ルートディレクトリにあるファイルとディレクトリに関する情報を格納するディレクトリテーブルです。これはFAT12およびFAT16でのみ使用され、このボリュームの作成時に事前に割り当てられた固定の最大サイズをルートディレクトリに課します。FAT32は、ファイルや他のディレクトリと共にルート領域をデータ領域に格納し、そのような制約なしで拡張できるようにします。したがって、FAT32の場合、データ領域はここから始まります。
データ領域:
これは、実際のファイルとディレクトリのデータが格納され、パーティションのほとんどを占めます。従来、データ領域の未使用部分は、IBM互換マシンでのフォーマット中にINT 1Ehのディスクパラメータテーブル(DPT)に従って0xF6のフィラー値で初期化されますが、Atariポートフォリオでも使用されます。8インチCP / Mフロッピーは通常、0xE5の値で事前にフォーマットされています。Digital Researchにより、この値はAtari STフォーマットのフロッピーでも使用されました。Amstradは代わりに0xF4を使用しました。一部の最新のフォーマッターは、値0x00でハードディスクを消去しますが、プログラムされていないフラッシュブロックの既定値である0xFFは、フラッシュディスクで摩耗を減らすために使用されます。後者の値は通常、ROMディスクでも使用されます。(一部の高度なフォーマットツールでは、フォーマットフィラーバイトを設定できます。)
ファイルとサブディレクトリのサイズは、FAT内のファイルのチェーンにリンクを追加するだけで、任意に(空きクラスターがある限り)増やすことができます。ただし、ファイルはクラスター単位で割り当てられるため、1 KiBのファイルが32 KiBクラスターにある場合、31 KiBが無駄になります。
FAT32は通常、ルートディレクトリテーブルをクラスター番号2で開始します。データ領域の最初のクラスターです。
ソース:ウィキペディア-ファイル割り当てテーブル