Остановка tar после нахождения записи или EOF в реальном архиве ленты

304
tanantish

Мне только что передали кучу LTO-5 и ленточную библиотеку, а также захватывающую задачу по извлечению подмножества файлов.

Порядок величины составляет 60 лент из указанной стопки, около 10000 файлов по 70000 на кассету (в полдюжине или дюжине каталогов asstd), которые мне нужно вытащить. Библиотека магнитных лент работает под управлением tar 1.23

У меня есть уже существующие дампы содержимого каждой ленты, tar --listтак что я рад согласовать это с моим списком файлов, которые мне нужно вытащить, чтобы я мог передать правильный поток записей для захвата, но

tar -xvf /dev/nst0 -b $file_to_pull 

не останавливается, пока я не доберусь до конца ленты. Что имеет смысл - tar может быть заполнен шаблоном подстановки, поэтому он просто идет в конец архива.

Я думаю, что я мог бы решить эту проблему, просто введя глобус каталога и очистив ненужные файлы, как только они были записаны, но я не могу не думать, что должен быть способ остановить tar на границе EOF и пропустить шаг очистки, Правильно? Однако во всей моей охоте я не нашел ничего подобного ..

Итак, вопросы:

  • Есть ли способ заставить tar (или, черт возьми, что-нибудь еще) извлечь только один файл, где бы ни находилась головка ленты, и затем остановить ? Или подать сигнал tar, как только он получит EOF и остановится?

  • С другой стороны, я мысленно атакую ​​это странным образом? Рад принять альтернативные предложения, если кто-нибудь их получил.

Отмечая, конечно, это не проблема, которая сейчас неразрешима, просто мои текущие параметры кажутся действительно неуклюжими - это первый раз, когда мне действительно приходилось иметь дело с лентой такого масштаба (а все остальные наши ленты - LTFS )

1

1 ответ на вопрос

2
meuh

Вы можете попросить tar выполнить действие через каждые несколько блоков в том, что они называют контрольными точками . Это действие может проверить, был ли извлечен нужный файл и, если это так, уничтожить tar. Я попробовал это, используя tar-файл, и, кажется, работает нормально.

Вот мой пример сценария для выполнения моего теста, tarring / usr / bin и извлечения usr / bin / bash в / tmp / usr / bin / bash. По умолчанию --checkpoint составляет 10 блоков.

#!/bin/bash  cat <<\! >/tmp/checkdone #!/bin/bash # env has TAR_CHECKPOINT TAR_ARCHIVE TAR_VERSION TAR_BLOCKING_FACTOR # tar -C directory is NOT used for checkpoint action! want=$1  if size=$(stat --printf='%s\n' "$want" 2>&1) then if [ "$(</tmp/lastsize)" = "$size" -a -s /tmp/pid ] then echo "same size $size. time to stop" ls -l "$want" >/tmp/lastsize kill -1 $(</tmp/pid) else echo "partial size $size" echo "$size" >/tmp/lastsize fi else echo -n "." fi ! chmod +x /tmp/checkdone >/tmp/lastsize >/tmp/pid  tar -cf /tmp/tar /usr/bin/ # create example tar file # wanted file. must be in current dir want=usr/bin/bash cd /tmp || exit # dont use tar -C dir  tar -xvf /tmp/tar "$want" --checkpoint=10 --checkpoint-action=exec="/tmp/checkdone $want" & echo $! >/tmp/pid wait  rm /tmp/tar /tmp/pid /tmp/lastsize /tmp/checkdone rm -fr /tmp/usr 
Хм, ура, я думаю, что это может быть ближе всего (я делаю некоторые тесты сейчас) без необходимости переписывать что-то низкоуровневое, но в процессе создания каталога ленты (что я мог бы сделать в любом случае для дальнейшего использования) чтобы получить размеры файлов, чтобы знать, когда нужно остановиться, мне уже нужно сделать один проход ленты, и в этот момент я мог бы просто сделать полный дамп. Черт возьми, деготь! * Волны кулак * tanantish 8 лет назад 0
Из того, что я помню о ленточных накопителях (более 10 лет назад), вы можете обнаружить, что накопитель не будет останавливаться на полпути через файл, и в любом случае это приведет к разрыву между файлами! Удачи и моих симпатий. meuh 8 лет назад 0
Что ж, это лента, так что люди, которые просят меня относиться к ней как к файловой системе с произвольным доступом, получают образование в процессе. Я только что согласился с тем, что мог бы также сжечь пару терабайт диска, так что да, диски разболтались, и у меня есть вторичный процесс для удаления ненужных файлов, когда происходит переход от подготовки к работе. То, что вы делаете: P tanantish 8 лет назад 0

Похожие вопросы