Я хотел бы вести журнал файлов, которые я записываю на ленту с использованием dd или tar для каждого файла. Затем в конце цикла добавьте этот журнал в начало ленты, используя dd. Если это сработает, я могу увидеть содержимое любой ленты, прочитав несколько первых блоков, а затем использовать «mt fsf», чтобы поместить ленту в указанный файл. Журнал будет выглядеть примерно так:
1 file1.gz
2 file2.gz
3 ...
И, возможно, я бы добавил полезный пример:
to restore the second file from the this list: mt -f /dev/nst0 fsf 2; tar xf /dev/nst0
Я начинаю пробег с записи на ленту пустого места:
## prepare a placeholder at the beginning of the tape
dd if=/dev/zero bs=32k count=1024 of=/dev/nst0
## loop through the files in the directory, writing them to tape and a log
for file in $(ls test_dir); do
tar cf /dev/nst0 $file &&
echo $file >>process.log
done
## rewind the tape and prepend the process.log to the tape
mt -f /dev/nst0 rewi
(dd if=process.log bs=32k; dd if=/dev/zero bs=32k count=1024)|dd of=/dev/nst0 bs=32k conv=noerror,sync,block count=1024
## see if worked
mt -f /dev/nst0 rewi
dd if=/dev/nst0 of=process.log bs=32k
mt -f /dev/nst0 fsf 1
tar tf /dev/nst0
К сожалению, хотя я могу прочитать журнал с ленты, мне кажется, что я не могу извлечь какие-либо дополнительные данные, что дает результат ниже. Если я не попытаюсь перезаписать первый файл журналом процесса, он выдаст имя файла в тестовом каталоге.
tar: This does not look like a tar archive
tar: Error exit delayed from previous errors
Неужели нет никакого способа обойти это? Я знаю, что могу собрать все файлы, а затем составить список файлов, которые должны уместиться на ленту (на основе известной / предполагаемой емкости ленты), а затем просто записать это в первую очередь; это не так умно.
Я думаю, вы можете это сделать, но вы не можете просто вот так воткнуть файл в начало архива TAR; у них есть заголовки. Я подозреваю, что если бы вы переместили текущее содержимое tar-архива на диск и записали другой файл (заголовок, а затем блоки данных) в освободившееся пространство, вы могли бы это сделать. Если у вас нет способа переместить начало файла без фактического перемещения данных, такая операция будет очень дорогостоящей (эквивалентной перезаписи всей ленты каждый раз).
Вот описание GNU заголовка TAR.
В противном случае забудьте об использовании TAR для записи файлов и используйте DD, при этом как-то самостоятельно управляя распределением файлов.