(tar:/dev/nst0:无法读取:无法分配内存)使用 tar、pv 和磁带驱动器

(tar:/dev/nst0:无法读取:无法分配内存)使用 tar、pv 和磁带驱动器

我正在尝试使用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

相关内容