LFCS: kaip sukonfigūruoti ir šalinti „Grand Unified Bootloader“ (GRUB) triktis – 13 dalis


Dėl naujausių LFCS sertifikavimo egzaminų tikslų pakeitimų, įsigaliojusių nuo 2016 m. vasario 2 d., reikiamas temas įtraukiame į čia paskelbtą LFCS seriją. Norėdami pasiruošti šiam egzaminui, labai raginame sekti ir LFCE seriją.

Šiame straipsnyje supažindinsime su GRUB ir paaiškinsime, kodėl reikalingas įkrovos įkroviklis ir kaip jis suteikia sistemos universalumo.

„Linux“ įkrovos procesas nuo to momento, kai paspaudžiate kompiuterio maitinimo mygtuką, kol gausite visiškai veikiančią sistemą, vyksta tokia aukšto lygio seka:

  1. 1. Procesas, žinomas kaip POST (Power-On Self Test), atlieka bendrą kompiuterio aparatinės įrangos komponentų patikrą.
  2. 2. Baigus POST, valdymas perduodamas įkrovos įkrovikliui, kuris savo ruožtu įkelia Linux branduolį į atmintį (kartu su initramfs ) ir jį vykdo. Dažniausiai Linux sistemoje naudojamas įkrovos įkroviklis yra GRand Unified Boot loader arba trumpiau GRUB.
  3. 3. Branduolys patikrina ir pasiekia aparatinę įrangą, o tada vykdo pradinį procesą (dažniausiai žinomą bendriniu pavadinimu init), kuris savo ruožtu užbaigia sistemos įkrovą paleidžiant paslaugos.

Šios serijos 7 dalyje („SysVinit, Upstart ir Systemd“) pristatėme paslaugų valdymo sistemas ir įrankius, naudojamus šiuolaikiniuose „Linux“ platinimuose. Galbūt norėsite peržiūrėti šį straipsnį prieš tęsdami toliau.

Pristatome GRUB įkrovos įkroviklį

Šiuolaikinėse sistemose galima rasti dvi pagrindines GRUB versijas (v1, kartais vadinamas GRUB Legacy ir v2), nors dauguma paskirstymai pagal numatytuosius nustatymus naudoja v2 naujausiose versijose. Tik Red Hat Enterprise Linux 6 ir jos dariniai šiandien vis dar naudoja v1.

Todėl šiame vadove daugiausia dėmesio skirsime v2 funkcijoms.

Nepriklausomai nuo GRUB versijos, įkrovos įkroviklis leidžia vartotojui:

  1. 1). pakeiskite sistemos veikimo būdą, nurodydami skirtingus naudotinus branduolius,
  2. 2). pasirinkite alternatyvias operacines sistemas, kurias norite paleisti, ir
  3. 3). pridėkite arba redaguokite konfigūracijos posmus, kad pakeistumėte įkrovos parinktis, be kita ko.

Šiandien GRUB prižiūri GNU projektas ir yra gerai dokumentuota jų svetainėje. Skaitydami šį vadovą raginame naudotis oficialia GNU dokumentacija.

Kai sistema paleidžiama, pagrindinėje konsolėje rodomas šis GRUB ekranas. Iš pradžių būsite paraginti pasirinkti vieną iš alternatyvių branduolių (pagal numatytuosius nustatymus sistema bus paleista naudojant naujausią branduolį) ir leidžiama įvesti komandų eilutę GRUB (su c). arba redaguokite įkrovos parinktis (spausdami klavišą e).

Viena iš priežasčių, kodėl turėtumėte apsvarstyti galimybę paleisti naudojant senesnį branduolį, yra aparatūros įrenginys, kuris veikė tinkamai ir pradėjo „veikti“ po atnaujinimo (žr. šią nuorodą AskUbuntu forumuose).

GRUB v2 konfigūracija paleidžiama iš /boot/grub/grub.cfg arba /boot/grub2/grub.cfg, o /boot/grub/grub.conf arba /boot/grub/menu.lst naudojami v1. Šie failai NEGALIMA redaguoti rankiniu būdu, bet yra modifikuojami pagal /etc/default/grub turinį ir failus, esančius /etc/grub.d.

Sistemoje CentOS 7 pateikiamas konfigūracijos failas, kuris sukuriamas pirmą kartą įdiegus sistemą:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

Be internetinės dokumentacijos, taip pat galite rasti GNU GRUB vadovą naudodami toliau nurodytą informaciją:

info grub

Jei jus domina konkrečiai pasiekiamos /etc/default/grub parinktys, galite tiesiogiai iškviesti konfigūracijos skyrių:

info -f grub -n 'Simple configuration'

Naudodami aukščiau pateiktą komandą sužinosite, kad GRUB_TIMEOUT nustato laiką nuo momento, kai pasirodo pradinis ekranas, ir prasideda automatinis sistemos paleidimas, nebent vartotojas jį pertraukia. Kai šis kintamasis nustatytas į -1, paleidimas nebus pradėtas, kol vartotojas nepasirinks.

Kai tame pačiame kompiuteryje įdiegtos kelios operacinės sistemos arba branduoliai, GRUB_DEFAULT reikalauja sveikojo skaičiaus reikšmės, nurodančios, kuri OS arba branduolio įrašas pradiniame GRUB ekrane turėtų būti pasirinktas įkrovimui pagal numatytuosius nustatymus. Įrašų sąrašą galima peržiūrėti ne tik aukščiau esančiame splash ekrane, bet ir naudojant šią komandą:

„CentOS“ ir „openSUSE“:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg

Ubuntu:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

Toliau pateiktame paveikslėlyje pateiktame pavyzdyje, jei norime paleisti branduolio versiją 3.10.0-123.el7.x86_64 (4-as įrašas), turime nustatyti GRUB_DEFAULT į 3 (įrašai numeruojami viduje, pradedant nuliu) taip:

GRUB_DEFAULT=3

Vienas paskutinis GRUB konfigūracijos kintamasis, kuris ypač domina, yra GRUB_CMDLINE_LINUX, kuris naudojamas parinktims perduoti branduoliui. Parinktys, kurias galima perduoti per GRUB branduoliui, yra gerai dokumentuotos branduolio parametrų faile ir man 7 įkrovos parametre.

Dabartinės mano CentOS 7 serverio parinktys yra šios:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"

Kodėl norėtumėte keisti numatytuosius branduolio parametrus arba perduoti papildomas parinktis? Paprastais žodžiais tariant, kartais gali reikėti pasakyti branduoliui tam tikrus aparatinės įrangos parametrus, kurių jis negali pats nustatyti, arba nepaisyti reikšmių, kurias jis aptiktų.

Tai nutiko man ne taip seniai, kai savo 10 metų senumo nešiojamajame kompiuteryje išbandžiau Vector Linux, Slackware darinį. Po įdiegimo jis neaptiko tinkamų mano vaizdo plokštės nustatymų, todėl turėjau modifikuoti branduolio parinktis, perduotas per GRUB, kad ji veiktų.

Kitas pavyzdys, kai reikia įjungti sistemą į vieno vartotojo režimą, kad galėtumėte atlikti priežiūros užduotis. Tai galite padaryti pridėję žodį single prie GRUB_CMDLINE_LINUX ir paleisdami iš naujo:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"

Redagavus /etc/defalt/grub, reikės paleisti update-grub (Ubuntu) arba grub2-mkconfig -o /boot/grub2/grub. cfg (CentOS ir openSUSE), kad atnaujintumėte grub.cfg (kitaip pakeitimai bus prarasti paleidžiant).

Ši komanda apdoros anksčiau minėtus įkrovos konfigūracijos failus, kad būtų atnaujintas grub.cfg. Šis metodas užtikrina, kad pakeitimai yra nuolatiniai, o parinktys, perduotos per GRUB įkrovos metu, galios tik dabartinės sesijos metu.

„Linux GRUB“ problemų sprendimas

Jei įdiegiate antrą operacinę sistemą arba GRUB konfigūracijos failas sugadinamas dėl žmogaus klaidos, yra būdų, kaip galite atkurti sistemą ir vėl paleisti.

Pradiniame ekrane paspauskite c, kad gautumėte GRUB komandų eilutę (atminkite, kad taip pat galite paspausti e, jei norite redaguoti numatytąsias įkrovos parinktis), ir naudokite pagalbą, kad pateiktumėte galimą komandos GRUB eilutėje:

Mes sutelksime dėmesį į ls, kuriame bus išvardyti įdiegti įrenginiai ir failų sistemos, ir išnagrinėsime, ką jis randa. Žemiau esančiame paveikslėlyje matome, kad yra 4 standieji diskai (nuo hd0 iki hd3).

Atrodo, kad tik hd0 buvo padalintas (kaip rodo msdos1 ir msdos2, kur 1 ir 2 yra skaidinių numeriai, o msdos yra skaidymo schema).

Dabar panagrinėkime pirmąjį hd0 (msdos1) skaidinį, kad pamatytume, ar jame galime rasti GRUB. Šis metodas leis mums paleisti „Linux“ ir naudoti kitus aukšto lygio įrankius konfigūracijos failui pataisyti arba iš naujo įdiegti GRUB, jei to reikia:

ls (hd0,msdos1)/

Kaip matome paryškintoje srityje, šiame skaidinyje radome katalogą grub2:

Įsitikinę, kad GRUB yra (hd0,msdos1), nurodykime GRUB, kur rasti konfigūracijos failą, ir tada nurodykime paleisti meniu:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

Tada GRUB meniu pasirinkite įrašą ir paspauskite Enter, kad paleistumėte jį naudodami. Kai sistema bus paleista, galite išleisti komandą grub2-install /dev/sdX (pakeiskite sdX įrenginiu, kuriame norite įdiegti GRUB). Tada bus atnaujinta įkrovos informacija ir atkurti visi susiję failai.

grub2-install /dev/sdX

Kiti sudėtingesni scenarijai ir jų siūlomi pataisymai yra dokumentuojami Ubuntu GRUB2 trikčių šalinimo vadove. Ten paaiškintos sąvokos galioja ir kitiems platinimams.

Santrauka

Šiame straipsnyje mes supažindinome jus su GRUB, nurodėme, kur galite rasti dokumentus tiek prisijungę, tiek neprisijungę, ir paaiškinome, kaip elgtis esant scenarijui, kai sistema nustojo tinkamai paleisti dėl su įkrovos įkrovikliu susijusios problemos.

Laimei, GRUB yra vienas iš geriausiai dokumentuotų įrankių, ir jūs galite lengvai rasti pagalbos įdiegtuose dokumentuose arba internete, naudodami išteklius, kuriais bendriname šiame straipsnyje.

Turite klausimų ar komentarų? Nedvejodami praneškite mums naudodami toliau pateiktą komentarų formą. Lauksime jūsų žinučių!