我有一个 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
传输以查看备份磁带上的数据结构?
mftar
根据文档应该能够直接从磁带上读取,所以......如果您宁愿先从磁带上抓取数据,然后使用 mftar 进行操作,那么您可以使用
dd
例如您可能需要使用 dd 指定块大小。如果您不知道磁带是如何编写的,那么
tcopy
可以给您一份关于其格式的报告。如果您在单个磁带上有多个图像,那么您需要在需要时使用非倒带设备
/dev/nst0
以及显式倒带。我刚刚遇到了同样的错误消息,并在这个问题中发布了详细的解释。
简而言之,
Cannot allocate memory
意味着您用来读取磁带的程序没有使用足够大的缓冲区来读取磁带上的数据。如果您正在使用的程序无法设置读取缓冲区的大小,您可以使用dd
:这将使用 1MB 读取缓冲区,该缓冲区将能够读取 1MB 或更小的磁带块。根据需要增加直到
Cannot allocate memory
消失 - 该值需要与磁带上的最大块相同或更大。磁带块的大小在写入过程中由执行写入的应用程序设置。