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