Como gerar uma imagem ISO incluindo os "diretórios-pai" originais na raiz

Publicado por Stefano Fontes em 13/07/2018

[ Hits: 2.272 ]

 


Como gerar uma imagem ISO incluindo os "diretórios-pai" originais na raiz



Consideremos os seguintes diretórios e arquivos neles contidos:

ls -R ./teste/backup/
./teste/backup/:
300618  310518

./teste/backup/300618:
arquivo_1.bkp  arquivo_2.bkp  arquivo_3.bkp  arquivo_4.bkp  arquivo_5.bkp

./teste/backup/310518:
arquivo_10.bkp  arquivo_2.bkp  arquivo_4.bkp  arquivo_6.bkp  arquivo_8.bkp
arquivo_1.bkp   arquivo_3.bkp  arquivo_5.bkp  arquivo_7.bkp  arquivo_9.bkp

Tratam-se, como pode-se deduzir, de arquivos de backup hipotéticos organizados em dois diretórios, cujos nomes são a data abreviada de realização do backup.

Agora suponhamos que precisamos gerar uma imagem "iso" destes arquivos e diretórios, para efeito de gravar um CD, por exemplo, montando-a e listando seu conteúdo a seguir:

genisoimage -v -r -o ./teste/backup.iso ./teste/backup/310518 ./teste/backup/300618
I: -input-charset not specified, using iso-8859-1 (detected in locale settings)
genisoimage 1.1.9 (Linux)
Scanning ./teste/backup/310518
Scanning ./teste/backup/300618
Using ARQUI000.BKP;1 for  /arquivo_1.bkp (arquivo_4.bkp)
Using ARQUI001.BKP;1 for  /arquivo_4.bkp (arquivo_3.bkp)
Using ARQUI002.BKP;1 for  /arquivo_3.bkp (arquivo_5.bkp)
Using ARQUI003.BKP;1 for  /arquivo_5.bkp (arquivo_2.bkp)
Using ARQUI004.BKP;1 for  /arquivo_2.bkp (arquivo_1.bkp)
Using ARQUI005.BKP;1 for  /arquivo_1.bkp (arquivo_4.bkp)
Using ARQUI006.BKP;1 for  /arquivo_4.bkp (arquivo_3.bkp)
Using ARQUI007.BKP;1 for  /arquivo_3.bkp (arquivo_5.bkp)
Using ARQUI008.BKP;1 for  /arquivo_5.bkp (arquivo_7.bkp)
Using ARQUI009.BKP;1 for  /arquivo_7.bkp (arquivo_6.bkp)
Using ARQUI00A.BKP;1 for  /arquivo_6.bkp (arquivo_10.bkp)
Using ARQUI00B.BKP;1 for  /arquivo_10.bkp (arquivo_9.bkp)
Using ARQUI00C.BKP;1 for  /arquivo_9.bkp (arquivo_8.bkp)
Using ARQUI00D.BKP;1 for  /arquivo_8.bkp (arquivo_2.bkp)
genisoimage: Error: './teste/backup/300618/arquivo_3.bkp' 
and './teste/backup/310518/arquivo_3.bkp' have the same Rock Ridge name 'arquivo_3.bkp'.
Unable to sort directory 
NOTE: multiple source directories have been specified and merged into the root
of the filesystem. Check your program arguments. genisoimage is not tar.

O que aconteceu? Como diz a última parte da mensagem de erro, "genisoimage is not tar." E o que vem a ser isso?

Ocorre que o programa "genisoimage" não reproduz exatamente a estrutura de diretórios original na imagem "iso", assim como o programa "tar", quando especificamos múltiplos caminhos de diretórios ou arquivos a serem incluídos na imagem; ele simplesmente ignora os "diretórios-pai" que os contém, tentando ordená-los ("sort") no mesmo diretório na imagem, e quando encontra arquivos com o mesmo nome "Rock-Ridge" não consegue distinguí-los e portanto gerando um erro sem criar a imagem.

Além disso, mesmo que não houvessem arquivos com o mesmo nome, e a imagem pudesse ser criada, haveria o inconveniente de perdermos a organização dos arquivos por data em seus respectivos diretórios, ficando todos misturados no mesmo "diretório-raiz" da imagem.

Felizmente, há uma forma de contornar este problema, através da inserção de nomes de diretórios (e até mesmo de arquivos!) na imagem "iso", mesmo que não existam na estrutura de diretórios original. Isto é feito através da opção "-graft-points" do programa "genisoimage" ("graft", em inglês, significa isto mesmo, enxerto ou inserção). Esta opção também possibilita, portanto, até mesmo mudar o nome de arquivos e diretórios na imagem "iso", em relação a seus nomes originais (consultar a "man page" do "genisoimage" para maiores informações).

A sintaxe correta do comando neste caso seria:

genisoimage -v -r -o ./teste/backup.iso -graft-points 310518/=./teste/backup/310518 300618/=./teste/backup/300618

ATENÇÃO: observar que é fundamental a barra no final do nome dos diretórios a serem criados na imagem, (os pontos de inserção ou "graft-points"), no caso por exemplo "310518/", caso contrário o "genisoimage" poderá criar um arquivo e não um diretório na imagem.

Ao montarmos e listarmos o conteúdo da imagem, poderemos verificar que a estrutura de diretórios foi corretamente criada:

sudo mount -t iso9660 -o ro,loop=/dev/loop0 ./teste/backup.iso /mnt/iso
ls -R /mnt/iso
/mnt/iso:
300618  310518

/mnt/iso/300618:
arquivo_1.bkp  arquivo_2.bkp  arquivo_3.bkp  arquivo_4.bkp  arquivo_5.bkp

/mnt/iso/310518:
arquivo_10.bkp  arquivo_2.bkp  arquivo_4.bkp  arquivo_6.bkp  arquivo_8.bkp
arquivo_1.bkp   arquivo_3.bkp  arquivo_5.bkp  arquivo_7.bkp  arquivo_9.bkp

Objetivo alcançado, agora é só desmontar e gravar a imagem em um CD ou DVD, utilizando os programas "wodim" ou "growisofs". Por exemplo:

growisofs -dvd-compat -Z /dev/dvd=./teste/backup.iso

Obviamente você deverá substituir os caminhos e nomes acima pelos da imagem que você criou!

Agradecemos mais uma vez pela atenção e oportunidade de sermos úteis a comunidade Linux/Unix.

Até a próxima oportunidade!

"In a Free World without Walls, we don't need Windows (nor Gates)..." ; ^ )

Obs.: lembramos sempre aos leitores/usuários da obrigatoriedade de realizar testes e "backups" de dados, antes da implementação definitiva dos procedimentos com os programas, utilitários e suas opções acima descritos, pois não assumimos quaisquer responsabilidades por eventuais perdas de dados ou quaisquer danos/prejuízos decorrentes; informamos que os testes acima descritos foram realizados em ambiente experimental, de forma controlada e limitada ao escopo dos procedimentos descritos, em caráter estritamente didático, e não de produção.

Outras dicas deste autor

Problema com ALSA no Debian 5 [Resolvido]

Boot pelo disquete / root no pendrive

Você conhece o OpenVPN?

Leitura recomendada

MultiTail - Comando tail em múltiplos arquivos no Linux

Como fazer logout forçado pela linha de comando no GNOME

Como copiar arquivos mantendo a estrutura de diretórios e sub-diretórios

Orientações sobre comandos para iniciantes

Pgrep e pkill

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts