- Madalas masira ang GRUB pagkatapos ng mga pagbabago sa partisyon, pag-install ng ibang mga sistema, o mga pag-update, ngunit halos palaging mababawi ito.
- Ang mismong GRUB console ay nagbibigay-daan sa iyong hanapin ang /boot/grub, manu-manong i-load ang kernel, at mag-boot nang hindi umaasa sa isang LiveCD.
- Kapag nagsimula na ang sistema, mahalagang muling i-install at i-update ang GRUB mula sa Linux upang maiwasan ang pag-ulit ng problema.
- Sa mas malalang mga kaso, ang mga pamamaraan gamit ang LiveUSB, chroot, at mga tool tulad ng Boot-Repair ay nag-aalok ng mas malalim na pagkukumpuni.
Kung nabuksan mo na ang iyong computer at, sa halip na makita ang logo ng iyong operating system, nakakita ka ng black screen at mensaheng tulad ng "error: no such device" o "grub rescue ," malalaman mo kung gaano ito ka-panic. Bigla, parang nawala mo ang buong system mo, kailangan mong i-format, at nasa panganib ang iyong data... ngunit ang totoo, sa karamihan ng mga kaso, maaari itong maayos nang hindi gumagamit ng mga marahas na hakbang.
Ang magandang balita ay, bagama't tila isang seryosong problema, ang pag-aayos ng GRUB nang walang LiveCD ay lubos na posible gamit ang mismong GRUB console, basta't hindi naman kapaha-pahamak ang pinsala sa disk. Sa kaunting pasensya, ilang maayos na nai-type na mga utos, at pag-unawa sa nangyayari sa likod ng mga eksena, maaari mong i-restart ang iyong Linux system, muling i-install ang boot manager, at ihanda ito para sa mga susunod na pag-reboot.

Bago tayo magsimulang mag-type nang walang ingat, mahalagang maunawaan muna ang papel na ginagampanan ng GRUB sa pag-boot ng iyong computer. Ang GRUB 2 ang boot manager na ginagamit ng karamihan sa mga modernong distribusyon ng GNU/Linux: karaniwan itong naka-install sa MBR o sa itaas ng partisyon at responsable sa pagpapakita ng menu na may mga available na operating system at paglo-load ng Linux kernel gamit ang mga naaangkop na parameter nito.
Ang boot manager na ito ay umaasa sa mga file na karaniwang nasa direktoryo ng /boot/grub ng iyong instalasyon: mga module, configuration file, kernel image, initrd, atbp. Kung ang direktoryong ito ay hindi maa-access, inilipat, nasira, o binabago ang mga disk nang hindi napapansin ng GRUB, magsisimula kang makakita ng mga error tulad ng "no such device," "unknown filesystem," o ang kinatatakutang grub rescue> prompt.
Ang mga karaniwang sanhi ng pagkasira ng manager ay kilalang-kilala na: pag-install ng Windows pagkatapos ng Linux at pag-overwrite ng MBR , paggulo sa mga partisyon (pagbabago ng laki, paglipat, pagbura, paglikha ng mga bago) gamit ang mga tool tulad ng GParted o katulad, o kahit isang kernel o system update na, sa ilang kadahilanan, ay nag-iiwan ng mga hindi pare-parehong sanggunian sa configuration ng GRUB.
Bukod pa sa lahat ng ito, mas gusto ng ilang user na i-install ang /boot sa isang hiwalay na partition , isang karaniwang gawain sa mga advanced na configuration o environment kung saan ang natitirang bahagi ng disk ay ie-encrypt. Sa mga kasong ito, ang anumang pagbabago sa partition na iyon o sa numero ng disk nito ay maaaring magdulot sa GRUB na hindi mahanap ang sarili nitong mga module at configuration.
Mga Uri ng Error sa GRUB at Mga Mode ng Console
Kapag nabigo ang GRUB, hindi ito karaniwang basta nawawala: kadalasan ay iniiwan ka nito sa isang uri ng console o rescue menu na maaari mong gamitin upang manu-manong i-boot ang system. Ang pag-uugali ay bahagyang nag-iiba depende sa kalubhaan ng problema at ang bersyon ng GRUB na iyong na-install.
Sa maraming distribusyon, makikita mo na sinusubukan ng system na i-load ang GRUB at nag-crash. isang prompt na may tekstong grub rescue>Medyo limitado ang mode na ito, ngunit pinapayagan ka nitong maglunsad ng ilang mahahalagang utos tulad ng ls, set o insmod, sapat na upang mahanap ang tamang partisyon at pilitin ang paglo-load ng Linux module.
Sa ibang mga kaso, makikita mo ang normal na menu ng GRUB (ang listahan ng mga operating system), ngunit mabibigo ang pagtatangkang mag-boot, o ang menu ay lilitaw na sira. Mula doon, maaari mong pindutin ang 'c' key upang makapasok sa buong command line ng GRUB, na mas malakas kaysa sa rescue mode, na may mas malawak na hanay ng mga magagamit na command.
Sa mga mas lumang instalasyon, ang ilang sistema ay gumagamit pa rin ng GRUB Legacy (hindi GRUB 2), tulad ng ilang bersyon ng CentOS 5/6 o iba pang mas lumang distribusyon. Sa mga kasong ito, ang syntax ng command ay bahagyang nagbabago, ngunit ang pangkalahatang ideya ay pareho: hanapin ang direktoryo ng /boot, sabihin sa GRUB kung saan ang root directory nito, at manu-manong i-load ang kernel at initrd.
Paano ayusin ang GRUB nang walang LiveCD gamit ang rescue mode
Kapag hindi mahanap ng computer ang boot manager na wastong na-configure, karaniwan nang makakita ng mensaheng tulad ng “Error: no such device” na sinusundan ng “grub rescue>” . Nangangahulugan ito na nagawang tumakbo ang GRUB, ngunit hindi nito alam kung saan matatagpuan ang mga configuration file nito o ang mga module na kailangan nito.
Sa ganitong sitwasyon, mayroon kang mini command interpreter na nagbibigay-daan sa iyong tuklasin ang mga partisyon, hanapin ang /boot/grub, at manu-manong i-load ang kernel . Maaaring mukhang mahaba ang proseso, ngunit medyo sistematiko ito.
Listahan ng mga available na disk at partisyon
Ang unang hakbang ay alamin kung aling mga disk at partisyon ang nakikita ng GRUB sa iyong makina. Para gawin ito, sa grub rescue> prompt, i-type ang:
ls
Ang utos ay magpapakita ng katulad ng (hd0) (hd0,1) (hd0,2) (hd0,3) (hd1) (hd1,1) (hd1,2). Bawat isa hdX kumakatawan sa ibang hard drive: ang hd0 ang magiging unang pisikal na disc, ang hd1 ang pangalawaat iba pa. Ang mga variant na may kuwit, tulad ng (hd0,1), ay nagpapahiwatig ng mga de-numerong partisyon ng disk na iyon.
Depende sa iyong computer, maaaring makakita ka ng isang disk tulad ng (hd0) na may dalawa o tatlong partisyon, o ilang disk: (hd0,1) (hd1,1) (hd1,5) (hd2,1) (hd3,1) . Sa anumang kaso, ang layunin ngayon ay simple: buksan ang bawat partisyon hanggang sa matagpuan mo ang isa na naglalaman ng direktoryo ng /boot/grub.
Hanapin ang partisyon gamit ang /boot/grub
Para siyasatin ang mga nilalaman ng isang partisyon, gagamitin natin muli ls ngunit idinaragdag ang pangalan ng partisyon at isang slash sa dulo. Halimbawa: siyasatin ang nilalaman Makakatulong ito sa iyo na matukoy kung ito ang tama.
ls (hd0,1)/
Kung ang partition na iyon ay may file system na kinikilala ng GRUB, magpapakita ito ng listahan ng direktoryo: makakakita ka ng mga pangalan tulad ng bin, atbp., home, boot, root , atbp. Sa ganitong kaso, ang partition na iyon ay maaaring ang iyong root (/) o isang hiwalay na partition mula sa /boot, depende sa istrukturang mayroon ka noong na-install mo ang system. Kung ang listahan ay nagpapahiwatig ng file system na kinikilala ng GRUB , nasa tamang landas ka.
Kung, habang pinapatakbo ang nakaraang utos, makakakita ka ng mga direktoryo na tinatawag na boot , maaari kang sumisid nang mas malalim at suriin kung naglalaman ito ng grub folder:
ls (hd0,1)/boot/grub
Kapag nakakita ka ng listahan ng mga file na may kasamang mga module tulad ng linux.mod o iba pang tipikal na GRUB file, nahanap mo na ang partition na iyong hinahanap . Kung walang lumalabas o nakakuha ka ng error, patuloy na subukan ang iba pang mga partition: ls (hd0,2)/ , ls (hd1,1)/ , atbp., hanggang sa matagpuan mo ang tama.
Sabihin sa GRUB kung saan matatagpuan ang iyong mga file.
Kapag natukoy na ang tamang partisyon, kailangang ipaalam sa GRUB kung saan matatagpuan ang mga module at configuration nito . Ipagpalagay natin na natuklasan natin na ang /boot ay naka-on (hd0,1). Ang susunod na hakbang ay ang pagtatakda ng prefix:
set prefix=(hd0,1)/boot/grub
Gamit ang tagubiling ito, malalaman ng system manager na ang mga support file nito ay matatagpuan sa path na iyon. Kailangan din nating sabihin dito kung aling root partition ang gagamitin upang mahanap ang kernel at ang iba pang bahagi ng system data:
set root=(hd0,1)
Mahalagang isulat nang tama ang pares. (disk, partisyon) at laging gamitin ang patpat na slash / kapag inililista namin ang mga nilalaman gamit ang lsTandaan din na ang layout ng keyboard ng GRUB console ay karaniwang Amerikano, kaya ang mga panaklong at slash key ay maaaring hindi tumugma sa nakikita mong nakalimbag sa mga ito. Isang mabuting kasanayan ang siguraduhing itakda ang unlapi nang tama bago subukang i-load ang mga module.
I-load ang mga module ng GRUB at ang Linux kernel
Kapag na-configure na ang prefix, ang susunod na hakbang ay pilitin ang paglo-load ng GRUB Linux module . Sa maraming gabay, makakakita ka ng ganito:
insmod (hd0,1)/boot/grub/linux.mod
Sa maraming modernong sistema, ang naaangkop na modyul ay maaaring normal.mod o iba pa, ngunit pareho lang ang ideya: kung hindi ka sigurado sa eksaktong mga pangalan, gamitin ang utos ls (hd0,1)/boot/grub Para ilista ang mga file, piliin ang naaangkop na module batay sa iyong bersyon ng GRUB. Ang tungkulin ng insmod Kabilang dito ang paglo-load ng kinakailangang module upang maipagpatuloy ang proseso ng boot. Pakitandaan na insmod Ito ang instruksyon na aktwal na nagsasama ng modyul sa loader.
Susunod na kailangan mo i-load ang imahe ng Linux kernel na nagpapahiwatig ng landas nito sa loob ng file system. Halimbawa ng pagsisimula: linux /boot/vmlinuz-4.13.3-generic root=/dev/sda1
Ang eksaktong pangalan ng kernel ay mag-iiba sa iyong makina (maaaring vmlinuz-2.6.32-23-generic, vmlinuz-6.1.0-10-amd64 o anumang ibang bersyon). Maaari mong gamitin muli, ls /boot Para makita kung anong mga larawan ang mayroon ka at piliin ang pinakabago. Ang mahalaga ay huwag kalimutan ang parameter. ugat=/dev/sdXn gamit ang tamang root partition.
Para maiwasan ang kalituhan sa pagkakapantay-pantay sa pagitan ng mga kumbensyon sa pagpapangalan ng GRUB at Linux, tandaan na ang hd0 ay tumutugma sa /dev/sda, ang hd1 ay sa /dev/sdb, ang hd2 ay sa /dev/sdc , at iba pa. Nagbabago rin ang format ng numero ng partisyon: ang (hd0,1) ay nagiging /dev/sda1, ang (hd1,2) ay nagiging /dev/sdb2, atbp.
Sa ilang mga kaso, pagkatapos i-load ang kernel image, ipinapayong i-load ang initrd image (ang unang RAM disk) kung kinakailangan ito ng iyong distribution. Ang karaniwang utos ay:
initrd /initrd.img
Tulad ng sa kernel, maaari mong suriin kung aling mga initrd file ang magagamit gamit ang ls / o ls /boot at gamitin ang susi ng tab para awtomatikong makumpleto ang mga pangalan at maiwasan ang mga pagkakamali sa pagbaybay.
I-boot ang system at muling i-install ang GRUB mula sa Linux
Kapag naka-load na ang kernel at anumang initrd, kailangan mo lang sabihin sa GRUB na simulan ang proseso ng boot . Para gawin ito, i-type lang:
Arrancar: boot
Kung magiging maayos ang lahat, ang kernel ang kokontrol, ang operating system ay magbo-boot gaya ng dati, at makakapag-log in ka na sa iyong Linux system. Sa puntong ito, nagawa mo nang mailigtas ang sitwasyon nang hindi nangangailangan ng LiveCD, ngunit mayroon pa ring isang mahalagang hakbang: ang muling pag-install ng GRUB upang maiwasan itong masira muli sa susunod na pag-reboot.
Kapag nasa loob na ng sistema, buksan ang isang terminal na may mga pribilehiyo ng superuser (root o gamit ang sudo) at tumakbo: grub-install /dev/sdX
kung saan ang /dev/sdX ay ang disk (hindi ang partition) kung saan mo gustong ilagay ang boot manager, halimbawa /dev/sda o /dev/sdb kung ikaw ay nasa ibang disk. Tandaan na hindi mo dapat tukuyin ang numero ng partition dito: isinusulat ng command ang boot manager sa MBR o sa boot area ng buong disk.
Sa maraming distribusyon na nakabase sa Debian o Ubuntu, lubos ding inirerekomenda na muling buuin ang GRUB configuration file upang matiyak na tama nitong nade-detect ang lahat ng naka-install na system. Magagawa mo ito gamit ang:
Patakbuhin: update-grub o update-grub2
At, kung gusto mo ring i-update ang unang boot image, i-update ang initramfs gamit ang:
Utos: update-initramfs -u
Sa ibang mga kaso, ang problema sa GRUB ay hindi naman ganoon kalaki at nakikita mo ang boot menu , ngunit ang ilang mga sistema ay hindi nagbo-boot, may lumalabas na error kapag pumipili ng isang partikular na entry, o pinaghihinalaan mo lang na mali ang pagkaka-configure ng menu.
Sa mga ganitong pagkakataon, kapag nakita mo ang GRUB menu kapag binuksan mo ang computer, maaari mong pindutin ang mga arrow sa direksyon (pataas o pababa) upang ihinto ang awtomatikong countdown ng boot, at pagkatapos ay pindutin ang c key upang ma-access ang buong command line.
Mula sa advanced console na iyon, ang Ang mga utos ay halos pareho lang kaysa sa rescue mode, ngunit magkakaroon ka ng mas maraming tool para siyasatin ang system. Halimbawa, maaari mong gamitin ang ls upang ilista ang mga disk at partisyon, set para tingnan at baguhin ang mga variable ng kapaligiran ng GRUB, insmod para mag-load ng mga karagdagang module o kahit na mga command tulad ng cat para basahin ang mga nilalaman ng mga text file.
Kasunod ng parehong pamamaraan, una mong tutukuyin kung aling mga disk at partisyon ang mayroon ka:
ls
at makakakita ka ng output na may uri na (hd0) (hd0,msdos1) (hd0,msdos5) o (hd0,1) (hd1,1) (hd1,5) (hd2,1) , depende kung ang iyong partition table ay MBR (msdos) o GPT, at ang bilang ng mga disk na nasa computer.
Pagkatapos ay susuriin mo ang bawat partisyon gamit ang mga utos tulad ng:
ls (hd0,msdos1)/
hanggang sa mahanap mo ang boot directory at sa loob nito ay ang grub folder . Kapag natukoy na, uulitin mo ang proseso ng pagtatakda ng prefix at root gamit ang:
set prefix=(hd0,msdos1)/boot/grub
set root=(hd0,msdos1)
Mula doon, hahanapin mo ang mga available na kernel sa pamamagitan ng paglilista ng mga nilalaman ng /boot:
/listahan ng boot: ls /boot
at pipili ka ng isa sa mga ito para mag-load:
linux /boot/vmlinuz-6.1.0-10-amd64 root=/dev/sda1
Pag-aangkop ng bersyon ng kernel at root partition sa iyong partikular na kaso. Tandaan ang mga disk mapping: hd0 → /dev/sda, hd1 → /dev/sdb, hd2 → /dev/sdc , atbp. Maaari mong gamitin ang TAB key upang awtomatikong kumpletohin ang mga path at filename.
Panghuli, ilo-load mo ang initrd kung kinakailangan at isagawa ang utos sipain Para simulan ang sistema. Kapag naka-log in na, ang operasyon na isasagawa ay katulad ng sa nakaraang senaryo: I-reinstall ang GRUB sa disk at i-update ang configuration nito paggamit grub-install /dev/sda y update-grub.
Pag-aayos ng GRUB sa mga sistemang may GRUB Legacy
Bagama't karamihan sa mga distribusyon ay gumagamit na ng GRUB 2 ngayon, makakahanap ka pa rin ng mga lumang makina o mga partikular na sistema na gumagamit ng GRUB Legacy . Ang interface sa mga kasong ito ay bahagyang naiiba, ngunit ang pinagbabatayang konsepto ay nananatiling pareho: maaari kang gumamit ng isang interactive bootloader shell upang i-restart ang system.
Sa pagsisimula, karaniwang pinapayagan ng klasikong GRUB na ito ang i-access ang iyong command line sa pamamagitan ng pagpindot sa isang partikular na key (madalas ang key c o ang susi e (para i-edit ang mga entry). Kapag nasa prompt na, mayroon kang mga utos tulad ng find na lalong kapaki-pakinabang.
Halimbawa, kung gusto mong hanapin ang direktoryo ng /boot na naglalaman ng mga imahe ng kernel at initrds, maaari mong gamitin ang:
utos na hanapin: find /boot/grub/stage1 o katulad na ruta
Depende kung Ang /boot ay isang hiwalay na partisyon o nasa loob ito ng ugat, ang landas ay magiging /boot o simpleng / kasama ang iba pang mga subfolder. Kapag nahanap mo ang tamang partisyon, karaniwang ipinapakita ng GRUB Legacy ang isang bagay tulad ng (hd0,0) o ibang pares ng disk/partition na maaari mong gamitin muli.
Susunod, kakailanganin mong tukuyin ang GRUB root gamit ang isang utos na tulad nito:
Halimbawa ng ugat: root (hd0,0)
at sabihin dito kung saan matatagpuan ang kernel at initrd. Muli, hindi mo karaniwang kailangang i-type ang buong pangalan ng file, dahil ang TAB key ay awtomatikong nakukumpleto at tumutulong sa iyong maiwasan ang mga typo sa mahahabang path.
Para mas mapaganda pa, maaari mong gamitin ang utos na cat para basahin ang configuration file ng GRUB (halimbawa, /boot/grub/menu.lstat tingnan kung aling device ang naka-mount sa root directory, kung anong mga parameter ng kernel ang ipinapasa, atbp. Ito ay isang napaka-praktikal na paraan upang Kopyahin ang parehong configuration na ginamit ng system noong gumagana pa ito nang maayos..
Sa wakas, kapag mayroon ka nang mga linya ugat, pinakabuod e initrd Para sa mga listahan, patakbuhin lang ang utos boot para i-boot ang system. Kapag nasa loob na, ang huling hakbang ay ang muling pag-install ng GRUB mula sa loob mismo ng Linux gamit ang grub-install sa katumbas na disk, na tinitiyak na hindi mo na kailangang ulitin ang manu-manong proseso sa mga susunod na pag-restart.
Iba pang karaniwang pamamaraan (gamit ang LiveCD, chroot, at Boot-Repair)
Sa ngayon, nakita na natin kung paano lutasin ang sitwasyon gamit lamang ang GRUB console , nang hindi gumagamit ng anumang panlabas na paraan. Gayunpaman, sulit ding malaman ang mga klasikong pamamaraan gamit ang LiveCD/LiveUSB at mga graphical tool, dahil sa ilang mga kaso ang pinsala ay napakalawak na kaya ang pag-boot mula sa isang bootable system ang tanging pagpipilian.
Isang pamamaraan na karaniwang ginagamit sa mga distribusyon na nakabase sa Debian at Ubuntu ay ang pag-boot mula sa isang LiveCD o LiveUSB (halimbawa, isang Ubuntu, Linux Mint, Debian Live image, atbp.), i-mount ang root partition ng sirang system, i-mount din ang /boot kung ito ay isang hiwalay na partition, at pagkatapos ay i-chroot sa file system na iyon upang muling i-install ang GRUB na parang nagpapatakbo tayo mula sa mismong instalasyon.
Ang proseso, sa pangkalahatan, ay binubuo ng pagtukoy sa mga partisyon na may fdisk -l, tukuyin kung ano ang ugat (halimbawa, / Dev / sda2) at kung alin ang boot partition kung mayroon ito (halimbawa, / Dev / sda7Pagkatapos ay pinagsama-sama ang mga ito gamit ang:
Mga partisyon sa pag-mount (hal.):sudo mount /dev/sda2 /mntsudo mount /dev/sda7 /mnt/boot (kung mayroon kang hiwalay na /boot file)
at ang bind mount ng /dev, /dev/pts, /proc at /sys ay ginagawa sa loob ng /mnt:
Mga pangkabit na pangkabit:sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
Mula rito, maaari mong ma-access ang naka-install na sistema gamit ang:
Mag-login gamit ang: sudo chroot /mnt
At mula sa loob, maaari mong patakbuhin ang grub-install na nakaturo sa disk:
Pag-install mula sa chroot: grub-install --boot-directory=/boot/ --recheck /dev/sda
para i-reload ang boot manager sa MBR o katumbas na lugar, na susundan ng:
Bumuo ng configuration: grub-mkconfig -o /boot/grub/grub.cfg
para buuin muli ang configuration file. Sa paglabas sa chroot gamit ang exit at i-restart ang computer (sudo reboot), karaniwan Ang menu ng GRUB ay muling lilitaw nang normal..
Isa pang napaka-maginhawang opsyon para sa mga user na mas gustong umiwas sa terminal ay ang Boot-Repair tool , na maaaring i-install sa isang live na Ubuntu environment at nag-aalok ng graphical interface na may kakayahang matukoy ang mga instalasyon ng operating system at halos awtomatikong ayusin ang GRUB . Patakbuhin lamang ang tool, piliin ang "recommended repair," at hayaan itong suriin at isulat muli ang bootloader.
Bagama't praktikal ang mga solusyong ito batay sa mga LiveCD o mga panlabas na kagamitan, ang bentahe ng pagiging dalubhasa sa mga pamamaraang nakita natin sa simula ay hindi ka na umaasa sa pagkakaroon ng USB drive o disk . Maaari mong makayanan ang mismong GRUB console sa maraming sitwasyon, lalo na kapag ang problema ay "lamang" nawala ng boot manager ang tamang sanggunian sa partisyon kung saan matatagpuan ang /boot.
Sa lahat ng nasabi na, malinaw na ang isang sirang GRUB ay hindi nangangahulugang isang nawawalang sistema : mayroon kang mga tool sa bootloader mismo, sa command line, at sa Live environment upang mahanap ang tamang partition, manu-manong i-load ang kernel, i-boot ang iyong GNU/Linux, at muling i-install ang boot manager upang gumana itong muli na parang bago.