====== 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>'' sau ''grub>'' în loc de meniu; * mesaje de tipul ''error: unknown filesystem'', ''error: no such partition'' sau ''file '/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**. Stick-ul live trebuie pornit **în același mod** în care a fost instalat sistemul. Dacă sistemul este UEFI și pornești live-ul în mod Legacy, ''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/sda2'' sau ''/dev/nvme0n1p2''; * partiția **EFI** (doar UEFI), de obicei FAT32, de exemplu ''/dev/sda1'' sau ''/dev/nvme0n1p1''; * partiția **/boot** separată, dacă există; * **discul** în sine (fără număr de partiție), de exemplu ''/dev/sda'' sau ''/dev/nvme0n1''. Pe BIOS, GRUB se instalează pe disc, nu pe partiție. În exemplele de mai jos vom folosi: * ''/dev/sdX'' pentru disc; * ''/dev/sdX2'' pentru root; * ''/dev/sdX1'' pentru 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 Nu ești sigur unde se montează partiția EFI? Uită-te în ''/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. După intrarea în chroot poți rula ''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 Pe Arch, Manjaro și derivate poți sări peste montările manuale din acest pas: vezi tab-ul dedicat de mai jos, unde ''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). Pop!_OS în modul UEFI folosește ''systemd-boot'', nu GRUB, așa că acest tutorial nu i se aplică pe instalările UEFI. Pe Ubuntu și derivate există și utilitarul grafic **Boot-Repair** (''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 === Pe Fedora și RHEL 9+ **nu rula ''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). Nu uita să rulezi ''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/grub'' adaugă 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) sau ''grub2-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'' | {{tag>grub bootloader boot uefi bios chroot reparare debian ubuntu fedora opensuse arch manjaro}}