为了在我的办公室备份数据,我使用运行 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-relative
选项rsync
一无所知。老实说,我不记得我是如何做到的,自从我配置它以来已经有一段时间了。鉴于我需要保存树,我应该只使用relative
吗?或者这样可以吗,因为它有效?
-=* 更新 *=-
我按照建议做了,并将 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 分钟内复制所有这些文件。
这里有几个问题会减慢备份解决方案的速度。
您
rsync
用于在两个“本地”文件系统之间进行复制。仅仅因为其中之一恰好是 SMB 与
rsync
. 如果文件系统作为本地系统的一部分安装,则rsync
必须将其视为本地。这意味着任何更改的文件都必须从 SMB 网络共享中完全复制,而不仅仅是更改的部分。如果您的文件服务器可以
rsync
直接运行,请修改备份进程,以便它可以启动远程rsync
进程并获得增量副本的好处。您正在通过 fuseblk 写入备份磁盘。
我认为这是因为磁盘上有 NTFS 文件系统。如果您可以重新格式化它们以使用本机 Linux 文件系统,例如
ext4
您将看到文件 IO 速度显着提高。包括rm -rf
那需要很长时间。如果您正在写入 VFAT,那么您还会遇到时间戳质量降低的问题,您需要
rsync
相应地发出警告,以免它试图继续将其他相同的文件复制到您的备份媒体。我从评论中了解到您确实在使用 NTFS,并且您希望继续使用它,以便可以在 Windows 下读取磁盘。另一种方法是将
ext4
磁盘驱动程序安装到 Windows 中。我使用ext2fs,我觉得它很可靠。