以下这些 ext3 分区包含相同的数据。我们可以看到,分区大小越大,相同文件所需的空间就越大:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop11 3965777 561064 3199964 15% [...]
/dev/loop19 573029 543843 29186 95% [...]
Filesystem Size Used Avail Use% Mounted on
/dev/loop11 3.8G 548M 3.1G 15% [...]
/dev/loop19 560M 532M 29M 95% [...]
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop11 1024000 1656 1022344 1% [...]
/dev/loop19 1024000 1656 1022344 1% [...]
我从一个固定大小的分区开始,这个分区可能浪费了很多空间,我想创建一个能够容纳这些数据但大小(几乎)最小的分区。如何才能可靠地计算出存储一定量数据所需的最小分区大小?数据量会随时间变化,我需要自动进行这些计算。
答案1
您可以尝试以下步骤:
- 创建一个比您需要的稍大的磁盘映像。
- 直接在镜像中创建文件系统。您可能需要设置文件系统参数,如 billc.cn 所建议的。
- 循环挂载图像并复制文件。卸载。
- 使用以下方法将图像缩小到最小尺寸
resize2fs -M
。如果您愿意,可以使用 Gparted 作为图形前端。
基本上,resize2fs
可以根据文件实际使用的空间动态地进行您想要的计算。
如果您只想计算最小尺寸,而不是实际调整大小,请使用resize2fs -P
。
由于您的数据只有几百兆字节,您可以在 RAM(tmpfs)中创建中间磁盘映像,以便在任何具有可用空间的文件系统中节省时间(例如 /tmp),调整大小,然后将dd
其复制到您的硬盘上。
如果你的数据一旦写入就不会改变,你应该考虑使用壁球或者使用类似的文件系统,这将比 ext3 更紧凑。否则,请考虑 ext2,它可以避免日志记录的开销。
答案2
您可以使用(或)-b
选项明确设置块大小,也可以使用选项指定文件类型。有关详细信息,请查看手册页。mkfs
mke2fs
-T
您还需要确保 inode 的数量和日志大小合适。