首先,我想解释一下为什么我需要这个。 我需要为虚拟机创建一些磁盘映像文件。那些文件将是非常庞大的(100GB~1.5TB)文件,其中填充了零。它应该在很短的时间内创建(尽可能多,至少它应该比“/ dev / zero”的“dd”命令更快)。要求的尺寸将是多种多样的(这意味着我以前无法创建它)。 简单的解决方案(直到知道)将文件创建为稀疏文件。 但为什么我想改变解决方案是稀疏文件的某种缺点。
在我看来,它可以通过直接编辑inode来解决。 我的想法是创建一个非常大的文件,用零填充并将其除以inode级别。或者,在连接文件以创建所需的文件大小之前,我可以创建大量100 GB的文件。 我知道“debugfs”可以编辑inode的直接块。因为“debugfs”用于文件恢复,也许,我可以用它来创建文件。但到目前为止我找不到如何编辑inode的间接块。除了编辑间接块之外,我不确定直接编辑inode的副作用。
无论如何,是否有任何很酷的解决方案或工具(如果存在)用于“缝制”大文件或创建零填充文件? “猫”命令或其他只是读写解决方案可能,无法解决我的问题。
答案 0 :(得分:5)
如果您只想创建零填充文件,则fallocate可能很有用。从手册页
fallocate用于将块预分配给文件。对于支持fallocate系统调用的文件系统,可以通过分配块并将其标记为未初始化来快速完成,不需要IO到数据块。这比通过填充零来创建文件要快得多。
从Linux Kernel v2.6.31开始,btrfs,ext4,ocfs2和xfs文件系统支持fallocate系统调用。