Como inicializo um arquivo ISO da minha unidade usando o grub2 em máquinas UEFI?

10

Eu tenho um monte de arquivos ISO ao vivo, como GParted , CloneZilla , Reparo de inicialização , Ubuntu 14.04 32 bit , ... baixado em /opt e na minha velha máquina BIOS, eu costumava ser capaz de apenas adicioná-los ao menu grub e inicializá-los. : -)

Agora tenho uma máquina UEFI e todas as informações que posso encontrar são para máquinas BIOS.

Quais são os passos para inicializar estes arquivos ISO a partir do grub?

Eu estou cansado e cansado de "queimar" isso em um pendrive o tempo todo, já que eu nunca consigo encontrar o bastão que preciso, enquanto meu próprio computador é muito mais difícil de perder o caos total em torno de mim aqui ...) : - (

    
por Fabby 17.04.2018 / 01:50

6 respostas

11

Bem, o básico para adicionar um arquivo ISO ao grub é o mesmo para uma UEFI e para uma máquina BIOS: edite /etc/grub.d/40_custom e adicione um item menuentry (o GParted é usado neste exemplo) na parte inferior da arquivo:

menuentry "GParted Live ISO" {
}

Agora vamos adicionar uma variável contendo o diretório onde armazenamos o ISO (até agora, tão bom: sem diferenças com as máquinas BIOS):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
}

Estou usando /opt para armazená-los, pois não gosto de criar diretórios na raiz da minha máquina e de acordo com o Hierarquia do sistema de arquivos Linux é onde o software opcional deve residir de qualquer maneira.

Antes de adicionarmos a variável loopback , precisamos descobrir em qual disco rígido o arquivo está armazenado, então fazemos um: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1 e a saída em minha máquina é: /dev/sdb2 .

No entanto, o grub usa a notação (hdX, Y) e é aí que entra a diferença entre as máquinas UEFI e BIOS! Então agora reinicie sua máquina, vá para o menu grub e pressione C : Isso o levará ao prompt de comando do grub com comandos diferentes dos que você está acostumado, mas o único que precisamos que você já saiba: ls .

Na minha máquina, a saída é:

(hd0) (hd1) (hd1,gpt4) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...

Huh? 4 drives? Eu só tenho 3! E não é (hd1,4) linha em um BIOS, mas (hd1,gpt4) em UEFI e (hd0) não tem nenhuma partição!

Bem, aparentemente, quando parte da NVRAM é usada como armazenamento e aparece como (hd0) você precisa começar a numerar suas unidades em 1! Considerando que todas as informações que você encontra ao inicializar arquivos ISO você tem que começar a numeração de 0 (em máquinas BIOS isto é sempre verdadeiro , isto não é necessariamente o caso em algumas máquinas UEFI !)

Portanto, o valor para loopback se torna (hd2,gpt2)$GPartedISOFile , pois o arquivo ISO na minha máquina era /dev/sdb2 (segunda unidade hd2 , segunda partição gpt2 ):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
}

Outra diferença é que linux e initrd nas máquinas BIOS são chamadas linuxefi e linuxefi nas máquinas UEFI, o que nos dá o resultado final:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$GPartedISOFile ip=frommedia toram=filesystem.squashfs union=overlay username=user
  initrdefi (loop)/live/initrd.img
}

Agora salve o arquivo e atualize o grub com:

update-grub

reinicialize, entre no menu grub , escolha GParted Live ISO e agora você pode inicializar facilmente seu ISO sem ter que procurar por um pendrive novamente!

: -)

    
por Fabby 17.04.2018 / 01:50
5

Uma alternativa é simplesmente adicionar um arquivo de configuração para 40_custom assim:

menuentry 'Live ISOs on SSD' {
configfile (hd0,3)/ISO/livecdimage.cfg
} 

menuentry 'Live ISOs on HDD (boot on SSD)' {
configfile (hd1,3)/ISO/livecdimage.cfg
} 

Eu faço isso como quando eu atualizo um ISO, eu invariavelmente me esqueço de executar o sudo update-grub. As entradas acima nunca têm que mudar e eu posso apenas editar o livecdimage.cfg que tem o mesmo formato que qualquer 40_custom mas sem linhas de cabeçalho, e está na minha pasta / ISO na minha partição ISO.

Eu adiciono o toram como outro parâmetro de inicialização e no sistema com o parâmetro de inicialização nVidia add nomodeset. Mas ainda assim muitas vezes tem que desmontar o isodispositivo.

Incapaz de desmontar o isodispositivo desmontar o ISO link

sudo umount -l -r -f /isodevice

E isso faz parte do meu arquivo livecdimage.cfg

# livecdimage.cfg
# Add this to 40_custom to load this file:
# menuentry 'Live ISOs' {
# configfile (hd1,3)/iso/livecdimage.cfg
#} 
# Add iso names to livecdimage.cfg
#for i in 'ls *.iso';do echo "# "$i>>livecdimage.cfg; done;

menuentry "Ubuntu 16.04.4 xenial amd64" {
    set isofile="/ISO/ubuntu-16.04.4-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

menuentry "Ubuntu 18.04 Bionic amd64" {
    set isofile="/ISO/bionic-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

# spacer line
menuentry " " {
set root= 
}

menuentry "Reboot" {
    reboot
}

menuentry "Halt" {
    halt
}
    
por oldfred 17.04.2018 / 05:55
3

Três etapas fáceis

para adicionar ISO ao menu grub e inicializar a partir dele.

Primeiro, instale grml-rescueboot

Abra um terminal e digite:

sudo apt install grml-rescueboot

Em segundo lugar, mova os arquivos iso para /boot/grml/

No mesmo terminal, digite:

sudo mv ~/Downloads/<filename.iso> /boot/grml/

Terceiro, atualize o grub

No mesmo terminal, digite:

sudo update-grub

Repita o segundo e terceiro passos quando necessário

Não se esqueça de excluir arquivos ISO obsoletos de /boot/grml .

Referência: Ajuda do Ubuntu na inicialização ISO do Grub2

Espero que isso ajude

    
por user68186 18.04.2018 / 19:06
3

mkusb MULTIBOOT HACK

O Mkusb é uma ótima base para projetos de drives de inicialização personalizados devido às suas capacidades com BIOS e UEFI.

Esse hack inicializa vários arquivos ISO, incluindo o instalador do Windows, e possui um menu grub2.

As entradas do menu do Grub2 para a maioria dos SO estão disponíveis usando a Pesquisa do Google e estão além do escopo desta resposta.

UseospadrõesmkusbaocriaraunidadeUSBpersistente.

Useospadrõesdepersistênciadomkusbemcasodedúvida,otamanhodapartiçãopodeserajustadoposteriormente,maslevatempo.

OconsoleDUSapósainstalação.

GPartedantesdamodificaçãodapartição.

Gpartedapósamodificação-Sobrescrevasdb4,apartiçãodosistemaoperacionalISO9660esdb5,apartiçãoext2casper-rw,comumapartiçãoFAT32paraarquivosdepersistência.

Partiçãodepersistência-CrieumapastadenomesexclusivaparacadaSO(querequerpersistência)

Pastadepersistência-Adicioneumarquivocasper-rweumarquivohome-rwopcionalacadapastadepersistência.Umarquivohome-rwpodesercriadorenomeandoumarquivocasper-rw.Umarquivohome-rwécomoumapartiçãohomeseparadaemumainstalaçãocompleta,elepodeserreutilizadoapósatualizaçõesdeversão.

CrieumapastaparaosarquivosISOnapartiçãousbdatadoNTFS.

AdicionealgunsISOsàpastaISO.

localizaçãodogrub.cfg

Editeogrub.cfgparamontarosarquivosISOemloop.Inclua:persistentpersistent-path=/<persistent-folder-name>/sevocêquiserpersistência.

sudoparted-ls/dev/sdb

sudolsblk-f/dev/sdb

SefornecessáriouminstaladordoWindows,émaisfácilcomeçarcomafunção"extrair o instalador do Windows" do mkusb, (eu tive que extrair o ISO do Windows para o TAR manualmente),

Apósainstalação,crieumapastaparaISOe,senecessário,pastasparapersistência(semelhanteaoprocedimentoacima).

Edite o /boot/grub/grub.cfg para fazer o loop de todos os ISOs e especifique quaisquer pastas de persistência.

(não encontrou uma maneira de montar um arquivo ISO do Windows).

Se o acima for usado como um pendrive USB, ele pode ser usado para inicializar ISOs armazenados em um único computador com Windows. O Grub não é necessário na unidade interna.

    
por C.S.Cameron 17.04.2018 / 18:02
2

MultiBootUSB - QEMU

Se você deseja inicializar arquivos ISO com o mínimo de trabalho e não precisa persistência, o MultiBootUSB inclui uma opção QEMU:

  • Inicie o MultiBootUSB e selecione a guia Boot ISO / USB.

  • Arraste e solte o ISO no espaço Selecionar imagem.

  • Selecione o tamanho da RAM e aperte o botão Boot ISO.

Você não precisa editar o grub.cfg nem sair.

    
por C.S.Cameron 19.04.2018 / 03:23
1

Multibooter ISO mkusb SIMPLES

Se você não precisa de multi-persistência, é fácil fazer a inicialização múltipla do ISO do sistema operacional em uma unidade flash mkusb.

Use o mkusb para fazer uma unidade USB persistente usando um sistema operacional padrão de sua escolha, link

Crie uma pasta na partição usbdata sdx1, denominada ISOs.

Adicione os ISOs para serem inicializados nesta pasta.

Adicione o menuentries ao /sdx3/boot/grub/grub.cfg para fazer o loop de montagem do ISO.

Amostras:

menuentry "Ubuntu-18.04 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/ubuntu-18.04-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile splash --
        initrd (loop)/casper/initrd.lz
}

menuentry "GParted 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/gparted-live-0.31.0-1-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live union=overlay username=user config components noswap noeject toram=filesystem.squashfs ip='' nosplash findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}

menuentry "Clonezilla 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/clonezilla-live-2.5.5-38-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live live-config nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\"   ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"\" vga=788   ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}
    
por C.S.Cameron 07.07.2018 / 19:58