
description: "斷點(diǎn)續(xù)傳時(shí),rsync 會(huì)在目標(biāo)目錄下生成一個(gè)隱藏的臨時(shí)文件,以便在傳輸中斷后可以繼續(xù)傳輸"
date: 2025.04.13 10:26
categories:
- Linux
tags: [Linux]
keywords: Linux, rsync, 斷點(diǎn)續(xù)傳, screen, nohup
原文地址:https://www.pfjsb.com/kfyw/linux-rsync.html
對(duì)于海量文件的穩(wěn)定復(fù)制,推薦使用 rsync,因?yàn)樗С謹(jǐn)帱c(diǎn)續(xù)傳、校驗(yàn)文件完整性,并能顯示進(jìn)度。
推薦方法:使用 rsync 進(jìn)行穩(wěn)定復(fù)制
rsync -avh --progress --stats /源目錄/ /目標(biāo)磁盤/目標(biāo)目錄/
參數(shù)解釋
-
-a:歸檔模式,保持文件的權(quán)限、時(shí)間戳、符號(hào)鏈接等屬性。 -
-v:顯示詳細(xì)信息(可選)。 -
-h:人類可讀格式(文件大小等)。 -
--progress:顯示復(fù)制進(jìn)度。 -
--stats:顯示最終的統(tǒng)計(jì)信息。
示例
如果你的源目錄是 /mnt/images/,目標(biāo)磁盤是 /mnt2/backup/,執(zhí)行:
rsync -avh --progress --stats /mnt/images/ /mnt2/backup/
這樣會(huì)把 /mnt/images/ 整個(gè)復(fù)制到 /mnt2/backup/ 目錄下。
提高復(fù)制速度(適用于海量小文件)
方法 1:使用 rsync --info=progress2(實(shí)時(shí)進(jìn)度 + 斷點(diǎn)續(xù)傳)
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/
-
--info=progress2:顯示整體進(jìn)度(比--progress更友好)。 -
rsync斷點(diǎn)續(xù)傳,不會(huì)重復(fù)復(fù)制已經(jīng)存在的文件。
方法 2:使用 rsync --bwlimit 限制帶寬(防止服務(wù)器負(fù)載過高)
如果你要在生產(chǎn)環(huán)境下復(fù)制,避免影響業(yè)務(wù),可以限制帶寬:
rsync -avh --info=progress2 --bwlimit=100000 /mnt/images/ /mnt2/backup/
-
--bwlimit=100000限制速度為 100MB/s,你可以根據(jù)情況調(diào)整。
方法 3:使用 rsync --remove-source-files(刪除已復(fù)制的文件,適用于遷移)
如果你想復(fù)制完后刪除源文件,釋放磁盤空間:
rsync -avh --progress --remove-source-files /mnt/images/ /mnt2/backup/
find /mnt/images/ -type f -empty -delete
-
--remove-source-files:復(fù)制成功后刪除已復(fù)制的文件(但不刪除空目錄)。 -
find ... -delete:清理空目錄。
? 注意:如果你要徹底刪除源目錄,最后用:
rm -rf /mnt/images/
其他方法
使用 cp(不推薦)
cp -a /mnt/images/ /mnt2/backup/
-
cp -a可以保持文件屬性。
缺點(diǎn):
- 不支持?jǐn)帱c(diǎn)續(xù)傳,失敗后需要重新開始。
- 復(fù)制大文件時(shí)效率較低,無法顯示進(jìn)度。
總結(jié)
? 推薦
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/
(穩(wěn)定、高效、可斷點(diǎn)續(xù)傳)
? 限速
rsync --bwlimit=100000
(避免服務(wù)器過載)
? 遷移
rsync --remove-source-files
(復(fù)制完后刪除源文件)
? 不要用
cp -a
(不穩(wěn)定,大數(shù)據(jù)復(fù)制容易失?。?/p>
使用rsync -avh --info=progress2命令中斷后,該如何接著上次繼續(xù)?
rsync 默認(rèn)支持?jǐn)帱c(diǎn)續(xù)傳,如果命令執(zhí)行中斷,你可以直接重新運(yùn)行相同的 rsync 命令,它會(huì)自動(dòng)跳過已完成的文件,僅復(fù)制未完成或新變化的文件。
?? 繼續(xù)上次的 rsync 復(fù)制
假設(shè)你之前運(yùn)行的命令是:
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/
如果中斷了,直接運(yùn)行 同樣的命令:
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/
? 它會(huì)自動(dòng)跳過已復(fù)制的文件,只同步未完成的文件。
?? 進(jìn)階優(yōu)化(適用于大文件)
如果你復(fù)制的文件特別大,可以加上 --partial 和 --append-verify 參數(shù):
rsync -avh --info=progress2 --partial --append-verify /mnt/images/ /mnt2/backup/
-
--partial:保留部分已復(fù)制的文件,避免重新復(fù)制。 -
--append-verify:對(duì)大文件進(jìn)行增量復(fù)制,確保完整性(比--append更安全)。
?? 適用于大文件(如 1GB+ 視頻、ISO、數(shù)據(jù)庫(kù)備份等)。
?? 讓 rsync 在后臺(tái)運(yùn)行(防止 SSH 斷連)
如果你的 SSH 連接容易斷開,建議用 screen 或 nohup 讓 rsync 在后臺(tái)運(yùn)行:
方法 1:使用 screen(推薦)
screen -S rsync_copy
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/
?? SSH 斷開后,screen -r rsync_copy 可恢復(fù)進(jìn)程。
方法 2:使用 nohup(簡(jiǎn)單)
nohup rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/ > rsync.log 2>&1 &
?? SSH 斷開后任務(wù)仍在運(yùn)行,可查看 rsync.log 進(jìn)度:
tail -f rsync.log
?? 總結(jié)
- 直接重新運(yùn)行
rsync,會(huì)自動(dòng)跳過已完成的文件:
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/
- 對(duì)于大文件,使用
--partial --append-verify防止重新復(fù)制:
rsync -avh --info=progress2 --partial --append-verify /mnt/images/ /mnt2/backup/
- 使用
screen或nohup,防止 SSH 斷連導(dǎo)致中斷:
screen -S rsync_copy
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/
SSH 斷開后,輸入
screen -r rsync_copy
恢復(fù)任務(wù)。
這樣,即使 rsync 復(fù)制任務(wù)被中斷,你也可以無縫續(xù)傳,確保數(shù)據(jù)完整性!??