我正在尝试使用pv
(pipeviewer) 和 tar 进行磁带备份,以便查看进度和预计完成时间,如下所示:
du -s /home/myuser
115630916 /home/myuser
tar -cf - /home/myuser/ | pv -s 115630916 > /dev/nst0
运行正常,成功写入磁带。但是,当我尝试测试 tar 存档时:
mt -f /dev/nst0 rewind
tar -tvf /dev/nst0
我收到以下错误:
tar: /dev/nst0: Cannot read: Cannot allocate memory
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting
我在 Google 上搜索了一下,找到了一些--blocking-factor=128
创建备份和恢复时可以使用的建议。但我仍然遇到同样的错误。
还值得注意的是,如果我仅使用 tar,一切都会 100% 正常工作,包括恢复,所以也许pv
是破坏了它?
答案1
解决了,pv 正在创建不同的块/缓冲区大小......
来自光伏人页:
默认缓冲区大小是输入文件的文件系统的块大小乘以 32(最大 512kb),如果无法确定块大小,则为 400kb。
来自焦油人页:
块大小为 Nx512 字节(默认 N=20)
因此给出正确的缓冲区大小为pv
(20 x 512 = 10240)
tar -cf - /home/myuser/ | pv -B 10240 -s 142524k > /dev/nst0
现在如果你用测试档案tar -tvf /dev/nst0
,它应该可以工作。
答案2
我遇到了非常相似的错误,但我没有在磁带设备 pv
之间的管道中使用任何其他东西。tar
不过,阻塞因子位是关键。我读到,为了获得最佳结果,您应该使用比默认值更大的块大小,所以我在 tar 命令行上使用了阻塞因子 512:
tar -b 512 -cf /dev/tape files
不幸的是,tar 不会自动找出阻塞因素,您也需要在恢复时指定它。
tar -b 512 -xpf /dev/tape