Como gerar uma imagem ISO incluindo os "diretórios-pai" originais na raiz
Dica publicada em Linux / Comandos
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/
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
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
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.
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.bkpTratam-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.bkpObjetivo 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.