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


12

Eu tenho um monte de arquivos ISO ao vivo, como GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32 bits , ... baixados dentro /opte na minha antiga máquina BIOS, eu costumava adicioná-los ao menu grub e inicializá-los . :-)

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

Quais são as etapas para inicializar esses arquivos ISO a partir do grub?

Estou cansado de "queimar" esses dispositivos em um pendrive o tempo todo, pois nunca consigo encontrar o pendrive de que preciso enquanto o meu computador é muito mais difícil de perder no caos total ao meu redor ... ) :-(


1
Eu fui por esse caminho um tempo atrás e é incrível.
Organic Marble

1
Eu gosto de usar uma partição separada, uma em cada unidade, para facilitar a instalação em outra unidade ou a instalação completa em unidades flash. help.ubuntu.com/community/Grub2/ISOBoot Exemplos: help.ubuntu.com/community/Grub2/ISOBoot/Examples Acho que a obtenção do caminho correto é anterior à montagem das partições e a obtenção de parâmetros detalhados de inicialização como os dois principais problemas para obter para funcionar. O caminho pode até mudar se a unidade flash estiver conectada. E analisar a ISO para ver sua estrofe e caminho de inicialização pode ajudá-lo a descobrir detalhes.
oldfred

1
Eu usei esse método 'grub-n-iso' muito antes e funciona bem :-) mas agora testo arquivos iso em um computador separado para testes e clono a partir dos arquivos iso para acelerar pendrives USB3 ou criar live persistente Pendrives USB com mkusb . (I armazenar meus pendrives USB em uma pequena caixa de plástico.)
sudodus

O VBox executa arquivos ISO OK, use o estado de salvar máquina ao sair, o MultiBootUSB tem uma opção para arrastar e soltar a inicialização ISO e o QEMU com o Virtual Machine manager executará rapidamente um iso.
CSCameron 17/04/19

1
Por enquanto, use apenas o grub2 2.02 para montar ISO em loop. Grub2 2.04 fornece erro de falta de memória. bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 O Ubuntu 18.04 ainda possui o grub 2.02.
oldfred

Respostas:


14

Há um erro no grub 2.04, portanto, verifique se você possui uma versão anterior ou posterior.

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

menuentry "GParted Live ISO" {
}

Agora vamos adicionar uma variável que contém o diretório em que armazenamos o ISO (até agora, tudo bem: 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 /optpara armazená-los, pois não gosto de criar diretórios na raiz da minha máquina e de acordo com a Hierarquia do sistema de arquivos do Linux , onde é onde o software opcional deve residir.

Antes de adicionar a loopbackvariável, precisamos descobrir em qual disco rígido o arquivo é armazenado, por isso fazemos um: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1ea saída na minha máquina é: /dev/sdb2.

No entanto GRUB usa ( hdX,Y) notação e este é o lugar onde a diferença entre as máquinas UEFI BIOS e entra! Então agora reiniciar a máquina, ir para o menu grub e pressione C: Isto irá levá-lo ao comando grub tempo com comandos diferentes do que você está acostumado , mas o único que você precisa é: ls.

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

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

Hã? 4 unidades? Eu só tenho 3! E não está (hd1,4)alinhado no BIOS, mas (hd1,gpt3)no UEFI e (hd0)não possui partições!

Bem, aparentemente quando parte da NVRAM é usada como armazenamento e aparece quando (hd0) você precisa começar a numerar suas unidades como 1!   Enquanto todas as informações encontradas na inicialização de arquivos ISO dizem que é necessário começar a numerar de 0 (em máquinas BIOS, isso sempre é verdade , isso não é necessariamente o caso em algumas máquinas UEFI !)

Portanto, o valor para loopbacktorna-se (hd2,gpt2)$GPartedISOFilecomo 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 as máquinas BIOS linuxe initrdnas chamadas são chamadas linuxefie linuxefinas 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
}

Então agora salve esse arquivo e atualize o grub com:

update-grub

Depois de tudo isso, reinicie, entre no menu grub , escolha GParted Live ISOe agora você pode facilmente inicializar seu ISO sem precisar procurar um pen drive novamente!

:-)

Exemplo do CloneZilla Live (para esta pergunta )

menuentry "CloneZilla ISO" {
  set ISOFile="/opt/Live-ISOs/clonezilla-live-20170905-zesty-amd64.iso"
  loopback loop (hd2,gpt2)$ISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$ISOFile ip=frommedia toram=filesystem.squashfs union=overlay
  initrdefi (loop)/live/initrd.img
}

Você já configurou o Clonezilla? É um pouco diferente, posso postar isso, se você ainda não descobriu.
Organic Marble

1
Vou postar uma outra resposta para todos os que eu estarei adicionando amanhã para o "gimme o codez" tipo de pessoas ... @OrganicMarble
Fabby

+1, mas provavelmente é seguro descartar a 2partir update-grub2desses dias.
WinEunuuchs2Unix 18/04/19

@ WinEunuuchs2Unix Está na minha história ... Eu apenas digito upd↑e depois copio e colo. Obrigado pelo lembrete Atualizado!
Fabby

6

Uma alternativa é apenas adicionar um arquivo de configuração ao 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
} 

Faço isso como quando atualizo uma ISO, sempre esqueço de executar sudo update-grub. As entradas acima nunca precisam ser alteradas e eu posso 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 a Nvidia adiciono o parâmetro nomodeset boot. Mas muitas vezes ainda é necessário desmontar o / isodevice.

Não é possível desmontar o isodevice desmontar a ISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216

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
}

Eu gosto da reinicialização e da parada! :-) +1 Por que você adiciona o insmod? Você também pode me
enviar um

inmod provavelmente não é necessário. Com o grub2, alguns recursos foram incorporados e outros foram adicionados (o insmod). Provavelmente, no começo, eu precisava do gmod insmod, pois comecei a usar o gpt em 2010 ou antes que o pc fosse UEFI e o grub2 fosse novo e apenas para o BIOS / MBR, embora fosse inicializado a partir do gpt com o BIOS.
oldfred

Obrigado pela resposta. Não seria melhor remover essas linhas da resposta então?
Fabby

1
Deixe-me editar minha própria estrofe e ver se 18.04 é inicializado. Eu espero que sim. Eu também queria atualizar minha entrada de inicialização ISO do gparted, que agora é muito antiga, por isso voltarei daqui a pouco.
oldfred

1
Inicializado ok. Eu esqueci que tinha minha unidade flash 18.04 conectada e ela se tornou hd0 no meu sistema; portanto, ao inicializar, tenho que editar manualmente a entrada de um hdX para ter a unidade correta. Minha inicialização .25 do gparted não funcionou apenas mudando para .30. Eu tive que olhar para ISO e ver seu grub.cfg e usar esses parâmetros e comandos de loop do grub, e então funcionou.
oldfred

5

mkusb MULTIBOOT HACK

O Mkusb é uma excelente base para projetos de unidades de inicialização personalizadas devido às suas habilidades com o BIOS e o UEFI.

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

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

padrões do mkusb

Use os padrões mkusb ao criar a unidade USB persistente.

mkusb usar padrões novamente

Use os padrões de persistência mkusb em caso de dúvida, o tamanho da partição pode ser ajustado posteriormente, mas leva tempo.

Console DUS

O console do DUS após a instalação.

GParted Antes

GPartado antes da modificação da partição.

Gparted after

Separado após modificação - Substitua sdb4, a partição ISO9660 OS e sdb5, a partição ext2 casper-rw, com uma partição FAT32 para arquivos de persistência.

Partição de persistência

Partição de persistência - Crie uma pasta de nome exclusivo para cada sistema operacional (que requer persistência)

Pasta de persistência

Pasta de persistência - Adicione um arquivo casper-rw e um arquivo home-rw opcional a cada pasta de persistência. Um arquivo home-rw pode ser criado renomeando um arquivo casper-rw. Um arquivo home-rw é como uma partição home separada em uma instalação completa; pode ser reutilizado após a atualização da versão.

Pasta ISO

Crie uma pasta para os arquivos ISO na partição usbdata do NTFS.

Conteúdo da pasta ISO

Adicione alguns ISOs à pasta ISO.

Localização do GRUB

localização do grub.cfg

grub.cfg

Edite grub.cfg para montar em loop os arquivos ISO. Inclua: persistent persistent-path=/<persistent-folder-name>/se você quiser persistência.

EDIT 18.04+ No grub, especifique vmlinuz não vmlinuz.efi e initrd não initrd não initid.lz

O sudo partiu -ls / dev / sdb

O sudo partiu -ls / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Se um instalador do Windows for necessário, é possivelmente mais fácil começar com a função mkusb "extraindo o instalador do Windows" (eu tive que extrair o ISO do Windows para o TAR manualmente),

Instalador do Windows

Após a instalação, crie uma pasta para ISOs e, se necessário, pastas para persistência (semelhante ao procedimento acima).

mkusb Windows grub

Edite /boot/grub/grub.cfg para montar em loop qualquer ISO e especificar qualquer pasta de persistência.

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

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


E como você as recupera no HDD / SDD ??? A questão agora é querer que eles estejam em um pendrive ou perdi alguma coisa?
Fabby

1
@ Fabby, isto não é apenas para pen drives. Se você tiver uma nova unidade SATA, poderá iniciar como descrito nesta resposta e permitir que o mkusb instale seu sistema de inicialização robusto, que funciona nos modos UEFI e BIOS. Esta unidade SATA pode ser instalada internamente ou conectada externamente via USB ou eSATA. É possível adicionar 'sistemas instalados convencionalmente' e novos arquivos iso para serem inicializados via 'grub-n-iso'.
sudodus

OK, ainda não entendi: quero essas ISOs /opt/. Como faço isso? (+1 nesse meio tempo para o esforço embora ...)
Fabby

1
@Fabby: Acho que, em vez de criar uma nova pasta para os ISOs, como mostrado acima, aponte para a localização do ISO em / opt /, em grub.cfg, o grub em um pendrive pode inicializar um ISO no disco rígido. Vou tentar.
CSCameron 19/04/19

@Fabby: Se os ISO estiverem em / opt / da unidade interna, a mesma entrada de menu que você está usando na unidade interna funcionará na unidade externa. Pode haver vantagens em inicializar o grub em um pendrive, como não sobrecarregar ou corromper o menu interno do grub.
CSCameron

3

Três etapas fáceis

para adicionar ISO ao menu grub e inicializá-lo.

Primeiro, instale grml-rescueboot

Abra um terminal e digite:

sudo apt install grml-rescueboot

Segundo, 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 as segunda e terceira etapas, conforme necessário

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

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

Espero que isto ajude


/booté o pior lugar para colocá-los. Desculpe, olhou para o grml, deveria ter mencionado isso. +1 por esforço
Fabby

Obrigado @Fabby pelo +1! Esta pode não ser a melhor maneira de fazê-lo, mas esta parece ser a mais fácil, IMHO.
user68186

1
É por isso que +1: boa resposta para usuários não técnicos.
Fabby

2

MultiBootUSB - QEMU

Se você deseja inicializar arquivos ISO com o mínimo de problemas e não precisa de 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 clique no botão Boot ISO.

Você não precisa editar o grub.cfg ou mesmo sair.

MultiBootUSB-QEMU


Bacana! Vou tentar isso mais tarde!
Fabby

@ Fabby: Existe uma versão para Windows do MBUSB e uma versão para Linux. Não consegui obter a versão do Windows para inicializar ISOs, apenas USBs. A versão 9.2.0 do Linux funciona muito bem para mim.
CSCameron

2

SIMPLE mkusb ISO multibooter

Se você não precisa de persistência múltipla, é fácil inicializar ISOs de sistema operacional em uma unidade flash mkusb.

Use mkusb para criar uma unidade USB persistente usando um sistema operacional padrão de sua escolha, https://help.ubuntu.com/community/mkusb

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

Adicione os ISOs a serem inicializados nesta pasta.

Adicione entradas de menu a /sdx3/boot/grub/grub.cfg para montar as ISOs em loop.

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
}
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.