有沒有辦法計算一個分割區需要多大才能容納一個檔案(或給定大小的多個檔案)?
假設我想在 USB 驅動器上創建一個 FAT32 分區並在那裡存儲 1 Gb 文件(或兩個 500 Mb 文件,或其他任何文件),並且我希望分區盡可能小。
除了反覆試驗之外,計算該分區大小的演算法是什麼?
答案1
它取決於簇大小(通常為 4 KB,但您可以在格式化時選擇其他值)以及這 1 GB 儲存的檔案數量。任何文件都將至少使用一個簇,大於簇的文件將使用整數個簇,在其末尾佔用一些不需要的空間(極少數例外)。您只需將每個檔案的簇大小向上舍入 (ceil) 即可。
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 fs 本身的空間方面的一些開銷。也許 5 MB?