最近在做服務器遷移,文件好幾個T。。。。只能單向訪問,服務器。怎么辦!!!
之前一直是使用rsync 服務器和服務器之間的雙向同步、備份(這是推的)。現在服務器要遷移,只能單向訪問,突然發現rsyns也可以實現文件拉取。
rsync [選項] 遠程用戶@遠程主機:遠程文件路徑 本地目標路徑
示例:
1. 從遠程服務器拉取單個文件
rsync -avz --exclude='*.tmp' user@remote_host:/remote/path /local/path
rsync -avz root@remote_host:/path/to/remote/file.txt /local/destination/
-a
:歸檔模式(保留權限、時間戳等)-v
:顯示詳細過程-z
:壓縮傳輸remote_host(可以在/etc/hosts 下配置,這樣就不用輸ip了)
2. 拉取整個目錄
rsync -avz user@remote_host:/data/img/ /local/destination/
3. 拉取時排除某些文件
rsync -avz --exclude='*.tmp' user@remote_host:/remote/path /local/path
4.限速傳輸(避免占用帶寬)
rsync -avz --bwlimit=1000 user@remote_host:/remote/path /local/path
--bwlimit=1000
:限速 1000 KB/s
建議先通過?--dry-run
?選項測試命令:
rsync -avzn user@remote_host:/remote/path /local/path
-n
:模擬運行,不實際傳輸文件
注意事項:
- ??權限問題??:確保本地目標路徑有寫入權限。
- ??首次連接??:如果是 SSH 方式,首次連接需驗證遠程主機指紋。
- ??路徑格式??:Windows 本地路徑使用?
C:/path
?或?/cygdrive/c/path
(Cygwin環境)。 - ??密碼輸入??:如果未配置 SSH 免密登錄,執行命令后會提示輸入密碼。
5.高級用法:
5.1?斷點續傳??partial
-
rsync -avz --partial --progress user@remote_host:/path/to/large_file /local/destination/
avz
:歸檔模式 + 壓縮傳輸 + 顯示詳細信息--progress
:顯示傳輸進度(可選)?- 如果傳輸中斷,
--partial
?會保留已傳輸的部分文件(默認保存在目標目錄,文件名后加?.partial
)。 - 重新運行相同命令時,
rsync
?會檢查?.partial
?文件并繼續傳輸剩余部分。 - 傳輸完成后,
.partial
?后綴會自動移除。
5.2?append
?選項?
作用??:在已存在的文件末尾追加數據(適用于??已傳輸部分未被修改??的情況)。
??適用場景??:日志文件等??只增不改??的文件。不適用于二進制文件(如壓縮包、鏡像),因為追加操作會破壞文件結構。
rsync -avz --append --progress user@remote_host:/path/to/logfile.log /local/destination/
注意:當源文件??自上次中斷后未發生更改??時才有效(否則可能導致數據不一致)。
?
rsync -avz --partial --timeout=30 --retries=3 --progress user@remote_host:/remote/path /local/
5.3.使用?&
?讓 rsync 在后臺運行??
直接在命令末尾加上?
&
,讓?rsync
?在后臺執行rsync -avz --progress user@remote_host:/remote/path /local/path/ &
?? ? ?優點??:簡單快捷。
- ??缺點??:如果終端關閉,任務可能會被終止(取決于 shell 配置)。
??查看后臺任務?? jobs -l ?# 查看當前會話的后臺任務
?5.4使用?nohup
?防止任務被終止??
nohup
?可以讓任務在終端關閉后繼續運行:nohup rsync -avz --progress user@remote_host:/remote/path /local/path/ > rsync.log 2>&1 &
> rsync.log
:將標準輸出重定向到?rsync.log
。2>&1
:將錯誤輸出也重定向到同一文件。&
:讓任務在后臺運行。??查看運行狀態??
tail -f rsync.log ?# 實時查看日志 ps aux | grep rsync ?# 檢查進程是否在運行??終止任務??
pkill -f "rsync -avz" # 按命令終止 kill [PID] # 按進程 ID 終止
?
?
6.最佳實踐??
- ??大文件傳輸??:優先用?
--partial
。 - ??日志類文件??:用?
--append
。 - ??網絡不穩定環境??:結合?
--timeout=30
(超時設置)和?--retries=3
(重試次數): - nohup 后臺傳輸
nohup rsync -avz --partial --progress user@remote_host:/path/to/large_file /local/destination/ > rsync.log 2>&1 &
ok