Repararea și reinstalarea GRUB
GRUB este bootloader-ul folosit de majoritatea distribuțiilor Linux și este primul program care pornește după firmware-ul plăcii de bază (BIOS sau UEFI). Dacă GRUB a fost șters, dezinstalat din greșeală, suprascris de Windows după o actualizare sau dacă fișierele lui s-au corupt după o oprire bruscă, sistemul nu mai pornește, chiar dacă toate datele tale sunt încă pe disc. Vestea bună este că reparația durează de obicei câteva minute și nu implică reinstalarea sistemului.
Simptome tipice:
- apare promptul
grub rescue>saugrub>în loc de meniu; - mesaje de tipul
error: unknown filesystem,error: no such partitionsaufile '/boot/grub/i386-pc/normal.mod' not found; - calculatorul pornește direct în Windows sau afișează
No bootable device; - intrarea Linux a dispărut din meniul de boot al firmware-ului UEFI.
Ce ai nevoie
- un stick USB live cu o distribuție Linux (ideal aceeași distribuție și aceeași versiune ca sistemul instalat, dar orice live modern funcționează pentru montare și chroot);
- conexiune la internet în sesiunea live, dacă trebuie reinstalate pachetele GRUB;
- să știi dacă sistemul a fost instalat în mod BIOS (Legacy/CSM) sau UEFI.
grub-install va eșua cu mesajul EFI variables are not supported on this system. Din meniul de boot al plăcii de bază alege intrarea cu prefixul UEFI: pentru stick.
Pasul 1: verifică modul de boot
În sesiunea live, deschide un terminal și rulează:
[ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS"
Dacă sistemul instalat are o partiție mică (100 - 1000 MB) formatată FAT32 cu flag-ul esp sau boot, atunci este instalat în mod UEFI. Dacă discul are tabelă MBR (dos) și nu există o astfel de partiție, este aproape sigur BIOS.
Pasul 2: identifică partițiile
lsblk -f sudo fdisk -l
Notează:
- partiția root (
/) a sistemului instalat, de exemplu/dev/sda2sau/dev/nvme0n1p2; - partiția EFI (doar UEFI), de obicei FAT32, de exemplu
/dev/sda1sau/dev/nvme0n1p1; - partiția /boot separată, dacă există;
- discul în sine (fără număr de partiție), de exemplu
/dev/sdasau/dev/nvme0n1. Pe BIOS, GRUB se instalează pe disc, nu pe partiție.
În exemplele de mai jos vom folosi:
/dev/sdXpentru disc;/dev/sdX2pentru root;/dev/sdX1pentru partiția EFI.
Înlocuiește-le cu valorile tale. Pe discurile NVMe partițiile se numesc /dev/nvme0n1p1, /dev/nvme0n1p2 etc.
Cazuri speciale: criptare, LVM, Btrfs
Partiție criptată cu LUKS - deblochează-o înainte de montare:
sudo cryptsetup open /dev/sdX2 cryptroot
Partiția root devine /dev/mapper/cryptroot (sau un volum LVM din interiorul ei).
LVM - activează grupurile de volume și listează-le:
sudo vgchange -ay sudo lvs
Root-ul va fi ceva de genul /dev/mapper/vg-root sau /dev/fedora/root.
Btrfs - multe distribuții țin sistemul într-un subvolum, nu în rădăcina partiției. Verifică subvolumele:
sudo mount /dev/sdX2 /mnt sudo btrfs subvolume list /mnt sudo umount /mnt
Denumiri uzuale ale subvolumului root:
| Distribuție | Subvolum root | Opțiune de montare |
|---|---|---|
| Fedora | root | -o subvol=root |
| Ubuntu, Mint, Debian (instalare Btrfs) | @ | -o subvol=@ |
| Arch, EndeavourOS, Manjaro | @ (de obicei) | -o subvol=@ |
| openSUSE | subvolumul implicit (snapshot) | fără opțiune, montare simplă |
Pasul 3: montare și chroot
Montează sistemul instalat în /mnt și intră în el cu chroot, astfel încât comenzile să ruleze ca și cum ar fi pornit sistemul tău, nu live-ul.
# root (adaugă -o subvol=... pentru Btrfs, vezi tabelul de mai sus) sudo mount /dev/sdX2 /mnt # doar dacă ai /boot pe partiție separată sudo mount /dev/sdX3 /mnt/boot # doar UEFI: partiția EFI sudo mount /dev/sdX1 /mnt/boot/efi # sistemele de fișiere virtuale for d in dev proc sys run; do sudo mount --rbind /$d /mnt/$d; done sudo chroot /mnt /bin/bash
/mnt/etc/fstab înainte de chroot. Pe Debian, Ubuntu, Fedora și openSUSE este de obicei /boot/efi, iar pe Arch poate fi /boot, /efi sau /boot/efi, în funcție de cum a fost făcută instalarea.
mount -a pentru a monta automat tot ce este definit în /etc/fstab (partiția EFI, /boot, subvolumele Btrfs). Pe openSUSE acest pas este practic obligatoriu, pentru că o parte din /boot/grub2 se află în subvolume separate.
Verifică dacă ai internet în chroot:
ping -c 3 kernel.org
Dacă nu merge rezolvarea numelor, ieși din chroot (exit), copiază configurația DNS a live-ului și intră din nou:
sudo cp --remove-destination /etc/resolv.conf /mnt/etc/resolv.conf sudo chroot /mnt /bin/bash
arch-chroot și manjaro-chroot fac totul automat.
Pasul 4: reinstalarea GRUB
Alege distribuția ta. Toate comenzile se rulează în interiorul chroot-ului, ca root.
Pe Debian, Ubuntu, Linux Mint, Zorin OS, elementary OS și alte derivate, comenzile sunt grub-install și update-grub.
UEFI
apt update apt install --reinstall grub-efi-amd64 grub-efi-amd64-signed shim-signed grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu update-grub
Pentru –bootloader-id folosește ubuntu pe Ubuntu și Mint (Mint folosește tot ubuntu implicit) și debian pe Debian. Numele este doar eticheta din meniul firmware-ului și directorul din /boot/efi/EFI/.
BIOS (Legacy)
apt update apt install --reinstall grub-pc grub-install --target=i386-pc /dev/sdX update-grub
Ca să reții permanent discul pe care se instalează GRUB la actualizări, rulează și:
dpkg-reconfigure grub-pc
și bifează discul corect (nu partiția).
systemd-boot, nu GRUB, așa că acest tutorial nu i se aplică pe instalările UEFI.
ppa:yannubuntu/boot-repair), care automatizează pașii de mai sus din sesiunea live. Merită încercat dacă preferi varianta grafică, dar e bine să știi și ce face în spate.
Pe Fedora și pe distribuțiile din familia Red Hat comenzile au prefixul grub2-, iar intrările de kernel sunt gestionate prin BLS (fișiere în /boot/loader/entries/).
UEFI
grub2-install în modul UEFI. Distribuția folosește imagini EFI semnate, gata construite, iar grub2-install le înlocuiește cu o versiune nesemnată, ceea ce strică Secure Boot și configurația standard. Reinstalarea pachetelor este suficientă.
dnf reinstall 'shim-*' 'grub2-efi-*' grub2-common grub2-tools grub2-mkconfig -o /boot/grub2/grub.cfg
Începând cu Fedora 34 și RHEL 9, fișierul de configurare real este /boot/grub2/grub.cfg, iar /boot/efi/EFI/fedora/grub.cfg este doar un mic fișier care trimite către el. Reinstalarea pachetului grub2-efi-x64 îl recreează dacă lipsește. Pe Rocky, Alma și RHEL directorul se numește EFI/rocky, EFI/almalinux, respectiv EFI/redhat.
Dacă intrarea a dispărut și din meniul firmware-ului UEFI, o poți recrea cu efibootmgr (exemplu pentru partiția EFI /dev/sdX1):
efibootmgr -c -d /dev/sdX -p 1 -L "Fedora" -l '\EFI\fedora\shimx64.efi'
BIOS (Legacy)
dnf reinstall grub2-pc grub2-pc-modules grub2-common grub2-tools grub2-install /dev/sdX grub2-mkconfig -o /boot/grub2/grub.cfg
Intrările de kernel lipsesc
Dacă meniul apare, dar fără nicio intrare de kernel, înseamnă că lipsesc fișierele BLS din /boot/loader/entries/. Reinstalarea kernel-ului le regenerează:
dnf reinstall kernel-core
Pe openSUSE Leap și Tumbleweed cea mai sigură metodă este utilitarul propriu update-bootloader, care știe exact cum este configurat sistemul (inclusiv Btrfs și snapshot-urile).
mount -a imediat după chroot, altfel subvolumele în care stau modulele GRUB nu vor fi montate.
Verifică întâi ce bootloader folosește sistemul, pentru că instalările mai noi de Tumbleweed pot folosi grub2-bls sau systemd-boot:
grep LOADER_TYPE /etc/sysconfig/bootloader
UEFI (LOADER_TYPE="grub2-efi")
zypper refresh zypper install -f grub2 grub2-x86_64-efi shim update-bootloader --reinit
Dacă vrei să faci pașii manual:
shim-install --config-file=/boot/grub2/grub.cfg grub2-mkconfig -o /boot/grub2/grub.cfg
BIOS (LOADER_TYPE="grub2")
zypper refresh zypper install -f grub2 grub2-i386-pc grub2-install /dev/sdX grub2-mkconfig -o /boot/grub2/grub.cfg
Sau, mai simplu, update-bootloader –reinit.
Pe Arch și derivate nu ai nevoie de montările manuale din pasul 3, ci doar de montarea partițiilor, după care arch-chroot se ocupă de restul.
mount /dev/sdX2 /mnt mount /dev/sdX1 /mnt/boot # sau /mnt/efi sau /mnt/boot/efi, vezi /mnt/etc/fstab arch-chroot /mnt
Dacă ai pornit de pe alt live decât ISO-ul Arch, instalează întâi arch-install-scripts pentru a avea arch-chroot.
UEFI
pacman -Syu grub efibootmgr os-prober grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB grub-mkconfig -o /boot/grub/grub.cfg
Valoarea de la –efi-directory trebuie să fie punctul unde ai montat partiția EFI (/boot, /efi sau /boot/efi).
BIOS (Legacy)
pacman -Syu grub os-prober grub-install --target=i386-pc /dev/sdX grub-mkconfig -o /boot/grub/grub.cfg
Kernel lipsă
Dacă din /boot lipsesc și vmlinuz-linux și initramfs-linux.img (de exemplu dacă partiția EFI montată pe /boot a fost formatată), reinstalează kernel-ul înainte de grub-mkconfig:
pacman -S linux linux-firmware
Manjaro are propriul utilitar care detectează automat sistemul instalat și face toate montările:
sudo manjaro-chroot -a
Alege sistemul din listă, apoi:
UEFI
pacman -Syu grub efibootmgr os-prober grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=manjaro --recheck update-grub
BIOS (Legacy)
pacman -Syu grub os-prober grub-install --target=i386-pc --recheck /dev/sdX update-grub
Pasul 5: ieșire și repornire
exit sudo umount -R /mnt sudo reboot
Scoate stick-ul la repornire. Pe sistemele UEFI, dacă tot nu pornește Linux, intră în setările firmware-ului și verifică ordinea de boot. Lista intrărilor o poți vedea și din Linux cu:
efibootmgr -v
Varianta rapidă: pornire din promptul GRUB, fără stick live
Dacă GRUB încă există pe disc dar nu-și mai găsește configurația (apare grub rescue> sau grub>), poți porni sistemul manual și apoi îl repari direct din el, fără live.
Din grub rescue>
Listează partițiile și caută-o pe cea care conține directorul GRUB:
ls ls (hd0,gpt2)/ ls (hd0,gpt2)/boot/grub
Pe tabelă MBR partițiile apar ca (hd0,msdos1). Când ai găsit-o pe cea corectă:
set root=(hd0,gpt2) set prefix=(hd0,gpt2)/boot/grub insmod normal normal
Pe Fedora și openSUSE directorul este /boot/grub2 în loc de /boot/grub. Dacă /boot este pe partiție separată, prefixul devine (hd0,gpt3)/grub.
Din grub>
Dacă ești în promptul normal dar fără meniu, poți porni kernel-ul direct (completarea cu tasta Tab funcționează):
set root=(hd0,gpt2) linux /boot/vmlinuz root=/dev/sda2 ro initrd /boot/initrd.img boot
Numele fișierelor diferă de la o distribuție la alta (vmlinuz-linux pe Arch, vmlinuz-6.x.y-… pe Fedora), folosește ls /boot/ ca să le vezi. După pornire, rulează comenzile din pasul 4 direct în sistem, fără chroot.
Dual boot cu Windows
Începând cu GRUB 2.06, detectarea altor sisteme de operare este dezactivată implicit. Ca Windows să apară din nou în meniu:
- instalează
os-prober(pachetul are același nume în toate distribuțiile); - în
/etc/default/grubadaugă sau decomentează linia:GRUB_DISABLE_OS_PROBER=false
- regenerează configurația cu
update-grub(Debian/Ubuntu/Manjaro),grub-mkconfig -o /boot/grub/grub.cfg(Arch) saugrub2-mkconfig -o /boot/grub2/grub.cfg(Fedora/openSUSE).
În chroot os-prober poate să nu găsească Windows. În acest caz rulează din nou comanda de regenerare după ce ai pornit normal în Linux.
Dacă după o actualizare de Windows calculatorul pornește direct în Windows, de cele mai multe ori GRUB nu a fost șters, ci doar mutat mai jos în ordinea de boot. Verifică întâi setările firmware-ului sau rulează din Windows, ca administrator:
bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi
(înlocuiește ubuntu cu directorul distribuției tale din partiția EFI).
Probleme frecvente
| Mesaj / situație | Cauză | Soluție |
|---|---|---|
EFI variables are not supported on this system | live-ul a pornit în mod BIOS | repornește stick-ul în mod UEFI |
cannot find EFI directory | partiția EFI nu este montată | montează-o în locul indicat de –efi-directory |
will not proceed with blocklists | ai dat ca țintă o partiție, nu discul | folosește /dev/sdX, nu /dev/sdX2 |
this GPT partition label contains no BIOS Boot Partition | instalare BIOS pe disc GPT fără partiția bios_grub | creează o partiție de 1 MB cu flag bios_grub sau treci pe UEFI |
| GRUB se instalează corect, dar firmware-ul îl ignoră | unele plăci de bază „uită” intrările UEFI | rulează grub-install încă o dată cu opțiunea –removable (pe Fedora copiază shimx64.efi ca EFI/BOOT/BOOTX64.EFI) |
Verification failed: (0x1A) Security Violation | GRUB nesemnat cu Secure Boot activ | reinstalează pachetele shim și grub-efi-*-signed sau dezactivează temporar Secure Boot |
| meniul apare fără intrări Linux | lipsesc kernel-ul sau initramfs-ul | reinstalează pachetul kernel-ului, apoi regenerează grub.cfg |