我尝试备份磁盘。我习惯rsync
在磁盘之间备份文件。
但是,当单独使用--delete
选项rsync
然后备份时,目标磁盘几乎已满,而源磁盘尚未满。
通过检查两个磁盘中的稀疏文件,使用
find . -type f -printf "%S\t%p\n" | gawk '$1 < 0.8 {print}'
我发现源磁盘中的稀疏文件“缩小了”,而目标磁盘中的情况并非如此。
我已经使用了rsync
,并且已经复制了许多稀疏文件。我该如何缩小它们以占用与源磁盘相同的空间?
遗憾的是,我没有使用-S
with 操作符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
)是可选的,但很有用。)