前言
备份数据说简单也简单,说复杂也复杂
最简单是就是 cp 命令,直接复制文件
而一旦需要备份的数据多了,就有很多门道了
如何显示进度?如何确保备份的数据不出错?
这里面还是有很多东西的
基本思路
我打算用原本给 QNAP 准备的 SSD 来安装 PVE
这个硬盘里有一些 docker 和 QTS 软件,需要备份的就是 docker 的数据
有几种方法:
- rsync:
rsync -a --info=progress2 /mnt/disk1/your-folder /mnt/disk2/
- Midnight Commander (mc) (可视化)
使用mc
我最终选择了 mc,好用又简单。
使用 sudo dnf install mc
安装之后在终端打开
左右两栏分别浏览不同硬盘目录,使用 Ctrl+T 选择多个文件/目录,然后按 F5 复制

按回车开始复制,这界面有点复古美学,感觉很不错~

校验数据
复制完成之后,校验一下数据的完整性
最简单是用 rsync
bash
rsync -avhn /path/to/src/ /path/to/target/
会得到类似这样的输出
sending incremental file list
sent 426.77K bytes received 2.90K bytes 859.33K bytes/sec
total size is 1.45G speedup is 3,367.09 (DRY RUN)
sending incremental file list
➜ 只列出差异(现在没有列出具体文件 → 表示无变化)
默认情况下,rsync 的 dry-run 校验,判断两个文件是否"相同",依赖的是:文件大小是否一致和最后修改时间戳是否一致。
如果要更可靠一点,可以校验文件的 MD5 和 SHA,在 rsync 命令加上 --checksum
(或 -c
)参数
bash
rsync -avhnc --info=progress2 /src/ /dst/
-c
/--checksum
:对比内容的校验和(不是时间戳、不是大小)- 这会导致 rsync 读取所有源和目标文件内容,计算并比对校验和 ,精度等同于 MD5 校验,但比
md5sum
更智能(可跳过已对比过的文件)
跑完命令的输出类似这样
bash
sending incremental file list
0 0% 0.00kB/s 0:00:00 (xfr#0, to-chk=0/18633)
sent 680.95K bytes received 2.90K bytes 91.18K bytes/sec
total size is 1.45G speedup is 2,115.56 (DRY RUN)
解读一下这个输出:
xfr#0
:实际需要复制/替换的文件数量是 0 个to-chk=0/18633
:总共比对了 18633 个文件,已经全部检查完毕(为 0)0%
、0.00kB/s
:是因为 dry-run 模式下没有真实数据流动,速率显示为零
输出 sha256sum 清单
如果你准备封盘、冷备、或未来很久不动它,可以考虑顺手打个 sha256sum
清单用于长期校验(可选):
bash
find /home/deali/Backups/projects -type f -exec sha256sum {} \; > backup-sha256.txt
将来可以这样校验:
bash
sha256sum -c backup-sha256.txt
如果文件地址改变了,可以用以下命令替换:
bash
sed -i 's|/home/deali/Backups|/var/lib/vz/backups|g' project-sha256.txt
运行校验之后会输出每个文件的结果,比如:
bash
/var/lib/vz/backups/softwares/navidrome/cache/images/af/e9/afe97c40758c021a2de1f781ab14d4d3fc30b244: OK
如果全部都没问题,则不会输出错误信息。