如何使用tar与GPG创建并恢复跨多磁带的备份?
如何使用tar与GPG创建并恢复跨多磁带的备份?
嘿,我来帮你搞定跨多磁带备份的恢复问题!先理清楚你现在的备份流程,再一步步解决恢复的难点。
一、你的跨磁带备份命令(先确认下)
你目前用的备份命令逻辑很清晰:先倒带,tar打包目录成流式输出,GPG对称加密(关闭压缩应该是为了避免额外开销),再用mbuffer做大容量缓冲,当缓冲写到95%就提示换磁带。完整命令如下:
mt -f $TAPE rewind; tar --ignore-failed-read -cf - <dirtree> \ | gpg -c --compress-algo none --pinentry-mode loopback \ | mbuffer -m 24G -P 95% -f -o $TAPE \ -A "echo next tape; mt -f $TAPE eject ; read a < /dev/tty"
这个方案没问题,mbuffer帮你把加密后的归档流分成了24G的块,逐盘写到磁带上。
二、单磁带/第一磁带的恢复(你已经掌握的部分)
恢复单磁带或者多磁带的第一盘时,你用的命令是对的,其实也可以用mbuffer保持和备份时一致的缓冲逻辑,稳定性更好:
mt -f $TAPE rewind; mbuffer -i $TAPE -m 24G | gpg -d --pinentry-mode loopback | tar -x
三、多磁带后续磁带的恢复(重点解决的问题)
因为整个备份是单一的加密归档流,被mbuffer拆分到多盘磁带上,所以恢复时需要按顺序把所有磁带的内容拼接起来,解密后再交给tar处理。
1. 完整恢复多磁带备份
步骤很简单:
- 插入第一盘磁带,执行第一盘的恢复命令:
mt -f $TAPE rewind; mbuffer -i $TAPE -m 24G -P 95% | gpg -d --pinentry-mode loopback | tar -x - 当mbuffer提示第一盘读完,弹出磁带,插入第二盘,倒带后执行:
mbuffer -i $TAPE -m 24G -P 95% | gpg -d --pinentry-mode loopback | tar -x - 后续每一盘磁带都重复上面的操作,直到所有磁带处理完成。
tar是流式工具,会自动接收后续的归档数据,不需要额外参数,就能完整恢复所有文件。
2. 查看第二(及后续)磁带的文件列表
如果只是想查看第二盘磁带里的文件,不能单独只读第二盘——因为tar的归档是连续的,第二盘只有归档的后半段,单独读取无法识别。你需要把前面的磁带内容也流式传递给tar,才能正确解析。
可以用管道串联的方式,不需要临时文件:
# 先处理第一盘,提示换第二盘后继续处理 ( mt -f $TAPE rewind; mbuffer -i $TAPE -m 24G; echo "请插入第二盘磁带,按下回车继续..."; read; mt -f $TAPE rewind; mbuffer -i $TAPE -m 24G ) | gpg -d --pinentry-mode loopback | tar -t
如果是第三盘,就在括号里继续添加换磁带的逻辑即可。
如果你有足够的磁盘空间,也可以先把所有磁带的加密内容导出到临时文件,再解密查看:
# 导出第一盘内容 mt -f $TAPE rewind; mbuffer -i $TAPE -m 24G > backup_encrypted.part1 # 导出第二盘内容 mt -f $TAPE rewind; mbuffer -i $TAPE -m 24G >> backup_encrypted.part1 # 解密后查看文件列表 cat backup_encrypted.part1 | gpg -d --pinentry-mode loopback | tar -t
看完后记得删除临时文件,避免占用空间。
备注:内容来源于stack exchange,提问作者John Cholewa
相关产品推荐
相关产品推荐

