当执行该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
扩展文件的长度时,文件新分配的部分在读取时将产生零(甚至尽管它可能在磁盘上不包含零)。这是描述的在相关系统调用的文档中:
指定范围内的任何子区域抵消和伦调用前不包含数据的将被初始化为零。