rsnapshot 非常慢

rsnapshot 非常慢

为了备份办公室中的数据,我使用运行 rsnapshot 的 Raspberry Pi B 型(我有一个备用的)。基本上,每天晚上它都会将数据从一堆 smb 安装文件夹复制到几个外部硬盘驱动器 (fuseblk)。

我逐渐添加了要备份的数据,最近整个过程变得非常缓慢:执行整个操作大约需要 15 个小时。

这是一份副本的日志(仅在一个磁盘上):

[07/Nov/2018:21:16:05] /usr/bin/rsnapshot -c /etc/rsnapshot.conf Daily: started
[07/Nov/2018:21:16:05] echo 28378 > /var/run/rsnapshot.pid
[07/Nov/2018:21:16:08] /bin/rm -rf /mnt/Disk1/Backup/Daily.4/
[07/Nov/2018:23:31:33] mv /mnt/Disk1/Backup/Daily.3/ /mnt/Disk1/Backup/Daily.4/
[07/Nov/2018:23:31:33] mv /mnt/Disk1/Backup/Daily.2/ /mnt/Disk1/Backup/Daily.3/
[07/Nov/2018:23:31:33] mv /mnt/Disk1/Backup/Daily.1/ /mnt/Disk1/Backup/Daily.2/
[07/Nov/2018:23:31:33] /bin/cp -al /mnt/Disk1/Backup/Daily.0 /mnt/Disk1/Backup/Daily.1
[08/Nov/2018:02:17:45] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld01 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:43:28] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld02 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:46:29] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld03 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:54:05] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld04 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:54:48] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld05 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:54:49] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld06 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:54:49] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld07 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:00:10] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld08 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:25:57] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld09 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:25:57] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld10 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:28:42] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld11 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:53:39] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld12 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:58:05] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld13 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:04:00:24] touch /mnt/Disk1/Backup/Daily.0/
[08/Nov/2018:04:00:24] rm -f /var/run/rsnapshot.pid
[08/Nov/2018:04:00:24] /usr/bin/rsnapshot -c /etc/rsnapshot.conf Daily: completed successfully

现在,我知道 RPi 并不快,外部驱动器也不快。不过,问题似乎就在这里

[07/Nov/2018:21:16:08] /bin/rm -rf /mnt/Disk1/Backup/Dayly.4/

尤其是在这里

[07/Nov/2018:23:31:33] /bin/cp -al /mnt/Disk1/Backup/Dayly.0 /mnt/Disk1/Backup/Daily.1

请记住,我可能有数万个文件(我一边写一边数着它们,但我不知道需要多长时间)。 (编辑:~30 GB 空间中有 250k 个文件)

知道可能是什么问题以及我是否/如何解决它?

当我在这里时,我对命令中的--relative[...]选项一无所知。老实说,我不记得我是怎么想到它的,自从我配置它以来已经有一段时间了。鉴于我需要保存树,我应该使用吗?或者这样就可以了,因为它有效吗?--no-relativersyncrelative

-=* 更新 *=-

我按照建议将 USB 驱动器格式化为 ext4。这是运行后的日志:

[16/Nov/2018:21:16:04] /usr/bin/rsnapshot -c /etc/rsnapshot.conf Daily: started
[16/Nov/2018:21:16:04] echo 19966 > /var/run/rsnapshot.pid
[16/Nov/2018:21:16:04] /bin/rm -rf /mnt/Disk1/Backup/Daily.4/
[16/Nov/2018:21:18:52] mv /mnt/Disk1/Backup/Daily.3/ /mnt/Disk1/Backup/Daily.4/
[16/Nov/2018:21:18:52] mv /mnt/Disk1/Backup/Daily.2/ /mnt/Disk1/Backup/Daily.3/
[16/Nov/2018:21:18:52] mv /mnt/Disk1/Backup/Daily.1/ /mnt/Disk1/Backup/Daily.2/
[16/Nov/2018:21:18:52] /bin/cp -al /mnt/Disk1/Backup/Daily.0 /mnt/Disk1/Backup/Daily.1
[16/Nov/2018:21:22:25] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld01 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:19] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld02 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:27] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld03 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:41] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld04 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:44] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld05 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:44] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld06 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:45] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld07 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:25:04] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld08 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:26:04] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld09 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:26:04] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld10 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:26:20] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld11 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:26:58] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld12 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:28:54] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld13 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:30:03] touch /mnt/Disk1/Backup/Daily.0/
[16/Nov/2018:21:30:03] rm -f /var/run/rsnapshot.pid
[16/Nov/2018:21:30:03] /usr/bin/rsnapshot -c /etc/rsnapshot.conf Daily: completed successfully

正如您所看到的,总体时间大幅缩短:15 分钟 vs. 约 7 小时。

谢谢大家,说实话我很感动。

我剩下的唯一疑问是评论中讨论的内容:我相信 rsync 会进行增量复制,即使它将 smb 源文件夹视为本地文件夹。其中一些文件夹包含 10k+ 文件(可能更多,我现在无法检查),并且不可能在短短 2 分钟内复制所有这些文件。

答案1

这里有几个问题会减慢备份解决方案的速度。

  1. 您正在使用rsync在两个“本地”文件系统之间进行复制。

    仅仅因为其中之一恰好是 SMB 与rsync.如果文件系统作为本地系统的一部分安装,则rsync必须将其视为本地系统。这意味着任何更改的文件都必须从 SMB 网络共享中完整复制,而不仅仅是更改的部分。

    如果您的文件服务器可以rsync直接运行,请修改备份进程,以便它可以启动远程rsync进程并获得增量副本的好处。

  2. 您正在通过 fusionblk 写入备份磁盘。

    我认为这是因为磁盘上有 NTFS 文件系统。如果您可以重新格式化它们以使用本机 Linux 文件系统,ext4您将看到文件 IO 速度的显着提高。包括rm -rf花了这么长时间的事情。

    如果您正在写入 VFAT,那么您还会遇到质量时间戳降低的问题,并且您需要rsync相应地发出警告,以便它不会尝试继续将其他相同的文件复制到备份介质。

    我从评论中了解到您确实在使用 NTFS 并且您希望继续使用它,以便可以在 Windows 下读取磁盘。另一种方法是ext4在 Windows 中安装磁盘驱动程序。我用ext2fs,我觉得这很可靠。

相关内容