Как записать файл на ленту с помощью tar + pv для получения индикатора прогресса

Вопрос или проблема

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

  1. Обновите ваше окружение. Убедитесь, что у вас установлены последние версии tar и pv. Это поможет избежать возможных багов.

  2. Используйте команду tar с правильными параметрами и перенаправьте вывод через pv.

  3. Вычисление размера файла. Вам необходимо знать общий размер файла для 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
  • Ошибки и журналирование: Следите за сообщениям об ошибках, которые могут появиться при выполнении команд. Они могут помочь вам понять, что пошло не так, если возникнут дополнительные проблемы.

Заключение

Используя приведенные методы, вы сможете успешно записать файлы на ленту с выводом прогресса. Это подход не только улучшит вашу эффективность при работе с резервным копированием, но и обеспечит лучшее понимание текущего статуса процесса записи.

Оцените материал
Добавить комментарий

Капча загружается...