特定のファイルに収まる FAT パーティションの最小サイズを計算するにはどうすればよいでしょうか?

特定のファイルに収まる FAT パーティションの最小サイズを計算するにはどうすればよいでしょうか?

ファイル (または特定のサイズの複数のファイル) を収めるために必要なパーティションのサイズを計算する方法はありますか?

USB ドライブに FAT32 パーティションを作成し、そこに 1 GB のファイル (または 500 MB のファイル 2 つ、あるいはその他のファイル) を保存し、パーティションをできるだけ小さくしたいとします。

試行錯誤以外に、このパーティションのサイズを計算するアルゴリズムは何でしょうか?

答え1

これは、クラスター サイズ (通常は 4 KB ですが、フォーマット時に他の値を選択できます) と、この 1 GB に保存されるファイルの数によって異なります。どのファイルも少なくとも 1 つのクラスターを使用し、クラスターより大きいファイルは整数のクラスターを使用し、非常にまれな例外を除いて、末尾に不要なスペースを占有します。各ファイルのクラスター サイズに切り上げ (上限) するだけです。

from math import ceil

def calculate_fat32_used_space(file_sizes, cluster_size=4096):
    clusters_used = [ceil(size / cluster_size) for size in file_sizes]
    total_clusters = sum(clusters_used)
    return total_clusters * cluster_size
print(calculate_fat32_used_space([536870912, 536870912])) # For two 500MB files

すべてのサイズはバイト単位です (簡単に変換できます)。パラメータとしてファイルサイズの配列を取得するだけです。これを他のユニット サイズで動作するように適応させるのは簡単なはずです。また、FAT32 ファイル システム自体のスペースに関して、いくらかのオーバーヘッドも考慮する必要があります。おそらく 5 MB でしょうか?

関連情報