grub: boot da ISO

39

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á testado).

    
por Albert 18.06.2010 / 16:25

2 respostas

51

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

GRUB can read ISO9660 (”iso”) images. It can for example load the first few sectors and boot it. But most people do not realize is “what then?”. What would the loaded operating system do? It will most likely look for a CDROM, which it won’t find, and fail.

Assim, a maneira mais simples e simples de inicializar a partir de algum 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 deve funcionar, porque para a VM, não é um arquivo ISO - é um CD real em hardware de CD real.

A inicialização a partir 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 ele foi configurado para inicializar. É por isso que a maioria das ferramentas USB de inicialização (Unetbootin, WinToFlash, etc) geralmente extrai o conteúdo ISO para a unidade - porque dessa forma elas podem ser acessadas diretamente, sem confundir o sistema operacional. inicializado.

Grub 1

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

Uma observação no Grub com reiserfs (não confirmado) indica que você "precisa montar sua partição com notail para funcionar ".

Memdisk é uma opção; veja abaixo.

Grub4DOS

O Grub4DOS oferece alguma "emulação de CD" experimental que funciona com alguns ISOs. Infelizmente, o Grub4DOS só lê os sistemas de arquivos FAT32 / NTFS. Faça o download do Grub4DOS.

Aqui está uma entrada de exemplo ( source ):

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 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 menu como MultiBootISOs.exe do PenDriveLinux . Coloque 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 algumas entradas de exemplo do Grub2. chainloader não funciona para inicializar um ISO no momento, então essas entradas devem (1) usar loopback para "montar" o ISO, e (2) adicionar algo como < em> iso-scan ou findiso para a 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 do 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 ele normalmente inicializa.

Entradas de exemplo ( source ):

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ê estiver 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
}
    
por 18.06.2010 / 20:30
1

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

    
por 03.09.2014 / 15:55