Bash
通過 SSH 進行 rsync 有時非常慢 - 有時會最大化頻寬
我在電腦 A(Mac OS X)上設置了一個 bash 腳本,設置為通過 cronjob 每五分鐘執行一次。此腳本檢查遠端電腦 B (Gentoo Linux) 上的新文件,然後將任何新文件同步到電腦 A。有時這種同步(下載)以 3 MB/s 的速度最大化我的連接,但有時,可能有 10% 的時間,它將以 10-50 KB/s 的極低速率下載。我 100% 確定這不是因為我的 Internet 連接正在消失/下降,所以可能有什麼問題?
奇怪的是,執行緩慢的 rsync 作業在整個〜整個時間都執行緩慢。也就是說,如果它正在 rsyncing 一個 1 GB 的文件,它將在整個作業生命週期內以極慢的速度 (10-50 KB/s) 同步/下載,直到 1 GB 被完全下載。這讓我相信它與 CPU 負載或網路無關,而是與腳本或其他東西有關。
我的腳本如下。
# !/bin/sh # Check if rsync has been timestampped and exit if it has echo "Checking for local timestamp..." >> /Users/localuser/log/rsync.log if [ -e /Users/localuser/scripts/.timestamp ] then echo "Local timestamp already exists, exiting..." >> /Users/localuser/log/rsync.log exit fi # Timestamp rsync echo "Local timestamp not found, continuing..." >> /Users/localuser/log/rsync.log touch /Users/localuser/scripts/.timestamp # Timestamp remote computer B echo "Timestampping remote computer B" >> /Users/localuser/log/rsync.log ssh remoteuser@remotecomputerb touch /home/remoteuser/finished/.timestamp # Run rsync echo "Starting rsync at $(date)" >> /Users/localuser/log/rsync.log rsync -avzPL -e ssh remoteuser@remotecomputerb:/home/remoteuser/finished /share --log-file /Users/localuser/log/rsync.log # Change permissions echo "Changing permissions" >> /Users/localuser/log/rsync.log chmod -Rf 775 /share /usr/sbin/chown -Rf localuser:staff /share # Delete sym links that are older than the remote computer B timestamp echo "Deleting sym links on remote computer B" >> /Users/localuser/log/rsync.log ssh remoteuser@remotecomputerb find /home/remoteuser/finished \! -newer /home/remoteuser/finished/.timestamp -type -l -delete # Delete the rsync script timestamp echo "rsync finished at $(date)" >> /Users/localuser/log/rsync.log rm /Users/localuser/scripts/.timestamp exit 0
這基本上可以是任何東西,從連結擁塞到遠端電腦上的高 CPU 使用率。在這之間,所有的網路設備也可能會出錯。特別是因為您正在轟炸 ssh 埠。但網路設備中的緩衝問題也可能是罪魁禍首。
但有一件事:下一次,仔細檢查 rsync 是否沒有執行兩次。是的,您在腳本中創建了解決方法來避免這種情況,但人們永遠不知道……也許該文件夾是只讀的,也許文件系統的行為很奇怪……
所以,你明白了,我們沒有足夠的資訊來正確回答。
但是,我建議您停止使用
rsync
此案例。這是低效的並且容易出錯。由於您想要的是文件夾持續同步,請查看syncthings。它應該工作得更好,沒有滯後,具有相同的開放性和安全性。(rsync 非常適合一次性和定期備份,而不是不斷同步文件夾)