自动增量备份到外部驱动器

tlv*_*nce 8 scripting backup rsync

背景

客户需要一个外部驱动器的自动备份解决方案(每周异地)。我通常建议使用rsnapshot(或者可能推出自定义rsync脚本),但这个问题稍微复杂一些。

基于 Arch Linux 的系统是无头的,因此该解决方案必须完全自动化,无需用户干预。

理想情况如下:

  1. 用户插入 USB 硬盘
  2. 进行了完整的增量备份
  3. 硬盘已卸载
  4. 通知用户可以拔下硬盘驱动器

提议

我提出的解决方案包括:

  1. 一个udev规则自动安装驱动
  2. 备份开始于:

    1. 同样的udev规则也触发了一个rsnapshot脚本
    2. 一个inotify的 创建事件检测到新的安装点和触发器rsnapshot
  3. rsnapshot退出,umount是跑在驱动器上

  4. 可以移除通知硬盘驱动器的可能方法:

    1. CD 驱动器打开
    2. 声音通过 PC 扬声器播放

如果在任何时候发生错误,请向用户发送电子邮件并卸载驱动器。

问题

  1. 我的提议看似可行,但是否存在明显缺陷?我怎样才能使它健壮?
  2. 为了安全起见,我如何确保插入的硬盘是用户的?ssh钥匙?驱动器标签?
  3. 是否存在包含此内容的现有(Linux)解决方案?

Chr*_*own 7

但是,您的解决方案似乎相对合适:

  • 确保rsnapshot脚本不假定知道块设备。理想情况下,通过 UUID 或标签来寻址文件系统以避免大屠杀。
  • 添加超时。这样,如果出现我们不知道的错误,或者某些原因导致脚本永远无法完成,则可以将其作为错误处理,而不是无限期地继续。
  • 您最后声明“[i]如果在任何时候发生错误,请给用户发送电子邮件并卸载驱动器”——如果它无法卸载驱动器,或者卸载失败的地方会发生什么?如果电子邮件失败会怎样?确保在您的系统中构建故障保护。
  • 对于基本安全性,UUID 应该没问题(除非攻击者可能知道您的 UUID),但是,如果更关心安全性,请考虑将一些数据写入 MBR 的代码区(字节 0-440),并且在开始备份之前让脚本检查它。你应该被警告说,通过默默无闻,这比其他任何事情都更安全,但是在这种情况下,我没有看到任何更容易获得的方法。但是,如果您想全面了解,您可以通过分析存储在磁盘上的加密证书来确定驱动器是否获得授权。什么时候udev检测到驱动器,脚本使用其密钥解密证书。证书包含与驱动器相关的参数,例如驱动器的序列号、型号、容量等,然后将从加密证书中提取的参数与分析驱动器时看到的参数进行比较。如果参数匹配,则确定驱动器是真实的,否则驱动器被拒绝,脚本终止。

有现有的 Linux 解决方案属于这个范围,但是,对于您的特定需求,我认为您最好制定一个定制的解决方案,而不是摆弄其他程序的源代码来让它们做你想做的事。

要将随机数据写入 MBR 的代码区域,然后您可以检查这些数据,请执行类似dd if=/dev/urandom of=/dev/sdX bs=440 count=1.