个人数据保全计划:如何安全地备份数据

前言

备份数据说简单也简单,说复杂也复杂

最简单是就是 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

如果全部都没问题,则不会输出错误信息。

相关推荐
egoist202311 分钟前
【Linux仓库】超越命令行用户:手写C语言Shell解释器,解密Bash背后的进程创建(附源码)
linux·c语言·bash·xshell·环境变量·命令行参数·内建命令
Lenyiin11 分钟前
《 Linux 修炼全景指南: 八 》别再碎片化学习!掌控 Linux 开发工具链:gcc、g++、GDB、Bash、Python 与工程化实践
linux·python·bash·gdb·gcc·g++·lenyiin
莲华君14 分钟前
Bash Shell:从入门到精通
linux
风雨飘逸15 分钟前
【shell&bash进阶系列】(二十一)向脚本传递参数(shift和getopts)
linux·运维·服务器·经验分享·bash
zly350020 分钟前
删除文件(rm 命令 删除目录)
linux·运维·服务器
被AI抢饭碗的人24 分钟前
linux:线程池
linux·开发语言
Studying 开龙wu1 小时前
Linux 系统中配置国内源下载时使用pip install 和conda install哪个快?
linux·conda·pip
呱呱巨基1 小时前
Linux 进程控制
linux·c++·笔记·学习
代码游侠2 小时前
应用——MPlayer 媒体播放器系统代码详解
linux·运维·笔记·学习·算法
老兵发新帖2 小时前
ubuntu添加用户完整命令
linux·运维·ubuntu