Когда я пытаюсь прочитать tar с ленты с помощью tar tvbf 2048 /dev/nst0
, он возвращает:
tar: /dev/nst0: Cannot read: Device or resource busy
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now
И lsof | grep st0
ничего не возвращает.
Все команды с mt работают. Если я попробую с помощью strace:
...
open("/dev/nst0", O_RDONLY) = 3
read(3, 0x7ff16eb8f000, 1048576) = -1 EBUSY (Device or resource busy)
...
Ленточный накопитель имеет последнюю прошивку. Ленточный накопитель - это IBM ULTRIUM-HH6, а прошивка - F9A1.
mt -f /dev/nst0 status
? dd
с tar
или просто используя tar, как вы написали? При использовании tar piping и переменной окружения $TAPE есть причуда. увидеть ниже. Иногда вы даете команду, она терпит неудачу, нет шума от дисковода, но лента больше не находится в состоянии «перемотан». Попробуйте неявную перемотку назад перед каждой командой.
Проведите тест с другой лентой (запустите команды сразу друг за другом: cd /путь/к файлам mt -f /dev/nst0 перемотать назад; tar -b 2048 -c -f /dev/nst0 * mt -f /dev/nst0 перемотать назад; tar -b 2048 -t -f /dev/nst0
Кстати, если вы не хотите постоянно передавать -f /dev/nst0, добавьте export TAPE=/dev/nst0
в свой . bashrc. Имейте в виду, что если у вас есть эта переменная, tar предпочтет ленточный накопитель, а не stdin/stdout. Таким образом, это вернет «Устройство или ресурс занят»
export TAPE=/dev/nst0
mt rewind ; tar -b 128 -c *|dd of=$TAPE bs=64K
... потому что и dd, и tar пытаются открыть ленточный накопитель. Правильный способ передать tar — передать -f -
:
mt rewind ; tar -b 128 -c -f - *|dd of=$TAPE bs=64K
Также я не уверен, что этот размер блока будет работать хорошо. В этом документе вы можете прочитать:
Размер блока не больше 256 КБ (262144 байт) строго рекомендуется при работе с HP-UX и ленточными или VTL-устройствами.
Поэтому попробуйте уменьшить размер блока до 256 КБ или даже 128 КБ (это tar -b 512 или -b 256 соответственно).