Multiboot pelo pendrive usando grub2: instalando várias distros a partir de uma unidade de armazenamento móvel

O objetivo real desse artigo é mostrar como tornar sua unidade de armazenamento móvel (Pendrive) bootável e instalar vários Sistemas GNU/Linux a partir da mesma.

[ Hits: 109.978 ]

Por: Perfil removido em 08/11/2011


Configuração do Grub2 para as distros Ubuntu, Linux Mint Debian, Parted Magic e Debian



Será criado um diretório para armazenamento da imagem ISO de cada distribuição GNU/Linux, com o proposito de organizar e separar os dados de cada distro.

Supondo que o pendrive ainda esteja montado no diretório /media/pendrive, criamos os diretórios e copiamos as imagens ISO para os mesmos:

# mkdir /media/pendrive/debian
# mkdir /media/pendrive/parted
# mkdir /media/pendrive/mint
# mkdir /media/pendrive/ubuntu1204
# mkdir /media/pendrive/ubuntu1404
# mkdir /media/pendrive/ubuntusrv
# mkdir /media/pendrive/kali
# cp /local da imagem do Mint/imagem do mint.iso /media/pendrive/mint
# cp /local da imagem do kali/imagem do kali.iso /media/pendrive/kali
# cp /local da imagem do ubuntu1204/imagem do ubuntu1204.iso /media/pendrive/ubuntu1204
# cp /local da imagem do ubuntu1404/imagem do ubuntu1404.iso /media/pendrive/ubuntu1404
# cp /local da imagem do ubuntuserver/imagem do ubuntuserver.iso /media/pendrive/ubuntusrv
# cp /local das imagens do kernel e initrd do ubuntuserver/imagens /media/pendrive/ubuntusrv
# cp /local da imagem do parted /imagem da distro parted.iso /media/pendrive/parted
# cp /local da imagem do debian/imagem do debian.iso /media/pendrive/debian
# cp /local das imagens do kernel e initrd/ imagens /media/pendrive/debian


Configuração do "grub.cfg" para bootar as imagens ISO usando o recurso loopback. Todo este trabalho feito até então, será incapaz de carregar as imagens ISO e dar boot pelas mesmas e iniciar a instalação das distros sem a configuração do arquivo "grub.cfg".

Após fazer a cópia das imagens ISO para os diretórios criados, é hora de configurar o Grub2 para deixar disponível no menu de boot os sistemas que desejamos usar para instalar a partir do pendrive.

Editando arquivo "grub.cfg":

# vim /media/pendrive/boot/grub/grub.cfg

Dentro do arquivo, apague todo o conteúdo e adicione o conteúdo abaixo:

set default="0"
set timeout=30

menuentry 'Kali Linux 1.0.6 64 Bits' {
         insmod part_msdos
         insmod ext2
iso="/kali/kali-linux-1.0.6-amd64.iso"
echo 'Carregando Imagem ISO do sistema...'
loopback loop $iso
         set bootoptions='boot=live findiso=$iso noconfig=sudo username=root hostname=kali noswap noautomount'
         echo   'Loading Kernel Image...'
         linux (loop)/live/vmlinuz $bootoptions
         echo   'Loading Initrd Image...'
         initrd (loop)/live/initrd.img
}

menuentry 'Ubuntu Server 14.04.1 LTS 64 bits' {
         insmod part_msdos
         insmod ext2
         set bootoptions='root=UUID=62404d73-c42d-449f-acab-984e3014da05 cdrom-detect/try-usb=true priority=low quiet'
         echo   'Loading Kernel Image...'
         linux   ubuntusrv/vmlinuz $bootoptions
         echo   'Loading Initrd Image...'
         initrd   ubuntusrv/initrd.gz
}

menuentry 'Ubuntu 14.04.1 LTS Desktop 64 bits' {
         insmod part_msdos
         insmod ext2
         set bootoptions='locale=pt_BR bootkbd=qwerty/br-abnt2 console-setup/layoutcode=br boot=casper iso-scan/filename=/ubuntu1404/ubuntu-14.04.1-desktop-amd64.iso quiet splash'
         echo   'Loading Loopback Image...'
         loopback loop "/ubuntu1404/ubuntu-14.04.1-desktop-amd64.iso"
         echo   'Loading Kernel Image...'
         linux   (loop)/casper/vmlinuz.efi $bootoptions
         echo   'Loading Initrd Image...'
         initrd   (loop)/casper/initrd.lz
}

menuentry 'Ubuntu 12.04.5 LTS Desktop 64 bits' {
         insmod part_msdos
         insmod ext2
         set bootoptions='locale=pt_BR bootkbd=qwerty/br-abnt2 console-setup/layoutcode=br boot=casper iso-scan/filename=/ubuntu/ubuntu-12.04.5-desktop-amd64.iso quiet splash'
         echo   'Loading Loopback Image...'
         loopback loop "/ubuntu1204/ubuntu-12.04.5-desktop-amd64.iso"
         echo   'Loading Kernel Image...'
         linux   (loop)/casper/vmlinuz.efi $bootoptions
         echo   'Loading Initrd Image...'
         initrd   (loop)/casper/initrd.lz
}

menuentry 'Linux Mint Debian 2012-04 64 bits' {
         insmod part_msdos
         insmod ext2
         set root'(hd0,msdos1)'
         search --no-floppy --fs-uuid --set b7da-2d5b-4a51-8e89-bafbd815bfda
         echo   'Loading Loopback Image...'
         loopback loop /mint/linuxmint-201204-mate-cinnamon-dvd-64bit.iso
         echo   'Loading Kernel Image...'
         linux   (loop)/casper/vmlinuz root=UUID=b7da-2d5b-4a51-8e89-bafbd815bfda fromiso=/dev/disk/by-uuid/b7da-2d5b-4a51-8e89-
bafbd815bfda/mint/linuxmint-201204-mate-cinnamon-dvd-64bit.iso boot=live config live-media-path=/casper noprompt quickreboot quiet splash --
         echo   'Loading Intrd Image...'
         initrd   (loop)/casper/initrd.lz
}

menuentry 'Parted Magic 2012_10_10' {
         insmod part_msdos
         insmod ext2
         set root'(hd0,msdos1)'
         search --no-floppy --fs-uuid --set b7da-2d5b-4a51-8e89-bafbd815bfda
         loopback loop /parted/pmagic_2012_10_10.iso
         linux   (loop)/pmagic/bzImage uuid=b7da-2d5b-4a51-8e89-bafbd815bfda iso_filename=/parted/ pmagic_2012_10_10.iso edd=off noapic
load_ramdisk=1 prompt_ramdisk=0 rw vga=788 loglevel=9 max_loop=256 livemedia noeject keymap=fr-latin1 en_US
         initrd   (loop)/pmagic/initrd.img
}

menuentry 'Debian Wheezy 7.8 64 bits' {
         insmod part_msdos
         insmod ext2
         set bootoptions='root=UUID=62404d73-c42d-449f-acab-984e3014da05 cdrom-detect/try-usb=true priority=low quiet'
         echo   'Loading Kernel Image...'
         linux   /debian/vmlinuz $bootoptions
         echo   'Loading Initrd Image...'
         initrd   /debian/initrd.gz
}


Obs.: Nas opções que possuem: UUIDs b7da-2d5b-4a51-8e89-bafbd815bfda

Você deve substituir "b7da-2d5b-4a51-8e89-bafbd815bfda", pelo UUID do seu pendrive.

Explicações

Explicação dos principais comandos e parâmetros passados para o Kernel:
  • As linhas acima fazem parte do arquivo "grub.cfg" comum do Grub2, porém, a grande diferença é que uma delas possui o comando loopback.
  • Loopback é um recurso usado no Grub2 que torna capaz a montagem de uma imagem ISO, como se fosse um disco e carregar os arquivos contidos na imagem (como o kernel e a image initrd). O comando loopback é usado para indicar a localização da imagem ISO.
  • O comando search é utilizado para o Grub localizar o dispositivo com o UUID (--fs-uuid --set ) do seu dispositivo.
  • As opções "(loop)" antes do path do kernel e do initrd, é para indicar aonde está localizado ambos dentro da imagem ISO.
  • O Parâmetro iso-scan/filename=" PATH " passado para o kernel, é usado para indicar aonde o sistema irá buscar a imagem ISO.
  • O Parâmetro iso_filename=" PATH " tem função semelhante ao iso-scan/filename.
  • O Parâmetro splash é para mostrar a imagem de fundo durante o carregamento do sistema.


Página anterior     Próxima página

Páginas do artigo
   1. Introdução, Motivação e Tornando Pendrive Bootável
   2. Obtendo as Distribuições
   3. Configuração do Grub2 para as distros Ubuntu, Linux Mint Debian, Parted Magic e Debian
   4. Configuração do Grub2 para as distros CentOS e Fedora
Outros artigos deste autor

Compilando o kernel no Slackware com pacotes pré-compilados

Passos essenciais para configurar sua impressora no Linux

OcoMon 2.0RC6 no OpenSUSE 11.2 com PHP5 + MySQL5 + Apache2 com correção de acentuação

Análise de Atividades Suspeitas com Audit

Ubuntu 14.04 no AD com CiD

Leitura recomendada

Atualizando para KDE-3.2 usando o APT no SuSE 9

Instalando o GNU/Linux numa máquina virtual (e aprendendo sem correr riscos)

Teclas de atalho com Xbindkeys

Com vocês, Larry, a vaca

Instalando o Slackware em um P100 com 16 RAM

  
Comentários
[1] Comentário enviado por adri3d em 08/11/2011 - 10:56h

na parte do
grub-install –force –no-floppy –root-directory=/media/pendrive /dev/sdb1

é dois tracinho
grub-install --force --no-floppy --root-directory=/media/pendrive /dev/sdb1

[2] Comentário enviado por removido em 08/11/2011 - 11:28h

sim adri3d é dois tracinhos, quando digitei não ficou os dois traços é exatamente assim:

grub-install --force --no-floppy --root-directory=/media/pendrive dev/sdb


qualquer dúvida é só postar...


abraços e espero que este artigo ajude várias pessoas.

[3] Comentário enviado por rai3mb em 08/11/2011 - 11:30h

@eabreu, fiz a correção.
Você digitou certo sim, acontece que alguns caracteres podem perder a formatação quando um artigo/dica/etc é enviado para o VOL, e cabe aos moderadores fazerem as devidas adaptações, nesse caso o erro não foi seu ;-), foi meu :-(

Abraços

[4] Comentário enviado por removido em 08/11/2011 - 11:43h

Valeu pelo esclarecimento rai3mb, já tinha pensado que poderia ser isso mesmo.


abraço amigo....

[5] Comentário enviado por adri3d em 08/11/2011 - 12:10h

mais uma coisa nessa mesma linha
grub-install --force --no-floppy --root-directory=/media/pendrive /dev/sdb1

não devria ser
grub-install --force --no-floppy --root-directory=/media/pendrive /dev/sdb

para instalar na mbr do pen e não na primeira partição, fiz primeiro com sdb1 e ficava apenas um cursor piscando na tela de boot, depois executei o grub-intall em sdb e funcionou.

[6] Comentário enviado por removido em 08/11/2011 - 12:19h

É isso mesmo adri3d, desculpe por esse erro pequeno mais de essencial importância para conseguir fazer o pendrive bootavel funcionar.

é:
# grub-install --force --no-floppy --root-directory=/media/pendrive /dev/sdb

e não:
# grub-install --force --no-floppy --root-directory=/media/pendrive /dev/sdb1

bela observação e obrigado pela colaboração.

Qualquer dica que venha melhorar o artigo será bem aceito para todos...

Obrigado mais uma vez e abraço amigo....

[7] Comentário enviado por medeiros64 em 08/11/2011 - 16:06h

otimo artigo realmente essa é uma grande ferramenta pois pelo pen drive o sistema é instalado muito mais rapido.


agora desculpe minha ignorancia tem como fazer um pen drive com o instalador de rwindows tbm?

é como da p/ colocar o grub caregando uma iso se for usado uma iso do windows daria certo fiquei com uma duvida

no meu caso tenho um pen com instalador do ubuntu e outro com windows juntar os 2 me sobraria um pen drive rs


exemplo

debian
ubuntu
slackware
Rwindows ?

[8] Comentário enviado por removido em 08/11/2011 - 16:23h

Amigo medeiros64 nunca fiz com windows, porém acredito que há possibilidade ai mesmo pelo grub2,porém nunca tentei.

Mas te passarei a dica como fazer isso assim que possivel...

abraço..

[9] Comentário enviado por adri3d em 08/11/2011 - 16:40h

não
não por esse metodo usado aqui. Não da certo porque o grub monta a iso e chama o kernel que esta dentro dela,
por um acaso uma instação do windows tem um kernel linux?

mas
mas eu ainda tenho uma ideia. a uns dias atraz fiz isso:
http://adriano-tmp.blogspot.com/2011/10/windows7-instalavel-pelo-pendrive-via.html

se fosse feita duas partiçoes no pendrive uma com as distros senguindo esse guia e outra partição com o windows seguindo este outro tutorial,

instalando o grub na mbr e o ms-sys na partição 2

algem se abilita a testar meu maior pendrive é 4gb, tinha outros dois de 16gb mas estes pediram arego.

[10] Comentário enviado por adri3d em 08/11/2011 - 17:39h

sobre o grub.cfg segue abaixo o meu por completo,esta bem enchuto e funciona(pelo menos aqui), apenas com um Ubuntu e Trisquel

[code]
set timeout=30
set default=0

menuentry "Ubuntu 11.10 Desktop" {
loopback loop /ubuntu.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu.iso noeject
initrd (loop)/casper/initrd.lz
}
menuentry "trisquel-mini_5.0_amd64" {
loopback loop /trisquel-mini_5.0_amd64.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/trisquel-mini_5.0_amd64.iso noeject
initrd (loop)/casper/initrd
}
[/code]

uma desvantagen dessa abordagem é que não da para defenir o teclado durante o boot, para resolver isso eu deixo esse script no pendrive

[code]
#!/bin/bash
setxkbmap -model abnt2 -layout br
[/code]

[11] Comentário enviado por removido em 08/11/2011 - 18:05h

Esclarecimento:

adri3d falei que há possibilidade de dá boot também com windows no pendrive usando o grub2, porém não citei o método que seria usado.

[12] Comentário enviado por izaias em 09/11/2011 - 12:40h

Ótimo trabalho!

É complexo e por isso, suscetível a erros. Mas ainda bem que temos no VOL a melhor estirpe de membros.
A colaboração é mútua.

Parabéns a todos.

[13] Comentário enviado por meinhardt_jgbr em 09/11/2011 - 13:17h

Muito interessante. Possivelmente também seja factível o mesmo tipo de esquema usando um HD externo USB. Logo que tiver tempo vou testar.

Basicamente se funciona com pendrive deve funcionar com HD externo USB.

Nota 10!!

[14] Comentário enviado por filipesantana18 em 25/11/2011 - 13:22h

esse grub2 funcionaria com o Ghost e SystemRescueCd???

[15] Comentário enviado por removido em 28/11/2011 - 16:55h

Olá amigo filipe,

Sinceramente nunca testei com os dois, mas provavelmente funcione sim.


[16] Comentário enviado por removido em 28/11/2011 - 17:22h

Olá amigo meinharrdt,

Você pode instalar tanto em pendrives quanto em discos rigidos externos como em cartões de memorias.

[17] Comentário enviado por fmj1988 em 02/12/2011 - 14:45h

Estive tentando fazer este artigo durante os ultimos dias e uma das coisas que me deparei foi que:

# grub-install --force --no-floppy --root-directory=/media/pendrive /dev/sdb1

estaria faltando parte de um dos argumentos, e ficando assim:

# grub-install --force-lba --no-floppy --root-directory=/media/pendrive /dev/sdb1

vou repitir a serie de comandos e postar os erros.


[18] Comentário enviado por removido em 03/12/2011 - 13:47h

Fala amigo fmj1988,

**** Dessa forma ele instala o grub na partição 1 do pendrive /dev/sdb1

# grub-install --force --no-floppy --root-directory=/media/pendrive /dev/sdb1

troque por :

*** Dessa forma ele instala o grub na mbr do pendrive, assim funfa de boa:

# grub-install --force --no-floppy --root-directory=/media/pendrive /dev/sdb

[19] Comentário enviado por izaias em 03/12/2011 - 14:07h

Corrigido.

Veja se está acordo.

[20] Comentário enviado por removido em 03/12/2011 - 15:39h

izaias voce é o cara

[21] Comentário enviado por fmj1988 em 03/12/2011 - 22:13h

Edson, seria interessante criar/atualizar/copiar o topico aqui no vol, uma vez que não é possivel comentar no link mencionado.
obrigado

[22] Comentário enviado por removido em 04/12/2011 - 00:24h

Amigo fmj1988,

Primeiramente gostaria de saber se conseguiu resolver o que mencionou no seu post passado depois do meu comentário ?

[23] Comentário enviado por removido em 04/12/2011 - 00:33h

Amigo izaias,

poderia por gentileza trocar algumas linhas do artigo que descrevo abaixo:

1º - Parte 4. do artigo

## Linha a ser trocada

# cp -R /mnt/iso2 /media/pendrive/centos

por

# cp -R /mnt/iso2/* /media/pendrive/centos

2º - Parte 3. do artigo

## Linha a ser trocada

# cp local das imagens do kernel e initrd/ imagens /media/pendrive/debian

por

# cp /local das imagens do kernel e initrd/ imagens /media/pendrive/debian

Obrigado...

[24] Comentário enviado por izaias em 04/12/2011 - 01:37h

Corrigido.

[25] Comentário enviado por phantom x em 04/01/2012 - 11:24h

Para a instalação do Windows 7, jogue o conteúdo do disco/imagem no pendrive (creio que deva ser na raiz mesmo) e teste com isso:

chainloader /bootmgr


Nunca testei com o grub2, apenas com o syslinux (método bem diferente, mas funcionou).

[26] Comentário enviado por removido em 19/05/2012 - 21:46h

abaixo tem um link com a atualização deste artigo:

http://howtognulinux.blogspot.com.br/2011/11/multiboot-instalando-varias-distros.html

abraço...

[27] Comentário enviado por (xinelo) em 28/05/2012 - 22:29h

Olá pessoal, alguém já tentou fazer esse procedimento através do lilo ao invés do grub? Alguém sabe se é possível, se dá certo. abraços.

[28] Comentário enviado por removido em 18/06/2012 - 10:13h

Sinceramente amigo xinelo, não.

[29] Comentário enviado por removido em 27/10/2012 - 23:59h

Escrevi este comentário para informar que este artigo foi atualizado a uma semana.

[30] Comentário enviado por josueleite em 12/01/2013 - 01:06h


[9] Comentário enviado por adri3d em 08/11/2011 - 16:40h:

não
não por esse metodo usado aqui. Não da certo porque o grub monta a iso e chama o kernel que esta dentro dela,
por um acaso uma instação do windows tem um kernel linux?

mas
mas eu ainda tenho uma ideia. a uns dias atraz fiz isso:
http://adriano-tmp.blogspot.com/2011/10/windows7-instalavel-pelo-pendrive-via.html

se fosse feita duas partiçoes no pendrive uma com as distros senguindo esse guia e outra partição com o windows seguindo este outro tutorial,

instalando o grub na mbr e o ms-sys na partição 2

algem se abilita a testar meu maior pendrive é 4gb, tinha outros dois de 16gb mas estes pediram arego.


e pro xp tem alguma forma?

[31] Comentário enviado por fernando-sales em 25/03/2013 - 13:22h

Ei pessoal, eu gostaria de saber como eu compartilho a pasta "/home" apara varias distros no pendrive. Isso é possível ?

[32] Comentário enviado por geowany em 08/04/2013 - 10:42h


[31] Comentário enviado por fernandosales95 em 25/03/2013 - 13:22h:

Ei pessoal, eu gostaria de saber como eu compartilho a pasta "/home" apara varias distros no pendrive. Isso é possível ?


Fernando, acredito ser possível fazer isso criando outra partição para a /home e definindo no fstab da inicialização de cada distro. Mas, teoricamente, eu não recomendaria fazer nada do tipo já que um usb stick com multiboot que possua várias distros consequentemente possuirá várias versões de arquivos de configurações pessoais dos mais diversos aplicativos. Então, os aplicativos podem apresentar comportamentos estranhos quando se submeterem a utilizar a configurações pessoais compartilhadas.

[33] Comentário enviado por macks em 17/04/2013 - 18:16h


[30] Comentário enviado por josueleite em 12/01/2013 - 01:06h:


[9] Comentário enviado por adri3d em 08/11/2011 - 16:40h:

não
não por esse metodo usado aqui. Não da certo porque o grub monta a iso e chama o kernel que esta dentro dela,
por um acaso uma instação do windows tem um kernel linux?

mas
mas eu ainda tenho uma ideia. a uns dias atraz fiz isso:
http://adriano-tmp.blogspot.com/2011/10/windows7-instalavel-pelo-pendrive-via.html

se fosse feita duas partiçoes no pendrive uma com as distros senguindo esse guia e outra partição com o windows seguindo este outro tutorial,

instalando o grub na mbr e o ms-sys na partição 2

algem se abilita a testar meu maior pendrive é 4gb, tinha outros dois de 16gb mas estes pediram arego.

e pro xp tem alguma forma?


josueleite, creio que se colocar chainloader /ntldr você consiga chamar o XP.

[34] Comentário enviado por thiagomatos em 14/08/2013 - 12:29h

eabreu, boa tarde!
Pergunta de um usuário leigo, gostaria de saber como faço para copiar a imagem de Kernel e do initrd, Pois desconheço a localização desses dois arquivos e sem eles o procedimento não funciona por completo.
Grato pela ajuda.

[35] Comentário enviado por removido em 14/08/2013 - 19:05h

Nas distros ubuntu, linux mint debian e parted magic não precisa extrair a imagem do kernel e initrd. mas no debian você precisa baixar o kernel e a imagem do initrd do site do debian como mostrado no artigo.

[36] Comentário enviado por rodrigoj em 07/09/2013 - 14:03h

Parabens pelo artigo, favoritei por ser o único que trata bem do assunto e explica detalhe por detalhe.

[37] Comentário enviado por felixcorreia em 20/11/2014 - 14:29h

Desculpem, gente: Favor desconsiderar. Por burrice minha eu tinha colocado ~/media/sdb, quando o correto era sem o til na frente...
Problema solucionado...

Boa tarde:

Estou com um problema:

[email protected]:/home/roberto/Downloads# mke2fs -t ext3 -L multiboot /dev/sdb
mke2fs 1.42.10 (18-May-2014)
/dev/sdb contains a udf file system labelled 'Sims3'
Continuar mesmo assim? (y,n) y
Creating filesystem with 3784704 4k blocks and 946560 inodes
Filesystem UUID: 455ad519-f0ce-44a0-8f1f-8b1511493e01
Cópias de segurança de superblocos gravadas em blocos:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: pronto
Gravando tabelas inode: pronto
Creating journal (32768 blocks): concluído
Escrevendo superblocos e informações de contabilidade de sistema de arquivos: concluído

[email protected]:/home/roberto/Downloads# mount /dev/sdb /media/[email protected]:/home/roberto/Downloads# grub-install --force --no-floppy --root-directory=~/media/pendrive /dev/sdb
Installing for i386-pc platform.
grub-install: aviso: Sistema de arquivos `ext2' não suporta incorporação.
grub-install: erro: não é possível incorporar, m mas isso é necessário para instalar o cross-disk.

Pode me dizer o que eu fiz de errado, pois criei o diretório, montei o pendrive, formatei e ao tentar transferir o gub ele diz que o sistema é ext2, mas na formatação tava como ext3, não é?

[38] Comentário enviado por sysmatck em 12/01/2015 - 10:45h

Este método do GRUB2 é top...

Eu consigo carregar o grub4DOS através dele também... Daí dá pra usar o Hiren's BootCD e outras ferramentas. Parece que dá pra carregar também o syslinux, ainda não tentei...

De qualquer forma, acho que é a maneira mais robusta de se fazer este tipo de ferramenta. Quem tiver dificuldade de seguir o passa-a-passo escrito, pode conferir o vídeo que eu fiz sobre isso: https://www.youtube.com/watch?v=Uh_MCYHCUF4

[39] Comentário enviado por removido em 15/02/2015 - 23:07h

Artigo atualizado hoje dia 15/02/2015.


Contribuir com comentário