Linux:格式化时指定精确的总大小

Linux:格式化时指定精确的总大小

如何将分区格式化为具有特定总文件系统空间量的 ext4,该空间量位于第二列df -B1?我可以用其他文件系统类型执行此操作吗?

我只需要这个来测试。测试的软件有基于已安装文件系统总空间的规则和策略。

答案1

关于 df 的第二列,有几点需要注意。首先,无论你通过 -B 选项指定什么单位,对于所有文件系统,该数量都是文件系统块大小的倍数,而文件系统块大小又几乎总是 2 的幂。因此,如果你想要格式化一个文件系统,而“df -B1”的第二个数字不是文件系统块大小的倍数,比如 102233(质数)——这是不可能的。你无法使用任何使用linux的文件系统。

其次,从 SuSv3 开始,定义第二列:

“文件系统的总大小,以 512 字节为单位。这个数字的确切含义是由实现定义的,但应该包括 <已用空间>、<可用空间>,以及系统保留的、通常不提供给用户的任何空间。”

(在 Linux 中,df 违反了 Posix/SUSv3 规范,因为它兼容 BSD --- 也就是说,它默认以 1k 块显示单位,而不是历史上的 AT&T 512 字节扇区。)

POSIX 或单一 Unix 规范并未固定该数字的确切计算方式,因为即使在标准委员会起草 POSIX 标准时,不同 Unix 版本和文件系统实现之间对于该数字中可能包含的内容已经存在差异。例如,对于 ext2/3/4,第一个数字是使用文件系统中的块总数减去固定元数据(例如超级块、块组描述符、inode 分配位图、块分配位图和 inode 表)计算得出的。其他文件系统在第一个数字中包含和排除的块方面可能会有所不同。

因此,如果你想格式化文件系统,那么它有一些精确的数量,这可能可行也可能不可行,而且这样做需要反复试验。您可以控制文件系统中的 inode 数量,并且通常可以调整文件系统调整参数,但我认为这真的不值得。

相反,我建议使用测试模拟[1],这样您就可以模拟 df -B1 的输出。这可能很简单,只需创建一个名为“df”的 shell 脚本,将其放在 PATH 中“真实”df 程序前面的目录中。

[1]https://en.wikipedia.org/wiki/Mock_object

相关内容