Rsnapshot

rsnapshot 很慢

  • November 18, 2018

為了在我的辦公室備份數據,我使用執行 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 分鐘內複製所有這些文件。

這裡有幾個問題會減慢備份解決方案的速度。

  1. rsync用於在兩個“本地”文件系統之間進行複制。

僅僅因為其中之一恰好是 SMB 與rsync. 如果文件系統作為本地系統的一部分安裝,則rsync必須將其視為本地。這意味著任何更改的文件都必須從 SMB 網路共享中完全複製,而不僅僅是更改的部分。

如果您的文件伺服器可以rsync直接執行,請修改備份程序,以便它可以啟動遠端rsync程序並獲得增量副本的好處。 2. 您正在通過 fuseblk 寫入備份磁碟。

我認為這是因為磁碟上有 NTFS 文件系統。如果您可以重新格式化它們以使用本機 Linux 文件系統,例如ext4您將看到文件 IO 速度顯著提高。包括rm -rf那需要很長時間。

如果您正在寫入 VFAT,那麼您還會遇到質量時間戳降低的問題,您需要rsync相應地發出警告,以免它試圖繼續將其他相同的文件複製到您的備份媒體。

我從評論中了解到您確實在使用 NTFS,並且您希望繼續使用它,以便可以在 Windows 下讀取磁碟。另一種方法是將ext4磁碟驅動程序安裝到 Windows 中。我使用ext2fs,我覺得它很可靠。

引用自:https://unix.stackexchange.com/questions/480570