É realmente impossível pré-anexar dados a uma fita?

4

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.

    
por worfly 07.10.2012 / 06:15

1 resposta

2

Eu acho que você pode fazer isso, mas você não pode colocar um arquivo no início de um arquivo TAR assim mesmo; eles têm cabeçalhos. Eu suspeito que se você fosse mover o conteúdo atual do arquivo tar para frente no disco e gravar outro arquivo (cabeçalho e blocos de dados) no espaço assim liberado, você poderia fazê-lo. A menos que você tenha uma maneira de mover o início do arquivo sem realmente mover os dados, essa operação seria muito cara (equivalente a reescrever toda a fita a cada vez).

Aqui está a descrição GNU de um cabeçalho TAR.

Caso contrário, esqueça o uso do TAR para gravar os arquivos e use o DD, enquanto gerencia as alocações de arquivos de alguma forma.

    
por 07.10.2012 / 06:25

Tags