Назад | Перейти на главную страницу

Как устранить проблемы с резервным копированием на магнитную ленту через 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 чтобы увидеть структуры данных на резервной ленте?

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

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