如何在不使用“-S”运算符的情况下复制稀疏文件后,以与 Linux 中的 rsync 相同的方式缩小稀​​疏文件?

如何在不使用“-S”运算符的情况下复制稀疏文件后,以与 Linux 中的 rsync 相同的方式缩小稀​​疏文件?

我尝试备份磁盘。我习惯rsync在磁盘之间备份文件。

但是,当单独使用--delete选项rsync然后备份时,目标磁盘几乎已满,而源磁盘尚未满。

通过检查两个磁盘中的稀疏文件,使用

find . -type f -printf "%S\t%p\n" | gawk '$1 < 0.8 {print}'

我发现源磁盘中的稀疏文件“缩小了”,而目标磁盘中的情况并非如此。

我已经使用了rsync,并且已经复制了许多稀疏文件。我该如何缩小它们以占用与源磁盘相同的空间?

遗憾的是,我没有使用-Swith 操作符rsync

我知道我可以删除它们并再次复制它们......

答案1

工具

使用fallocate -d filename

-d--dig-holes
检测并挖掘漏洞。这会使文件就地稀疏,而不使用额外的磁盘空间。漏洞的最小大小取决于文件系统 I/O 块大小(通常为 4096 字节)。此外,使用此选项时,会隐含。如果和--keep-size未指定范围,则会分析整个文件以查找漏洞。--offset--length

您可以将此选项视为执行cp --sparse然后将目标文件重命名为原始文件,而无需额外的磁盘空间。

--punch-hole参阅受支持的文件系统列表。

(来源:man 1 fallocate

支持的文件系统列表如下:

支持 XFS(自 Linux 2.6.38 起)、ext4(自 Linux 3.0 起)、Btrfs(自 Linux 3.7 起)、tmpfs(自 Linux 3.5 起)和 gfs2(自 Linux 4.16 起)。

(同上)

请注意,该列表将来可能会发生变化。请检查man 1 fallocate您的操作系统。


批量使用

以下命令将fallocate -d针对当前工作目录及其子目录中的每个常规文件运行:

find . -type f -exec fallocate -v -d {} \;

(详细模式(-v)是可选的,但很有用。)

相关内容