Eu gostaria de manter um log de arquivos que estou escrevendo para fita usando dd ou tar para cada arquivo. Então, no final da execução, prefixar esse log ao início da fita usando dd. Se funcionar, posso ver o conteúdo de qualquer fita lendo os primeiros blocos e, em seguida, usar "mt fsf" para posicionar a fita no arquivo especificado. O log seria algo como:
1 file1.gz
2 file2.gz
3 ...
E talvez eu inclua um exemplo útil:
to restore the second file from the this list: mt -f /dev/nst0 fsf 2; tar xf /dev/nst0
Eu começo a corrida escrevendo um espaço em branco na fita:
## 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
Infelizmente, embora eu possa ler o registro da fita, parece que não consigo extrair mais dados, produzindo a saída abaixo. Se eu não tentar sobrescrever o primeiro arquivo com o log do processo, ele produzirá o nome de um arquivo no diretório de teste.
tar: This does not look like a tar archive
tar: Error exit delayed from previous errors
Existe realmente nenhuma maneira de contornar isso? Eu sei que posso registrar todos os arquivos e, em seguida, montar uma lista de arquivos que devem caber na fita (com base na capacidade de fita conhecida / estimada) e, em seguida, apenas escrever primeiro; isso não é tão inteligente.