Această pagină poate fi doar citită. Poți vedea sursa, dar nu poți modifica pagina. Consultă administratorul dacă ești de părere că ceva este în neregulă. ====== 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**. <note important>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.</note> ===== Pasul 1: verifică modul de boot ===== În sesiunea live, deschide un terminal și rulează: <code bash> [ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS" </code> 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 ===== <code bash> lsblk -f sudo fdisk -l </code> 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: <code bash> sudo cryptsetup open /dev/sdX2 cryptroot </code> Partiția root devine ''/dev/mapper/cryptroot'' (sau un volum LVM din interiorul ei). **LVM** - activează grupurile de volume și listează-le: <code bash> sudo vgchange -ay sudo lvs </code> 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: <code bash> sudo mount /dev/sdX2 /mnt sudo btrfs subvolume list /mnt sudo umount /mnt </code> 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. <code bash> # 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 </code> <note tip>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.</note> <note tip>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.</note> Verifică dacă ai internet în chroot: <code bash> ping -c 3 kernel.org </code> Dacă nu merge rezolvarea numelor, ieși din chroot (''exit''), copiază configurația DNS a live-ului și intră din nou: <code bash> sudo cp --remove-destination /etc/resolv.conf /mnt/etc/resolv.conf sudo chroot /mnt /bin/bash </code> <note>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.</note> ===== Pasul 4: reinstalarea GRUB ===== Alege distribuția ta. Toate comenzile se rulează **în interiorul chroot-ului**, ca root. <tab-group> <tab title="Debian / Ubuntu / Mint"> Pe Debian, Ubuntu, Linux Mint, Zorin OS, elementary OS și alte derivate, comenzile sunt ''grub-install'' și ''update-grub''. === UEFI === <code bash> 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 </code> 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) === <code bash> apt update apt install --reinstall grub-pc grub-install --target=i386-pc /dev/sdX update-grub </code> Ca să reții permanent discul pe care se instalează GRUB la actualizări, rulează și: <code bash> dpkg-reconfigure grub-pc </code> și bifează discul corect (nu partiția). <note>Pop!_OS în modul UEFI folosește ''systemd-boot'', nu GRUB, așa că acest tutorial nu i se aplică pe instalările UEFI.</note> <note tip>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.</note> </tab> <tab title="Fedora / RHEL / Rocky / Alma"> 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 === <note warning>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ă.</note> <code bash> dnf reinstall 'shim-*' 'grub2-efi-*' grub2-common grub2-tools grub2-mkconfig -o /boot/grub2/grub.cfg </code> Î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''): <code bash> efibootmgr -c -d /dev/sdX -p 1 -L "Fedora" -l '\EFI\fedora\shimx64.efi' </code> === BIOS (Legacy) === <code bash> dnf reinstall grub2-pc grub2-pc-modules grub2-common grub2-tools grub2-install /dev/sdX grub2-mkconfig -o /boot/grub2/grub.cfg </code> === 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ă: <code bash> dnf reinstall kernel-core </code> </tab> <tab title="openSUSE"> 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). <note important>Nu uita să rulezi ''mount -a'' imediat după chroot, altfel subvolumele în care stau modulele GRUB nu vor fi montate.</note> Verifică întâi ce bootloader folosește sistemul, pentru că instalările mai noi de Tumbleweed pot folosi ''grub2-bls'' sau ''systemd-boot'': <code bash> grep LOADER_TYPE /etc/sysconfig/bootloader </code> === UEFI (LOADER_TYPE="grub2-efi") === <code bash> zypper refresh zypper install -f grub2 grub2-x86_64-efi shim update-bootloader --reinit </code> Dacă vrei să faci pașii manual: <code bash> shim-install --config-file=/boot/grub2/grub.cfg grub2-mkconfig -o /boot/grub2/grub.cfg </code> === BIOS (LOADER_TYPE="grub2") === <code bash> zypper refresh zypper install -f grub2 grub2-i386-pc grub2-install /dev/sdX grub2-mkconfig -o /boot/grub2/grub.cfg </code> Sau, mai simplu, ''update-bootloader --reinit''. </tab> <tab title="Arch / EndeavourOS"> 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. <code bash> mount /dev/sdX2 /mnt mount /dev/sdX1 /mnt/boot # sau /mnt/efi sau /mnt/boot/efi, vezi /mnt/etc/fstab arch-chroot /mnt </code> Dacă ai pornit de pe alt live decât ISO-ul Arch, instalează întâi ''arch-install-scripts'' pentru a avea ''arch-chroot''. === UEFI === <code bash> 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 </code> Valoarea de la ''--efi-directory'' trebuie să fie punctul unde ai montat partiția EFI (''/boot'', ''/efi'' sau ''/boot/efi''). === BIOS (Legacy) === <code bash> pacman -Syu grub os-prober grub-install --target=i386-pc /dev/sdX grub-mkconfig -o /boot/grub/grub.cfg </code> === 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'': <code bash> pacman -S linux linux-firmware </code> </tab> <tab title="Manjaro"> Manjaro are propriul utilitar care detectează automat sistemul instalat și face toate montările: <code bash> sudo manjaro-chroot -a </code> Alege sistemul din listă, apoi: === UEFI === <code bash> pacman -Syu grub efibootmgr os-prober grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=manjaro --recheck update-grub </code> === BIOS (Legacy) === <code bash> pacman -Syu grub os-prober grub-install --target=i386-pc --recheck /dev/sdX update-grub </code> </tab> </tab-group> ===== Pasul 5: ieșire și repornire ===== <code bash> exit sudo umount -R /mnt sudo reboot </code> 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: <code bash> efibootmgr -v </code> ===== 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: <code> ls ls (hd0,gpt2)/ ls (hd0,gpt2)/boot/grub </code> Pe tabelă MBR partițiile apar ca ''(hd0,msdos1)''. Când ai găsit-o pe cea corectă: <code> set root=(hd0,gpt2) set prefix=(hd0,gpt2)/boot/grub insmod normal normal </code> 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ă): <code> set root=(hd0,gpt2) linux /boot/vmlinuz root=/dev/sda2 ro initrd /boot/initrd.img boot </code> 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:<code>GRUB_DISABLE_OS_PROBER=false</code> - 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: <code> bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi </code> (î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}}