newfs_msdos の実験から、FAT32パーティションの作成に必要な最小バイト数は34089472であると判断しました。 1バイト少なくなり、プログラムは次のように文句を言います。
$ newfs_msdos -F 32 -c 1 -S 512 -C 34089471 tm
newfs_msdos: 65524 clusters too few clusters for FAT32, need 65525
$ newfs_msdos -F 32 -c 1 -S 512 -C 34089472 tm
tm: 65525 sectors in 65525 FAT32 clusters (512 bytes/cluster)
BytesPerSec=512 SecPerClust=1 ResSectors=32 FATs=2 Media=0xf0 SecPerTrack=63 Heads=255 HiddenSecs=0 HugeSectors=66581 FATsecs=512 RootCluster=2 FSInfo=1 Backup=2
私の質問は:34089472をどのように計算したでしょうか?
FAT32 Wikipediaページ から、いくつかのメトリックを確認できます。
FAT32要件:128クラスターごとにFATの各コピーに1セクター
FAT32最小:クラスターあたり1セクター×65,525クラスター= 33,548,800バイト(32,762.5 KB)
私にとって、これは、セクターあたり512バイト、65525クラスター、および(65525/128 = 512)余分なセクターのオーバーヘッドがあることを意味します。
(65525 + 512)* 512 = 33810944
しかし、それは間違っています。実は
(65525 + 1056)* 512 = 34089472
この1056はどこから来たのですか?
関連する注記として、FAT16は同じように動作します。実際には、2091520(上記のウィキペディアページから)+オーバーヘッドの代わりに2124800バイトが必要です。どうして?
あなたは含まれていません:
ブートブロック0x20
バイト= 32
バイト。
FAT(ファイルアロケーションテーブル)の2つのコピー。1つはバックアップです。2 * 512 = 1024
。
それらを合計する:
1024 + 32 = 1056
詳細については、 FATファイルシステムのチュートリアル を参照してください。
私の質問は:34089472をどのように計算したでしょうか?
固定サイズのブロック、具体的には512バイトセクターのユニットですべてのデータ転送、読み取り、書き込み、および割り当てを実行するブロックデバイスを扱っています。
したがって、最初の計算はセクター数量への変換である必要があります。
34089472 bytes / 512 bytes per sector = 66581 sectors
私にとって、これはセクターあたり512バイトで、65525クラスターと(65525/128 = 512)余分なセクターのオーバーヘッドを意味しました
クラスターごとに1つのセクターを使用しているという明確な仮定があります。
ウィキペディアの記事 あなたが引用したものにはすでに答えがありますが、どうやらあなたはそれを見落としていたようです。
予約領域 (ブートセクターを含む)には32セクターがあります(通常、FAT32ファイルシステムでは32セクター)。
それぞれ512セクター(または合計1024セクター)の2つのFATがあります。
FAT32のルートディレクトリはありません。
データ領域の65525クラスターには65525セクターがあります。
これは合計66581セクターです。
関連する注記として、FAT16は同じように動作します。実際には、2091520(上記のウィキペディアページから)+オーバーヘッドの代わりに2124800バイトが必要です。どうして?
再びセクター数量への変換:
2124800 bytes / 512 bytes per sector = 4150 sectors
予約領域(ブートセクターを含む)には32セクターがあります(FAT16ファイルシステムでは32セクターでもあるようです)。 (当時、これはFATをトラックの開始に配置するセクターの数になります。)
クラスターごとに1つのセクターを使用し、最低4085クラスターを使用しているとすると、それぞれ16セクター(または合計32セクター)の2つのFATがあります。
FAT16のルートディレクトリには1つのセクター(またはクラスター)があります。
データ領域の4085クラスターには4085セクターがあります。
これは合計4150セクターです。