目前,我使用tar将我的备份(ntbackup文件)写入由自动加载器提供的磁带驱动器。
例如: tar -F /root/advancetape -cvf /dev/st0 *.bkf
(/ root / advancetape只是有一个可用的磁盘或通知交换磁带时前进到下一个磁带的逻辑)
我最近递交了要求encryption我们的磁带备份。 我可以轻松地使用GPGencryption数据,而不会出现任何问题。 我遇到的问题是,如何使用与tar相同的逻辑将其写入多个磁带,以便在当前磁带被填满后用于提前磁带? 我无法将encryption文件先写入磁盘(2 + TB)。 据我所知,tar不会接受来自stdin的二进制input(它正在寻找文件名)。 有任何想法吗? 🙁
我build议你看看这个选项:
-I, --use-compress-program PROG filter through PROG (must accept -d)
您可能需要编写一个脚本,它接受来自stdin的input并将其encryption到stdout,但它应该可以工作。 -d用于解压缩,在这种情况下,您需要解密input。
我正在使用这个脚本:
#!/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
。 这种方式焦油不涉及改变磁带或encryption。 gpg
已closures压缩,因为这大大降低了处理速度(100MB /秒+下降到5MB /秒) pipemeter
是用来监视过程,并给出估计的时间,直到所有的数据已被写入磁带 – 这可以删除,如果不需要 mbuffer
将数据缓冲到内存中 – 这个例子使用了一个3GB的缓冲区,根据需要进行调整,以便磁带驱动器运行更长的时间,然后用完数据,从而减less磁带的“擦鞋”。 mbuffer
的-A
选项在mbuffer
通过popup磁带来处理多个磁带,并在加载下一个磁带之后等待Enter
键的按下。 这是你的/root/advancetape
脚本可以去的地方。 在使用LTO磁带时需要注意的一个问题是:
mbuffer
以256k块写入。 LTO3驱动器适用于我,但是tar
喜欢使用不同的块大小。 这与mbuffer
处理跨越磁带而不是tar
的事实相结合,意味着你将需要通过mbuffer
再次从磁带读取数据,然后通过gpg
传递给tar
。 如果你试图用tar
直接从磁带上提取它(即使你跳过encryption),它可能不会工作,一旦到达第一个磁带的末尾,它肯定会中断,而不会让你有机会改变下一个磁带。 你可以在你的-F脚本中实现这个function。 tar不直接写入/ dev / st0,而是使用临时登台区域。 确保使用-L显式指定卷大小。 焦油将写入到文件的数据字节,然后调用你的-F脚本。 然后你的脚本就可以在文件上运行gpg并将其发送到磁带(然后从暂存区删除归档部分)。
这只需要在文件系统上有一个磁带值(x2)可用空间。
编辑:另外请注意,这是一个完全未经testing的想法! 我一直在想做这样的事情,以提供压缩多卷存档,但我没有实际执行它。