如何在 Linux 上通过 mt 解决 Windows 备份的磁带备份问题?

如何在 Linux 上通过 mt 解决 Windows 备份的磁带备份问题?

我有一个 HP Ultrium 448 磁带备份,在 Ubuntu 上似乎没有问题,可以正常识别。我可以在 上看到它/dev/st0

当我发出 时mt -f /dev/st0 offline,磁带弹出。当我发出 时mt -f /dev/st0 status,我得到:

SCSI 2 tape drive: 
File number=0, block number=0, partition=0. 
Tape block size 0 bytes. Density code 0x42 (LTO-2). 
Soft error count since last status=0 
General status bits on (41010000):  
 BOT ONLINE IM_REP_EN

当我发出时tar -tzf /dev/st0,我得到:

tar (child): /dev/st0: Cannot read: Cannot allocate memory
tar (child): At beginning of tape, quitting now
tar (child): Error is not recoverable: exiting now

gzip: stdin: unexpected end of file
tar: Child returned status 2
tar: Error is not recoverable: exiting now

我怀疑这是因为它是用 Windows Server 2003Backup实用程序创建的。我意识到我可以利用mtftar来获取这些内容,但我如何先获取原始备份数据?例如,我似乎无法在此处列出驱动器上的文件内容。我是否需要通过管道启动某种读取,mt然后通过管道将其传输,mtftar以便查看备份磁带上的数据结构?

答案1

mftar根据文档应该能够直接从磁带上读取......

mftar < /dev/st0 | tar tvf -

如果你希望先从磁带中获取数据,然后使用 mftar 进行操作,那么你可以使用dd 例如

dd if=/dev/st0 of=output1

您可能需要使用 dd 指定块大小。如果您不知道磁带是如何写入的,那么tcopy可以为您提供有关其格式的报告。

如果一盘磁带上有多个图像,则需要使用非倒带设备/dev/nst0以及需要时明确的倒带。

答案2

我刚刚遇到了同样的错误信息,并在这个问题

简而言之,Cannot allocate memory这意味着您用来读取磁带的程序没有使用足够大的缓冲区来读取磁带上的数据。如果您使用的程序无法设置读取缓冲区的大小,您可以使用dd以下方法:

dd if=/dev/nst0 bs=1M | tar tvf -

这将使用 1MB 读取缓冲区,能够读取 1MB 或更小的磁带块。根据需要增加直到Cannot allocate memory消失 - 该值需要等于或大于磁带上的最大块。

磁带块的大小是在写入过程中由执行写入的应用程序设置的。

相关内容