CentOS mv命令移动大文件中断,rsync断点续传替代方案
机房那台老CentOS昨晚又掉链子,运维群直接炸锅:一个mv /data/80G.tar /mnt/backup/干到73%突然SSH卡死,重新连上去只剩半截文件,源目录也被清得精光。别笑,这种“mv大文件中断”的坑,谁踩谁自闭。下面把血槽里攒的经验一次性倒出来,手把手把rsync断点续传玩成mv的替身,保你下次再传百G文件也不慌。

mv为啥一断就废
mv在本地同一分区里只是改inode指针,速度飞快;可一旦跨分区、跨挂载点,内核实际走的是“复制+删除”流程,既没进度条也没日志。网络一抖、终端一断,复制停半道,删除却可能已执行,文件瞬间蒸发。更惨的是,mv没提供任何“续传”接口,断点位置全靠猜,数据恢复软件都摇头。
rsync凭啥能接锅
rsync天生带“差异校验”基因:每次启动先比对源和目标块的校验码,缺啥补啥,断哪续哪。更香的是,它支持--partial --progress --inplace三连击,既保留残片又实时回写,磁盘空间占用直接打对折。一句话,mv做不到的“增量续传”,rsync当饭吃。
三步把rsync调教成mv替身
1. 先留后门:把源文件拷一份到临时目录,防止手滑。

2. 第一次跑:
rsync -avP --inplace --partial /data/80G.tar /mnt/backup/
参数说明:-a保持属性,-v看得见进度,-P等同--partial --progress,--inplace直接写目标不生成临时文件,省双倍空间。
3. 断了再跑:把同一条命令原样再敲一遍,rsync会自动扫描断点,从掉线那1M继续写,跑完校验码一致才停。想后台挂跑,前面加nohup,日志重定向到文件,半夜断网也不怕。
提速彩蛋:让千兆网卡跑满
单线程rsync偶尔跑不满带宽,直接上多流:

rsync -avP --inplace --partial --whole-file -W --bwlimit=0 /data/80G.tar /mnt/backup/
--whole-file强制整块写,-W关掉差异算法,本地盘对盘时反而更快;--bwlimit=0解除限速,机械硬盘也能冲到110M/s。实测同样80G,mv跨分区要二十分钟,rsync续传只补传缺失的7G,三分钟收工。
常见作死现场与急救
作死1:把--inplace用在SSD→机械盘,碎片狂飙?解决:SSD对SSD再开--inplace,机械盘对机械盘可去掉,换用默认临时文件模式,顺序写更稳。
作死2:目标盘只剩10G却传80G?rsync发现空间不足会退出,但残留.partial文件。解决:加--timeout=300自动重试,配合df -h盯盘,空间一到阈值立刻告警。
作死3:误把/当目标?rsync有--dry-run,先空跑一遍看清单,确认路径再真干,救回无数条命。
脚本模板:一键防呆
#!/bin/bashSRC=$1
DST=$2
LOG="/var/log/rsync_$(basename $SRC).log"
[ $# -ne 2 ] && echo "用法: $0 源文件 目标目录" && exit 1
/usr/bin/rsync -avP --inplace --partial --whole-file "$SRC" "$DST" &>> "$LOG"
if [ $? -eq 0 ];then
echo "SUCCESS: $(date) $SRC -> $DST" >> "$LOG"
rm -f "$SRC"
else
echo "FAIL: $(date) 请检查日志 $LOG" | mail -s "rsync中断告警" admin@xxx.com
fi
丢到/usr/local/bin/mv2,赋可执行权限,以后直接mv2 /data/80G.tar /mnt/backup/,断网续传、成功再删源,一条龙。
网络场景:SSH隧道也稳
需要把大文件推到云端?用rsync over SSH:
rsync -avP -e 'ssh -p 2222' --inplace --partial /data/80G.tar user@remote:/backup/
断线后重复同一条命令,rsync通过远程shell再次校验,续传粒度精确到块。配合autossh保持长连接,咖啡喝完文件已到机房。
mv断线泪两行,rsync续传稳当当;-avP --inplace --partial记心上,多跑一遍不额外占房;本地网络全场景,百G大文件也敢刚。
