【轉(zhuǎn)】linux大量文件的復(fù)制轉(zhuǎn)移好工具之rsync——支持?jǐn)帱c(diǎn)續(xù)傳校驗(yàn)文件完整性


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 連接容易斷開,建議用 screennohuprsync 在后臺(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/
  • 使用 screennohup,防止 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ù)完整性!??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容