grub: boot a partir da ISO


41

Como posso inicializar em um arquivo ISO no GRUB? O arquivo ISO está em uma partição reiserfs e o GRUB pode acessá-lo (já testou isso).


qual versão do grub?
quack quixote

11
A mesma pergunta foi respondida aqui .
Dma_k 12/05


Respostas:


55

O maior problema ao inicializar um arquivo ISO é que os ISOs projetados para serem inicializados quase sempre são projetados para serem inicializados a partir de um CD . Conforme explicado no blog de Marco sobre o Grub 2 (ênfase minha):

O GRUB pode ler imagens ISO9660 ("iso"). Pode, por exemplo, carregar os primeiros setores e inicializá-lo. Mas a maioria das pessoas não percebe é "o que é então?". O que o sistema operacional carregado faria? Provavelmente, procurará um CDROM que não encontrará e falhará.

Portanto, a maneira mais simples de inicializar a partir de um arquivo ISO aleatório é carregá-lo em uma máquina virtual (VirtualBox, VMware ou Virtual PC) como um CD virtual e inicializá-lo lá. Isso quase sempre funciona, porque para a VM não é um arquivo ISO - é um CD real em hardware de CD real.

A inicialização de um arquivo ISO no bare metal é muito mais difícil. Como você faz isso depende de qual versão do Grub você está usando, e os resultados podem variar dependendo do ISO que você está usando e de como foi configurado para inicializar. É por isso que a maioria das ferramentas ISO de inicialização a partir de USB (Unetbootin, WinToFlash, etc) geralmente extrai o conteúdo ISO da unidade - porque dessa forma eles podem ser acessados ​​diretamente, sem confundir o sistema operacional que está sendo inicializado.


Grub 1

... não tenho certeza. Se possível, as entradas do menu provavelmente se parecerão muito com o Grub4DOS, embora eu ache que o comando "map --hook" seja um aprimoramento do Grub4DOS. No lado positivo, o Grub tem um suporte mais amplo ao sistema de arquivos do que o Grub4DOS.

Uma observação no Grub com reiserfs (não confirmado) indica que você "precisa montar sua partição notailpara que ela funcione".

Memdisk é uma opção; ver abaixo.


Grub4DOS

O Grub4DOS oferece algumas "emulações de CD" experimentais que funcionam com algumas ISOs. Infelizmente, o Grub4DOS apenas lê sistemas de arquivos FAT32 / NTFS. Faça o download do Grub4DOS.

Aqui está uma entrada de amostra ( fonte ):

title fdfullcd.iso (0xFF)
  find --set-root /fdfullcd.iso
  map /fdfullcd.iso (0xFF)
  map --hook
  root (0xFF)
  kernel /isolinux/data/memdisk
  initrd /isolinux/data/fdboot.img

Supostamente, o ISO do Win7 pode ser inicializado com esta entrada :

title Windows 7
  map (hd0,0)/win7.iso (hd32)
  map --hook
  chainloader (hd32)

Outros ISOs podem ser inicializados com o Memdisk :

title Boot Hardware Detection Tool from iso image (with 'iso' parameter)
  kernel /memdisk iso
  initrd /hdt.iso

Você também pode usar um configurador de menus como o MultiBootISOs.exe do PenDriveLinux . Coloque os ISOs na unidade flash e execute o utilitário para instalar o carregador de inicialização e configurar o menu de inicialização.

Aqui está um episódio do Hak5 sobre a instalação do Grub4DOS.


Grub 2

Aqui estão alguns exemplos de entradas do Grub2. No momento, o chainloader não funciona para inicializar um ISO; portanto, essas entradas devem (1) usar loopback para "montar" o ISO e (2) adicionar algo como iso-scan ou findiso à linha linux que especifica o arquivo ISO.

Infelizmente, não há uma maneira genérica de fazer isso. Cada entrada de inicialização diferente deve ser personalizada para o conteúdo da ISO de destino. A maioria dos LiveCDs do Linux usa o ISOLINUX como um gerenciador de inicialização; encontre o isolinux.cfg e examine essa entrada de inicialização para ver o que normalmente inicializa.

Entradas de exemplo ( origem ):

menuentry "Ubuntu Live 9.10 32bit" {
 loopback loop /boot/iso/ubuntu-9.10-desktop-i386.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-9.10-desktop-i386.iso noeject noprompt --
 initrd (loop)/casper/initrd.lz
}

menuentry "Grml small 2009.10" {
  loopback loop /boot/iso/grml-small_2009.10.iso
  linux (loop)/boot/grmlsmall/linux26 findiso=/boot/iso/grml-small_2009.10.iso apm=power-off lang=us vga=791 boot=live nomce noeject noprompt --
  initrd (loop)/boot/grmlsmall/initrd.gz
}

Se você está tentando inicializar um LiveCD não Linux, pode estar sem sorte. Novamente, o Memdisk pode ajudar :

menuentry "Boot Hardware Detection Tool from iso" {
  linux16 /memdisk iso
  initrd16 /hdt.iso
}

@ albert: estou usando o Grub2 em uma unidade flash e fiquei frustrado com as mesmas coisas, por isso não foi difícil de montar. Estou analisando sua outra pergunta, mas nunca tentei "gravar" um ISO em uma partição antes, portanto pode ser ... interessante.
quack quixote

Ofc Eu posso inicializá-lo dentro do VMware (e já o fiz), mas isso não me ajuda muito porque é o Windows e quando eu o instalo através do VMware no meu disco, ele não inicializa mais tarde (Windows estúpido ...).
Albert

Você pode me dar uma sugestão de qual opção devo tentar primeiro, por exemplo, Grub1, Grub2 ou Grub4DOS? Posso apenas instalar o que for necessário, que realmente não será o problema.
Albert

@ Albert: você está perguntando em referência à sua pergunta anterior? acredito que sua melhor aposta é usar o método de extração; o instalador do Windows é um desses ISOs que apresentam problemas quando não são inicializados a partir do hardware. você pode tentar o memtest, mas eu não sei muito sobre isso. você provavelmente deseja obter uma unidade flash e usá-la; consulte superuser.com/questions/66948/… ou superuser.com/questions/62193/install-win7-from-usb
quack quixote

11
@quackquixote, com relação às palavras em negrito "O que o sistema operacional carregado faria? Ele provavelmente procurará um CD-ROM, que não encontrará e falhará" , por que o sistema operacional precisa procurar um CD-ROM? Já é um arquivo iso perfeito e tudo o que é necessário para carregar o sistema operacional já está dentro do arquivo iso, então por que ele não pode pular a procura de CDROMs?
precisa saber é o seguinte

1

Você pode usar o dd do terminal para gravar um arquivo iso em uma partição. Apenas tome cuidado, se você usar dd errado, poderá limpar tudo. Deve ser algo como isto: dd if = Desktop / LinuxCDFile.iso de = / Path / To / Partition


Mas a partição precisa ser Primária para ser inicializada pelo Windows Loader.
Firelord 23/03

Isso funciona apenas ocasionalmente, geralmente o resultado não é inicializável.
David Tonhofer

11
@ Firelord: Bem, não use o Windows Loader. Use o Grub. Sim, ele também inicializa o Windows, se você realmente precisar.
Evi1M4chine
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.