当执行sudo fallocate -l 2G /swapfile命令时,就会创建2GB,但是使用这种内容或数据呢?可以定制吗?如果是,怎么做?我确实做了一些研究,但没有关于这方面的细节。我想知道用fallocate来实现swap file是否很好。
例如,sudo dd if=/dev/zero of=/swapfile bs=1024 count=N创建了填充了零的数据,不确定swap file是否要求使用零的数据--在swap file教程中没有提到这一点。
发布于 2022-03-31 01:10:43
交换文件不需要满是零。内核跟踪正在使用的块。
但是,man mkswap可能警告您不要使用fallocate:
请注意,交换文件不能包含任何漏洞。使用
cp(1)创建文件是不可接受的。在支持预先分配的文件系统(如XFS或ext4 )上,或者在btrfs之类的复制写文件系统上,都不能使用fallocate(1)。建议在这些情况下使用dd(1)和/dev/zero。在添加交换文件以复制写入文件系统之前,请阅读swapon(8)的说明。
(并非所有版本的手册都包括以下内容)
此外,swapon说:
内核中的交换文件实现希望能够直接写入文件,而无需文件系统的帮助。这是在诸如XFS或ext4之类的文件系统上预先分配的文件(如
fallocate(1))和btrfs之类的复制到写文件系统上的一个问题。
另一个版本的手册上写着
根据文件系统的不同,
fallocate(1)创建的预先分配的文件也可以解释为有漏洞的文件。从Linux4.18开始,XFS就支持预先分配的交换文件。
因此,能否使用fallocate创建交换文件的问题很大程度上取决于内核和文件系统。
相比之下,一个简单的dd就可以工作了。
发布于 2022-03-31 03:02:56
有关fallocate适合交换文件创建的详细信息,请参阅D1。
就fallocate“创建”的数据而言,技术答案取决于所使用的文件系统,但结果始终是,当fallocate扩展文件的长度时,新分配的文件部分在读取时将产生零(尽管它可能不包含磁盘上的零)。这是在相关系统调用的文档中描述的:
在调用之前未包含数据的偏移量和len指定范围内的任何子区域都将初始化为零。
https://unix.stackexchange.com/questions/697423
复制相似问题