Вопрос или проблема
У меня есть ленточный накопитель DAT72 на /dev/nst0
. Когда я выполняю
tar -cvf /dev/nst0 myfile
проблем нет, он записывает на ленту. Затем я могу выполнить
tar -tvf /dev/nst0
и я вижу файл на ленте.
Но когда я выполняю
tar -cvpf - file1.ddd | (pv -T -r -p -e -t -b -s $(ls -l file1.ddd | awk '{print $5}') > /dev/nst0)
запись якобы проходит нормально (нет ошибок от tar
или накопителя), но при выполнении tar -tvf /dev/nst0
есть только:
tar: /dev/nst0: Cannot read: Input/output error
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now
В общем, я хочу использовать pv
, чтобы получить индикатор прогресса, время и скорость записи во время записи на ленту. В чем проблема? Как сделать так, чтобы tar
+pv
работали с ленточным накопителем?
Конечно, перед чтением я перематываю ленту, потому что nst0
не перематывается.
Ответ или решение
Чтобы записать файл на ленту с использованием команд tar
и pv
, важно учитывать некоторые нюансы, связанные с особенностями взаимодействия этих утилит с устройствами хранения данных, такими как ваш накопитель DAT72. Проблема, с которой вы столкнулись, обычно связана с тем, как происходит взаимодействие между tar
и pv
, когда вы записываете данные на не-возвратное устройство.
Проблема
Вы описали использование команды pv
, передающей данные на ленту через tar
, и результат — ошибка Cannot read: Input/output error
. Это происходит потому, что tar
ожидает, что входные данные будут поступать в стандартный поток, но поскольку вы используете pv
, который направляет данные на /dev/nst0
, возникает несоответствие, которое приводит к ошибке.
Решение
Чтобы корректно записать файл на ленту, используя pv
для отображения прогресса, необходимо воспользоваться промежуточной передачей данных. Ниже приведены шаги, которые помогут вам успешно завершить эту задачу.
-
Обновите ваше окружение. Убедитесь, что у вас установлены последние версии
tar
иpv
. Это поможет избежать возможных багов. -
Используйте команду
tar
с правильными параметрами и перенаправьте вывод черезpv
. -
Вычисление размера файла. Вам необходимо знать общий размер файла для
pv
, чтобы он мог правильно отображать прогресс. Обычно это можно сделать с помощью командыstat
.
Вот пошаговая команда для записи файла на ленту с использованием pv
для отображения прогресса:
tar -cvf - file1.ddd | pv -s $(stat -c%s file1.ddd) | dd of=/dev/nst0
Объяснение команды:
-
tar -cvf - file1.ddd
: Эта часть создает архивный файлfile1.ddd
и выводит его в стандартный поток (stdout
), который затем передаетсяpv
. -
pv -s $(stat -c%s file1.ddd)
: Здесьpv
принимает данные отtar
, и аргумент-s
позволяетpv
знать общий размер файла, что необходимо для отображения точной информации о прогрессе. -
dd of=/dev/nst0
: Утилитаdd
используется для записи данных в устройство/dev/nst0
. Она будет принимать данные изpv
.
Дополнительные рекомендации
- Перемотайте ленту перед записью: Поскольку у вас устройство
nst0
, оно не перематывается автоматически. Перед началом записи убедитесь, что лента перемотана в начало:
mt -f /dev/nst0 rewind
- Проверка после записи: После завершения записи вы можете проверить содержимое ленты, как вы уже делали:
tar -tvf /dev/nst0
- Ошибки и журналирование: Следите за сообщениям об ошибках, которые могут появиться при выполнении команд. Они могут помочь вам понять, что пошло не так, если возникнут дополнительные проблемы.
Заключение
Используя приведенные методы, вы сможете успешно записать файлы на ленту с выводом прогресса. Это подход не только улучшит вашу эффективность при работе с резервным копированием, но и обеспечит лучшее понимание текущего статуса процесса записи.