Linux 基于duplicity的备份与还原

与Windows不同,Linux在运行状态下任何文件都是可读的,因此对Linux的备份,其重点主要在于如何打包“/”目录下所有文件。首先,显而易见的是,可以用tar命令,将所有文件打包。这种方法,十分简单,同时也可以启用tar的增量压缩功能,以减少定期备份的空间占用,但正因为简单,所以使用时也有些许不便。其一、使用增量压缩时,如何清理过于古老的备份是需要花费一定精力的地方;其二、打包得到的文件只能放于本地文件系统(远程的则需要使用各种软件映射到本地)。

因此引入duplicity软件包,可以充分解决以上两个难点。

0 安装

sudo apt update
sudo apt install duplicity

1 确定备份范围

  • 包含范围:/
  • 必须排除:/sys、/proc(因为这两者是虚拟文件系统)和设备文件
  • 建议排除:/tmp和/lost+found
  • 按需排除:/mnt和/media

2 建议备份配置

每日增量备份、每周全量备份、保留6个全量备份,保存到可移动存储设备(地址URL用file:///…)或者公共云的对象储存空间中(根据服务商选取URL头,可用duplicity --help查询)

3 Crontab配置

以备份到/media/backup为例,执行命令如下:

sudo duplicity --full-if-older-than 1W \
--no-encryption \
--exclude-device-files \
--exclude /mnt \
--exclude /tmp \
--exclude /proc \
--exclude /lost+found \
--exclude /media \
--exclude /run \
--exclude /sys \
/ file:///media/backup/ \
&& \
sudo duplicity remove-all-but-n-full 6 \
--no-encryption \
--force \
file:///media/backup/ \

然后Crontab中配置为每日运行即可。elegant 🙂

值得注意的是,crontab不支持任何换行符,亦即上面的执行命令分行只是为了方便阅读,具体填入crontab中时,需要合成完整的一行。

4 还原

视损坏的轻重有不同的处理方法,这里以最严重的情况为例,例如错误地将/etc整个删除了(source:不愿透露姓名的朋友)。那么可以按如下建议步骤进行抢救:

  1. 先喝一杯冷水压压惊
  2. 制作一个Ubuntu Live USB
    • 具体而言就是将ISO文件写入到U盘
  3. 从Live USB启动
  4. 安装duplicity sudo apt install duplicity
  5. 将存有备份文件的硬盘挂载,例如说/media/ubuntu/backup
  6. 将上文所述/etc所在卷挂载,例如说/media/ubuntu/broken
  7. 执行命令duplicity restore --no-encryption -r etc /media/ubuntu/backup /media/ubuntu/broken/etc
  8. 通常而言若当前系统状态与最新备份系统状态差异不大的话,就可以重新启动了。抢救到此结束。
    • 但能做出 sudo rm -rf /etc这种举动的,想必是在艰苦卓绝的系统配置过程中意外手滑了一下(source:不愿透露姓名的朋友)。此时的差异应该相当大。
      • 在这种情况下,可能需要视情况恢复/usr目录(source:不愿透露姓名的朋友)

留下评论