我完全理解--dig-holes
就地创建一个稀疏文件。也就是说,如果文件有漏洞,--dig-holes
选项会删除这些漏洞:
让我们以一种非常简单的方式来看待它,假设我们有一个名为非稀疏的巨大文件:
非稀疏:
aaaaaaaaaaaaaaaaaaaaaaaaaaaa
\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00
bbbbbbbbbbbbbbbbbbbbbbbbbbbb
\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00
cccccccccccccccccccccccccccc
非稀疏其中有很多零,假设交错的零以千兆字节为单位。fallocate --dig-holes
取消分配可用于零(空)的空间,其中实际文件大小保持不变(保留)。
那么,--punch-hole
它到底有什么作用呢?我读了手册页,仍然不明白:
-p, --punch-hole
Deallocates space (i.e., creates a hole) in the byte range
starting at offset and continuing for length bytes. Within
the specified range, partial filesystem blocks are zeroed,
and whole filesystem blocks are removed from the file.
After a successful call, subsequent reads from this range
will return zeroes.
创造洞,这看起来与选项相反--dig-hole
,为什么挖洞和创造洞不一样?!帮助!我们需要一个逻辑学家:)。
这两个选项的命名在语言上是同义词,这可能会造成混乱。
--dig-holes
和操作上有什么区别--punch-holes
(请不是逻辑或语言上的区别!)?
答案1
--dig-holes
不会更改文件的内容,如读取文件时确定的那样:它只是识别可以用空洞替换的连续零。
--punch-hole
使用--offset
和--length
参数在文件中打孔,无论文件在该偏移处包含什么:即使文件包含非零,它也可以工作,但文件的内容改变因此。考虑到您的示例文件,运行将从第二个字符之后开始用零fallocate --punch-hole --offset 2 --length 10
替换十个字符。a
答案2
简而言之:
--dig-holes
使文件稀疏而不修改其内容(如读取该文件的程序所见)。--punch-hole
在文件中创建一个漏洞,可能会修改现有数据。
不同之处在于,--dig-holes
分析文件中可以稀疏的区域(使用--offset
和--length
,如果提供的话,指示文件中要分析的范围),而--punch-holes
使用--offset
和--length
实际上清零文件的一部分,用于创建孔。
另请注意复数“挖孔”与单数“打孔”。
从手册, 关于--dig-holes
:
您可以将此选项视为执行操作
cp --sparse
,然后将目标文件重命名为原始文件,而不需要额外的磁盘空间。