web-dev-qa-db-ja.com

最小FAT32パーティションに必要な最小バイト数を計算するにはどうすればよいですか?

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バイトが必要です。どうして?

1
Roxy

この1056はどこから来たのですか?

あなたは含まれていません:

  1. ブートブロック0x20バイト= 32バイト。

  2. FAT(ファイルアロケーションテーブル)の2つのコピー。1つはバックアップです。2 * 512 = 1024

それらを合計する:

1024 + 32 = 1056

詳細については、 FATファイルシステムのチュートリアル を参照してください。

0
DavidPostill

私の質問は: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セクターです。

0
sawdust