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!