Mój służbowy laptop (HP Pavilion G6) musiał powędrować do serwisu, więc admin przełożył dysk i pamięć z mojego komputera do identycznego modelu. Na chłopski rozum wszystko powinno ruszyć bez problemu, ale niestety po takiej operacji komputer przywitał mnie komunikatem „Hard Disk – (3F0) BootDevice not found”. Oczywiście opcje UEFI były identycznie ustawione w obydwu komputerach.
Z problemem biedziłem się kilka godzin, zastanawiałem się czy to problem z szyfrowaniem dysku (LUKS), flagą boot partycji, a może identyfikatorami partycji. Problem musiał być trywialny, bo po uruchomieniu systemu z LiveCD partycje można było podmontować, a dane były na miejscu. Na wszelkie wypadek dodam, że ponowna instalacja GRUB-a nie pomogła.
Odkryłem, że jeśli wystartuję komputer z LiveCD, ale zamiast uruchamiać Linuksa wyjdę z menu GRUB-a (Escape, a potem exit) to komputer pokazuje menu UEFI, z którego mogę wybrać urządzenie i plik uruchomieniowy. Na moim dysku komputer widział plik EFI/debian/grubx64.efi
, po wybraniu którego system startował normalnie.
Z pomocą kolegi trafiłem na trop programu efibootmgr
, który służy do edycji menu uruchomieniowego UEFI. Po kilku próbach doszedłem do polecenia, które postawiło mój system na nogi:
efibootmgr --create --label "Debian" --loader \\EFI\\debian\\grubx64.efi
Powyższe polecenia zakłada, że partycja EFI jest na /dev/sda
i jest podmontowana jako /boot/efi
. Jeżeli jest inaczej należy je wskazać odpowiednio przez --disk
i --part
. Użycie backslashy w parametrze --loader
jest istotne.
Efekt działania można sprawdzić poleceniem efibootmgr --verbose
. U mnie wygląda to tak:
BootCurrent: 0001 Timeout: 0 seconds BootOrder: 3001,2001,2002,2003 Boot0001* Debian HD(1,800,f3800,b865a07b-fdff-428d-9443-9fb85820b4f6)File(\EFI\debian\grubx64.efi) Boot2001* USB Drive (UEFI) RC Boot2002* Internal CD/DVD ROM Drive (UEFI) RC Boot3001* Internal Hard Disk RC