Как решить проблемы с резервным копированием на магнитную ленту через 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 уходит - значение должно быть таким же или больше, чем самый большой блок на ленте.
Размер блоков ленты устанавливается в процессе записи приложением, выполняющим запись.