在很短的时间内连接非常大的(〜TByte)文件

jin*_*wan 1 linux filesystems file

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

在我看来,可以通过直接编辑inode来解决。我的想法是创建一个非常大的文件,该文件将填充零并按inode级别进行划分。或者,我可以创建许多100 GB的文件,然后再将这些文件连接起来以创建所需的文件大小。我知道“ debugfs”可以编辑inode的直接块。由于“ debugfs”用于文件恢复,也许我可以用它来创建文件。但直到现在我都找不到如何编辑inode的间接块。除了编辑间接块之外,我不确定直接编辑inode的副作用。

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

gho*_*ost 5

如果您只想创建零填充文件,那么请使用fallocate。从手册页

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

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