使用 GPG 将备份加密到多个磁带

使用 GPG 将备份加密到多个磁带

目前,我使用 tar 将我的备份(ntbackup 文件)写入由自动装载机供给的磁带驱动器。

例如: tar -F /root/advancetape -cvf /dev/st0 *.bkf (/root/advancetape 仅具有前进到下一盘磁带(如果有可用磁带)或通知换出磁带的逻辑)

我最近接到了加密磁带备份的要求。我可以使用 GPG 轻松加密数据,没有任何问题。我遇到的问题是,如何按照 tar 在当前磁带已满后推进磁带的逻辑将其写入多盘磁带?我无法先将加密文件写入磁盘(2+TB)。据我所知,tar 不会接受来自 stdin 的二进制输入(它正在寻找文件名)。有什么想法吗?:(

答案1

我正在使用这个脚本:

#!/bin/sh

TAPE="/dev/nst0"
mt-st -f $TAPE setblk 0
mt-st -f $TAPE status
totalsize=$(du -csb . | tail -1 | cut -f1)
tar cf - . | \
        gpg --encrypt --recipient [email protected] --compress-algo none | \
        pipemeter -s $totalsize -a -b 256K -l | \
        mbuffer -m 3G -P 95% -s 256k -f -o $TAPE \
                -A "echo next tape; mt-st -f $TAPE eject ; read a < /dev/tty"

为了满足您的需求,以下是要点:

  • tar从当前目录读取并输出到stdout。这样 tar 就无需处理更换磁带或加密。
  • gpg已关闭压缩功能,因为这会显著减慢进程(100MB/秒以上降至 5MB/秒)
  • pipemeter用于监控过程并给出所有数据写入磁带的预计时间 - 如果不需要,可以将其删除
  • mbuffer将数据缓冲到内存中 - 此示例使用 3GB 缓冲区,根据需要进行调整 - 以允许磁带驱动器在数据耗尽之前运行更长时间,从而减少磁带的“擦鞋”工作。
  • 选项处理多盘磁带,-A方法mbuffer是一旦到达末尾就弹出一盘磁带,然后等待Enter在下一盘磁带加载后按下按键。这是您的/root/advancetape脚本可以去的地方。

与 LTO 磁带一起使用时要注意的一个问题:

  • 磁带块大小设置为变量,并mbuffer以 256k 块为单位写入。对于我来说,使用 LTO3 驱动器效果很好,但是我喜欢使用不同的块大小。这与处理跨磁带而不是的tar事实相结合,意味着您需要再次通过从磁带中读取数据,然后将其传递到。如果您尝试使用直接从磁带中提取数据(即使您跳过加密),它很可能不起作用,并且一旦到达第一盘磁带的末尾,它肯定会中断,而您没有机会切换到下一盘磁带。mbuffertarmbuffergpgtartar

答案2

我建议您看看这个选项:

 -I, --use-compress-program PROG
       filter through PROG (must accept -d)

您可能需要编写一个脚本,从 stdin 获取输入并将其加密到 stdout,但它应该可以工作。-d 表示解压缩,在这种情况下您需要解密输入。

答案3

您可以在 -F 脚本中实现这一点。不要让 tar 直接写入 /dev/st0,而是使用临时暂存区。确保使用 -L 明确指定卷大小。Tar 将向文件写入最多 10 ...

这仅要求您的文件系统上有一个磁带大小(x2)的可用空间。

http://www.gnu.org/software/tar/manual/html_node/Multi_002dVolume-Archives.html#SEC162有关 -F 脚本可用变量的更多信息。

编辑:还请注意,这是一个完全未经测试的想法!我一直在考虑做这样的事情,以便为多卷档案提供压缩,但我还没有真正实现它。

相关内容