Ssh

我的 rsnapshot 凍結沒有錯誤

  • June 11, 2017

我嘗試製作備份系統。我嘗試使用 rsnapshot。

描述:

帶有 rsnapshot 的客戶端將數據放入 sshfs-mounted 文件夾(sftp 備份伺服器)。我製作了 ssh-key,安裝了它,一切都很好。

在 rsnapshot conf 中,我啟用了 link_dest=1,因為預設值 0 使 rsnapshot 對 ssh 掛載文件夾上的硬連結哭泣。

錯誤描述:

我使用 cron 進行了 rsnapshot 自動啟動。幾天后,我檢查了我的文件夾,發現它們很小。(所有數據為 4gb,但文件夾約為 300mb、400mb)。

我檢查了複製到 ssh 文件夾。 cp data ssh_folder.一切正常,速度也不慢:大約 30 分鐘,我在 ssh 文件夾上看到了我的 4gb。

好的。我手動啟動 rsnapshot,文件很詳細。

rsnapshot -V hourly

唯一的錯誤是 chown 錯誤(使用 ssh 並不那麼容易) 日誌文件中也沒有任何內容。它只是凍結在某個文件上。

這是第一個奇怪的想法。第二個是:我嘗試進行增量備份,以盡量減少同步到 ssh 的時間。但是當我檢查我的新每小時目錄時,我只看到我的部分數據,而不是新數據或指向 old_data 的連結。只是新文件夾中的相同文件。

非常感謝任何建議。

UPD:沒有大文件。這是一個網路伺服器

UPD:使用 strace

select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)
select(5, [], [4], [], {tv_sec=60, tv_usec=0}) = 0 (Timeout)

UPD:我認為我找到了解決方案。我的備份文件夾在我的主文件夾中,我嘗試備份。在我排除它之後,一切似乎都很好,但沒有。0(超時)來得晚得多。來自其他(接收方)的 strace:

--- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=124744, si_uid=0} ---
--- stopped by SIGSTOP ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=124744, si_uid=0} ---
--- stopped by SIGSTOP ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=124744, si_uid=0} ---
--- stopped by SIGSTOP ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=124744, si_uid=0} ---
--- stopped by SIGSTOP ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=124744, si_uid=0} ---
--- stopped by SIGSTOP ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=124744, si_uid=0} ---
select(5, [3], [], NULL, NULL)          = ? ERESTARTNOHAND (To be restarted if no handler)

我認為我找到了解決方案。有 2 個錯誤。

首先 - 我的備份文件夾在同步文件夾中。(我在 /home/backup 中安裝了備份伺服器,但同步了整個 /home)。

所以 rsync 總是給 timeout (0) 試圖做這個奇怪的遞歸任務。

第二個問題是連接。經過一段時間的同步後,伺服器和客戶端之間開始出現一些不同步(我認為是提供商限制,不是連接問題,因為它已正確安裝)。這也導致超時(0)。

如果只有我有第二個錯誤 - 這根本不是問題,因為幾個 rsync 啟動並且文件夾將在伺服器上。但是因為我有第一個錯誤,rsync 無法繼續同步並一次又一次地啟動。

不要使用 sshfs,因為它的穩定性並不總是一流的,而且它的行為rsync可能不是最佳的。

相反,配置rsnapshot為直接使用 rsync-over-ssh。rsnapshot手冊頁中的一個範例:

備份root@foo.com:/etc/foo.com/

查看rsync手冊頁以獲取更多資訊。

引用自:https://serverfault.com/questions/854616