目前,我使用 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
事实相结合,意味着您需要再次通过从磁带中读取数据,然后将其传递到。如果您尝试使用直接从磁带中提取数据(即使您跳过加密),它很可能不起作用,并且一旦到达第一盘磁带的末尾,它肯定会中断,而您没有机会切换到下一盘磁带。mbuffer
tar
mbuffer
gpg
tar
tar
答案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 脚本可用变量的更多信息。
编辑:还请注意,这是一个完全未经测试的想法!我一直在考虑做这样的事情,以便为多卷档案提供压缩,但我还没有真正实现它。