![另一个文件系统上的磁盘使用情况](https://linux22.com/image/57899/%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E7%9A%84%E7%A3%81%E7%9B%98%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5.png)
我的 ext4 分区上有一个目录,其中有很多相当小的文件。如果我将它们复制到具有其他簇大小的文件系统(而不实际复制它们),我如何计算出它们将使用多少空间?就像 FAT16 一样,簇大小为 32KB。
答案1
我不知道是否有一个特定的工具可以做到这一点,但如果我真的想弄清楚,我会做一些类似的事情(当然,在脚本/程序中):计算文件并将其乘以簇的大小。当然,我需要检查它们的“范围”(我的意思是查看它们的大小并检查是否需要 4、8、32 或 64 KB 集群)。
这只是一个想法,我很可能是错的。但除非其他人知道可以为您完成此任务的程序,否则您至少可以轻松地进行估计。
答案2
这是一个 bash/awk 脚本:
#!/bin/bash
find . -type f -printf '%s\n' | awk '
function ceil(number) {
if (number == int(number)) {
return (number);
}
return int(number) + 1;
}
function ceilWithUnit(number, unit) {
return ceil(number / unit) * unit;
}
BEGIN {
blockSize = 32 * 1024;
fileSizeSum = 0;
diskUsage = 0;
}
{
diskUsage += ceilWithUnit($0, blockSize);
fileSizeSum += $0;
}
END {
printf("File count: %u\n", NR);
printf("Average size: %.2f KB\n", fileSizeSum / NR / 1024);
printf("Disk usage with %d bytes blocks: %.2f MB\n", blockSize, diskUsage / 1024 / 1024);
}
'