“fallocate”命令生成什么样的内容/数据?

“fallocate”命令生成什么样的内容/数据?

当执行该sudo fallocate -l 2G /swapfile命令时,会创建 2 GB,但包含那种内容或数据?可以定制吗?如果是的话怎么办?我确实做了一些研究,但没有关于这方面的细节。我想知道是否有很好的fallocate用途swap file

例如,sudo dd if=/dev/zero of=/swapfile bs=1024 count=N创建填充零的数据,不确定是否swap file强制要求填充零的数据 - 在swap file教程中没有提到这一点。

答案1

交换文件不需要全为零。内核跟踪正在使用的块。

但是,man mkswap可能会警告您不要使用fallocate

请注意,交换文件不得包含任何漏洞。使用cp(1)创建文件是不可接受的。也不能fallocate(1)在支持预分配文件的文件系统(例如 XFS 或 ext4)或写时复制文件系统(例如 btrfs)上使用。在这些情况下建议使用 dd(1)and 。请在将交换文件添加到写时复制文件系统之前/dev/zero阅读注释。swapon(8)

(并非所有版本的联机帮助页都包含该内容)

进一步swapon说:

内核中的交换文件实现期望能够直接写入文件,而不需要文件系统的帮助。这是fallocate(1)XFS 或 ext4 等文件系统上的预分配文件(例如 )以及 btrfs 等写时复制文件系统上的问题 。

手册页的另一个版本说

创建的预分配文件fallocate(1)也可能被解释为有漏洞的文件,具体取决于文件系统。自 Linux 4.18 起,XFS 支持预分配的交换文件。

因此,您是否可以用来fallocate创建交换文件很大程度上取决于您的内核和文件系统。

相比之下,简单的dd就可以了。

答案2

斯蒂芬·哈里斯的回答fallocate有关创建交换文件的适用性的详细信息。

就“创建”的数据而言fallocate,技术答案取决于所使用的文件系统,但结果始终是,当fallocate扩展文件的长度时,文件新分配的部分在读取时将产生零(甚至尽管它可能在磁盘上不包含零)。这是描述的在相关系统调用的文档中

指定范围内的任何子区域抵消调用前不包含数据的将被初始化为零。

相关内容