Как решить проблемы с резервным копированием на магнитную ленту через MT в Linux для резервного копирования 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 2003 Backup полезность. Я понимаю, что могу использовать mtftar чтобы получить это содержимое, но как мне сначала получить необработанные резервные данные? Например, я не могу перечислить содержимое файла на диске изначально здесь. Нужно ли трубу инициировать какое-то чтение через mt а затем пропустить через mtftar чтобы увидеть структуры данных на резервной ленте?

2 ответа

Решение

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 уходит - значение должно быть таким же или больше, чем самый большой блок на ленте.

Размер блоков ленты устанавливается в процессе записи приложением, выполняющим запись.

Другие вопросы по тегам