mat*_*pen 5 linux backup rsync hardlink btrfs
我的环境是 Ubuntu 15.04,内核为 3.19.0-28-generic 和 Btrfs v3.17。
我有两个相同的外部 USB 硬盘,用于我的备份脚本。其中一个格式为btrfs
,另一个格式为ext4
. 源文件系统始终是ext4
. 该rsync
命令如下所示:
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
Run Code Online (Sandbox Code Playgroud)
我刚刚意识到执行备份btrfs
需要非常长的时间:略多于一个小时,相比之下执行相同的复制到ext4
.
为了排除磁盘故障,我dd
使用 Ubuntu 附带的“磁盘实用程序”进行了一些基准测试,但我在两个磁盘上都获得了相同的性能。缓慢的部分似乎是针对先前备份的硬链接。即使经过碎片整理和清理,以下命令在 上也需要大约 53 分钟btrfs
,但在 上仅需要 1 分钟ext4
:
cp -arl "$previousBackup" "$destDir"
Run Code Online (Sandbox Code Playgroud)
通过在互联网上的研究,我发现btrfs
了硬链接的性能会受到影响的迹象,但我没想到会有如此巨大的差异。我发现这个命令更快,但仍然需要 30 多分钟才能完成:
cp -ar --reflink "$previousBackup" "$destDir"
Run Code Online (Sandbox Code Playgroud)
有没有人有这种行为的经验并且可以确认?有没有简单的方法来纠正它(例如不同的挂载选项),或者我应该尝试删除尽可能多的硬链接并只使用引用链接?
编辑
我刚刚发现即使删除一个目录也btrfs
需要一个多小时。同样的操作在“孪生”ext4
磁盘上是即时的。这里的元数据显然存在问题。
你说你正在用你的命令复制硬链接rsync
,但是-H
标志在哪里?我在你的命令中没有看到它:
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"\n
Run Code Online (Sandbox Code Playgroud)\n\n我理解rsync
\xe2\x80\x94 对于硬链接 \xe2\x80\x94 的工作原理的方式是,如果没有该-H
标志,则复制实际数据而不是硬链接,如rsync
手册页上所述:
\n\n\n-H, --硬链接
\n\n这告诉 rsync 在传输中查找硬链接文件,并将接收端的相应文件链接在一起。如果没有此选项,传输中的硬链接文件将被视为单独的文件。
\n
我可以想象这样一个过程,其中许多类似的文件被一遍又一遍地复制而不是硬链接,这会增加传输时间。
\n\n另外,还可以考虑使用-z
( --compress
) 标志:
\n\n\n-z, --压缩
\n\n使用此选项,rsync 在将文件数据发送到目标计算机时对其进行压缩,从而减少传输的数据量,这在连接速度较慢时非常有用。
\n
是的,这是同一系统上的 USB 到 USB 传输,因此\xe2\x80\x99s 可能速度已经优化,但它不会\xe2\x80\x99s 看到-z
可能会帮助您克服自然的 USB 数据传输瓶颈。
可以在此处找到解释这些标志\xe2\x80\x94 以及其他标志\xe2\x80\x94 的漂亮、简单的教程。
\n 归档时间: |
|
查看次数: |
2521 次 |
最近记录: |