У меня есть резервная копия ленты 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 2003 Backup
утилита. Я понимаю, что могу использовать mtftar
чтобы получить это содержимое, но как мне сначала получить необработанные данные резервной копии? Например, я не могу изначально указать здесь содержимое файла на диске. Нужно ли мне инициировать какое-то чтение через канал? mt
а затем пропустите это через mtftar
чтобы увидеть структуры данных на резервной ленте?
mftar
должен в соответствии с документами уметь читать прямо с ленты, так что ...
mftar < /dev/st0 | tar tvf -
Если вы предпочитаете сначала взять данные с ленты, а затем манипулировать с помощью mftar, вы можете использовать dd
например
dd if=/dev/st0 of=output1
Возможно, вам потребуется указать размер блока с помощью dd. Если вы не знаете, как была написана лента, тогда tcopy
могу предоставить вам отчет о его формате.
Если у вас есть несколько изображений на одной ленте, вам необходимо использовать устройство без перемотки. /dev/nst0
вместе с явной перемоткой, где это необходимо.
Я только что наткнулся на то же сообщение об ошибке и опубликовал подробное объяснение в этот вопрос.
Коротко, Cannot allocate memory
означает, что программа, которую вы используете для чтения ленты, не использует достаточно большой буфер для чтения данных с ленты. Если в программе, которую вы используете, не может быть установлен размер буфера чтения, вы можете использовать dd
для этого:
dd if=/dev/nst0 bs=1M | tar tvf -
При этом будут использоваться буферы чтения размером 1 МБ, которые смогут читать блоки ленты размером 1 МБ или меньше. Увеличивайте по мере необходимости, пока Cannot allocate memory
уходит - значение должно быть таким же или большим, чем самый большой блок на ленте.
Размер блоков ленты устанавливается во время процесса записи приложением, выполняющим запись.