segunda-feira, setembro 03, 2007

Dividindo arquivos tar em múltiplos volumes

Dica originalmente retirada daqui

Muitas vezes queremos dividir os arquivos gerados pelo tar para caber em um dvd ou um cd, por exemplo. Para mídias como fita dat ou disquetes, a opção "-M" resolve, mas e quando quisermos fazer isso em sistema de arquivos para posteriormente gravar em mídias ?

Um exemplo: um arquivo de 1Gb e queremos separar em dois arquivos para caber em 2 cds de 700 Mb, usamos o seguinte comando:

tar -c -M --tape-length=700000 --file=cd1.tar arquivao.tar.gz

Onde a opção "--tape-length" é multiplicada por 1024 bytes (por arredondamento: 700000 x 1024 = +- 700Mb)

Quando o primeiro arquivo chegar a 700mb, o tar dará o seguinte prompt:

Prepare volume #2 for cd1.tar and hit return:

Para começar a escrever no segundo arquivo, digite:

n cd2.tar

Caso você saiba previamente quantos volumes o arquivo irá gerar, o seguinte comando não precisará de interação:

tar -c --tape-length=700000 -f cd1.tar -f cd2.tar arquivao.tar.gz

A opção "--tape-length" também pode ser substituída por "-L"

Para restaurar o arquivo:

tar -x -M --file=cd1.tar --file=cd2.tar arquivao.tgz

6 comentários:

hamacker disse...

Hummm, porque usastes .tgz e .gz como extenção de arquivo se não usou parametros de compactação com o tar (-z ou -j) ?

Alias, se não me falha a memória, o tar não aceita parametros de compactação quando se usa -M para multivolume.

Anônimo disse...

Nossa! Que complicação. KISS (Keep it Simple). Shell é para preguiçosos (no bom sentido, claro). Eu como sou bem preguiçoso, uso as formas mais fáceis.
Já tentou o comando "split"?
Compacte seu arquivo e depois dê um split nele:

$ split -b 700M nome_do_arquivo

Pronto, terá seu arquivo dividido.
Pra juntar, basta dar um "append" com cat depois

$ cat nome_do_arquivo2 >> nome_do_arquivo1

Até mais.

jczucco disse...

hamacker: o arquivo tgz é apenas uma extensão de exemplo, pode ser qualquer arquivo, como um .ISO por exemplo.

Miguel Rozsas disse...

anônimo pergunta porque não usar o split sobre o arquivão.
De fato, nesse exemplo, tendo-se o arquivão disponível, não faz sentido usar o multi-volume do tar, mas sim o split. (ainda assim, há a questão de consumo de memória necessária para essa operação usando o split, que não seria um problema com Multivolume)

O multivolume faz mais sentido quando queremos passar para uma media removível como uma fita, um filesystem que tem uma ocupação maior que qq. espaço livre disponível no sistema, direto para várias fitas, sem gerar o arquivão para depois dar o split.

Já passei por essa situação, e sem a capacidade de multivolume, seria impossível passar um FS de 20G em duas fitas DAT de 12G de um sistema cujo maior espaço livre era 3G e 512M de RAM.

O maior problema do multivolume, ao contrário do tar básico é que se perte a capacidade de ler o tar multivolume, uma vez que nem todo *nix tem a capacidade multivolume no tar.

merlinus disse...

eu consigo atraves desse comando de alguma forma ir gravando em CDs ou DVDs, de tal forma que possa ir compactando direto no cd sem precisar ter o espaço livre em disco, tal como o miguel sugeriu para fitas??

Anônimo disse...

Acho que o tar é perfeito quando é necessário fazer o backup de diretórios e seus subdiretórios.

Att
Angkor