Un volta generata l'applicazione EFI (anzi... Andrebbe probabilmente fatto prima se si vuole generare un'applicazione portable) è necessario provvedere al file di configurazione di GRUB2.
Il vecchio "menu.lst" non esiste più ed è stato sostituito dal file "grub.cfg" che però non dovrebbe venire mai editato a mano. Il file è generato dal comando:
codice HTML:
# grub-mkconfig -o </destinazione/del/file/grub.cfg>
che legge quando indicato nel file /etc/default/grub e negli script contenuti nel percorso "/etc/grub.d/".
Il file /etc/default/grub contiene le impostazioni generali e più a basso livello di grub, tramite invece gli script contenuti in /etc/grub.d vengono generate le voci del menù. Normalmente, gli script 00_header, 10_linux,20_linux_xen, 20_memtest86+ ed 30_os-prober sono riservati al sistema. Le voci personalizzate per gli utenti dovrebbero essere inserite nel file "40_custom" in modo che vengano elaborate dal sistema.
Questo è il mio:
codice:
#!/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 "Microsoft Windows7 x86_64 UEFI-GPT" {
insmod part_gpt
insmod fat
insmod search_fs_uuid
insmod chain
search --fs-uuid --no-floppy --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 B6BC-F8EA
chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
menuentry "Riavvia il computer." {
reboot
}
menuentry "Spegni il computer." {
halt
}
menuentry "Esci ed avvia dispositivo successivo nella catena di boot." {
exit
}
Mentre le ultime 3 sono descrittive, la prima serve per avviare da grub l'applicazione EFI "bootmgfw.efi" nel percorso "/efi/Microsoft/Boot/" residente su un'altra unità e che è ovviamente, l'applicazione EFI Microsoft per avviare una installazione di Windows 7 in modalità UEFI/GPT, sempre ottenuta seguendo le istruzioni dell'ottimo wiki di Arch.
Richiede però qualche complicazione in più del normale chainload per l'avvio di un sistema mbr: Mentre la sezione iniziale e l'ultima riga sono standard, la riga "search" necessita dei riferimenti alla partizione in cui risiede il file "bootmgfw.efi".
Perchè il comando funzioni è necessario che la partizione sia montata da qualche parte e l'argomento da passare a "--target=fs_uuid" deve essere adeguato di conseguenza.
Il file "bootmgfw.efi" si trova nel percorso "/EFI/Microsoft/Boot" relativo alla radice della partizione EFI di Windows (nel mio caso è /dev/sdb1, ho fatto due installazioni separate, altrimenti potrebbe essere la stessa di grub).
Monto quindi la partizione EFI di Windows da qualche parte:
codice:
mount /dev/sdb1 Desktop/EFI-win7/
e ne ottengo l'UUID con il seguente comando (nel mio caso il risultato è "B6BC-F8EA"):
codice:
grub-probe --target=fs_uuid Desktop/EFI-win7/EFI/Microsoft/Boot/bootmgfw.efi
Preciso che si potrebbe ottenere lo stesso identico risultato aprendo gparted o un altro qualunque editor di partizioni e leggendo l'uuid dal menù "Informazioni" che si trova facendo click col tasto destro sulla partizione interessata...
Il comando successivo, serve ad ottenere i riferimenti alla partizione in un formato che sia comprensibile e grub e UEFI (Su questo punto il wiki contiene un errore: sembra che sia un unico comando e non comando e risultato, probabilmente hanno scordato un fine linea):
codice:
grub-probe --target=hints_string
Nel mio caso il comando completo è
codice:
grub-probe --target=hints_string Desktop/EFI-win7/EFI/Microsoft/Boot/bootmgfw.efi
e da come risultato:
codice:
--hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1
L'unione di questi due risultati restituisce quello che dobbiamo inserire nella riga search:
codice:
search --fs-uuid --no-floppy --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 B6BC-F8EA
Infine, per avviare un semplice sistema mbr la sezione da aggiungere è sempre la stessa del vecchio grub. Non l'ho mai usata ma dovrebbe essere una cosa del genere:
codice:
# (2) Windows XP
menuentry "Windows XP" {
set root=(hd0,1)
drivemap -s hd0 hd2
chainloader (hd0,1)+1
}
Il caso di cui sopra presume che Windows sia installato nel disco hd2 in notazione grub (dovrebbe essere /dev/sdc). Da notare la riga "drivemap -s hd0 hd2": Questa opzione permette a Windows di credere di essere installato nel primo drive.
Ripeto, questo non l'ho mai provato.
Ovviamente, dopo ogni modifica è necessario rilanciare il comando
codice HTML:
grub-mkconfig -o </destinazione/del/file/grub.cfg>
per vedere applicati effettivamente i cambiamenti.
[EDIT:]
Come non detto.
A seguito di ulteriori verifiche, ho potuto appurare che GRUB avviato in modalità UEFI non può fare il chainload di un sistema MBR. L'unico modo che ho trovato per avviare un sistema operativo MBR, in questo caso, è uscire da grub col comando "exit" ed impostare il sistema MBR come il dispositivo di avvio successivo nel firmware della mobo.
Nel caso fosse necessario un bootloader complesso, ad esempio per avviare più sistemi operativi, si può installare un bootloader nel MBR del dispositivo successivo ed, eventualmente, usare quello dopo essere usciti da Grub.
Inoltre, il seguente metodo è più rapido per completare la stringa "search". Sapendo qual'è il disco su cui si trova il bootloader che si vuole avviare (in questo caso, /dev/sdb) si può usare il seguente comando per ottenere l'UUID:
codice:
[root@arch-uefi boot]# blkid | grep "EFI system partition" | grep /dev/sdb
/dev/sdb1: UUID="0E8D-E06E" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="b63ce59d-b729-4dcd-8014-a74a8383c18d"
e basta questo comando per ottenere la "hints_string":
codice:
[root@arch-uefi boot]# grub-probe -d --target=hints_string /dev/sdb1
--hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1