2012-02-06 113 views
1

首先,我想解释为什么我需要这个。 我需要为虚拟机创建一些磁盘映像文件。该文件将是非常巨大的(100GB〜1.5TB)文件,填充零。它应该在很短的时间内创建(尽可能多,至少应该比使用“/ dev/zero”的“dd”命令更快)。要求大小将是各种各样的(这意味着我不能以前创建它)。 简单的解决方案(直到知道)将文件创建为稀疏文件。 但为什么我想改变解决方案是稀疏文件的某种缺点。在非常短的时间内连接非常大(〜TByte)文件

在我看来,它可以通过直接编辑inode来解决。 我的想法是创建非常大的文件,这些文件充满了零并将它们分为inode级别。或者,在连接文件以创建所需的文件大小之前,我可以创建大量100 GB的文件。 我知道“debugfs”可以编辑索引节点的直接块。因为“debugfs”用于文件恢复,也许,我可以使用它来创建文件。但直到现在我还找不到如何编辑inode的间接块。除了编辑间接块之外,我不确定直接编辑inode的副作用。

无论如何,是否有任何酷的解决方案或工具(如果存在)“缝制”大文件或创建零填充文件? “猫”命令或其他只是读写解决方案可能不能完成我的问题。

+2

你说你想解释_why_,但你永远不会解释它......但是,如果你需要填充零的文件,为什么不读取你需要的任何数量从/ dev/zero? – Kimvais 2012-02-06 07:59:45

+0

/dev/zero正是我想要建议:) – paulsm4 2012-02-06 08:03:52

+0

// kimvais谢谢你的回复。该文件是磁盘映像。我将把这些镜像安装到虚拟机上。 – jinhwan 2012-02-07 00:19:19

回答

4

如果您只想创建零填充文件,则fallocate可能会有用。从手册页

fallocate用于将块预分配给文件。对于支持fallocate系统调用的文件系统,通过分配块并将它们标记为未初始化,可以快速完成此操作,因此不需要数据块的IO。这比通过填充零来创建文件要快得多。

从Linux Kernel v2.6.31开始,bocfs,ext4,ocfs2和xfs文件系统支持fallocate系统调用。

+0

谢谢你的回答。但可悲的是,我不能使用这个解决方案,df – jinhwan 2012-02-22 06:52:58