după ce, la un moment dat am avut moștenire GRUB, Grand Unified Linux Bootloader versiunea 0.97. Legacy GRUB a avut multe virtuți, dar a devenit vechi, iar dezvoltatorii săi au dorit mai multă funcționalitate și, astfel, GRUB 2 a venit pe lume.
GRUB 2 este o rescriere majoră cu câteva diferențe semnificative. Acesta Cizme mass-media amovibil, și poate fi configurat cu o opțiune pentru a intra în BIOS-ul sistemului. Este mult mai complicat pentru a configura cu tot felul de script-uri pentru a wade prin, și în loc de a avea un frumos destul de simplu /boot/grub/menu.lst
fișier cu toate configurațiile într-un singur loc, implicit este /boot/grub/grub.cfg
. Pe care nu le editați direct, oh nu, pentru că acest lucru nu este pentru simplii oameni să atingă, ci doar alte scripturi. Noi, oamenii umili, putem edita /etc/default/grub
, care controlează în principal aspectul meniului GRUB. De asemenea, putem edita Scripturile în /etc/grub.d/
. Acestea sunt scripturile care pornesc sistemele de operare, controlează aplicații externe precum memtest
și os_prober
și theming./boot/grub/grub.cfg
este construit din/etc/default/grub
și/etc/grub.d/*
când executațiupdate-grub
comanda, care trebuie să rulați de fiecare dată când efectuați modificări.
vestea bună este căupdate-grub
scriptul este fiabil pentru găsirea nucleelor, fișierelor de pornire și adăugarea tuturor sistemelor de operare în meniul de pornire GRUB, deci nu trebuie să o faceți manual.
vom învăța cum să remediem două dintre cele mai frecvente eșecuri. Când porniți sistemul și se oprește lagrub>
prompt, acesta este shell-ul de comandă GRUB 2 complet. Asta înseamnă că GRUB 2 a pornit normal și a încărcat modulul normal.mod
(și alte module care se află în /boot/grub//
), dar nu a găsit fișierul grub.cfg
. Dacă vedeți grub rescue>
asta înseamnă că nu a putut găsi normal.mod
, deci probabil că nu a putut găsi niciunul dintre fișierele dvs. de pornire.
cum se întâmplă acest lucru? Este posibil ca nucleul să fi schimbat atribuirile unității sau să fi mutat hard disk-urile, să fi schimbat unele partiții sau să fi instalat un nou sistem de operare și să fi mutat lucrurile. În aceste scenarii, fișierele de boot sunt încă acolo, dar GRUB nu le poate găsi. Deci, puteți căuta fișierele de pornire la promptul GRUB, setați locațiile acestora, apoi porniți sistemul și remediați configurația GRUB.
Grub 2 Command Shell
GRUB 2 command shell este la fel de puternic ca shell-ul din legacy GRUB. Îl puteți folosi pentru a descoperi imagini de boot, kernel-uri și sisteme de fișiere rădăcină. De fapt, vă oferă acces complet la toate sistemele de fișiere de pe mașina locală, indiferent de permisiuni sau alte protecții. Ceea ce unii ar putea considera o gaură de securitate, dar știți vechiul dictum Unix: oricine are acces fizic la mașină îl deține.
când sunteți lagrub>
prompt, aveți o mulțime de funcționalități similare cu orice shell de comandă, cum ar fi istorie și tab-completare. Modul grub rescue>
este mai limitat, fără istoric și fără completare de file.
dacă exersați pe un sistem funcțional, apăsați C când apare meniul de pornire GRUB pentru a deschide shell-ul de comandă GRUB. Puteți opri numărătoarea inversă de pornire derulând în sus și în jos intrările din meniu cu tastele săgeată. Este sigur să experimentați la linia de comandă GRUB, deoarece nimic din ceea ce faceți acolo nu este permanent. Dacă sunteți deja holbezi lagrub>
saugrub rescue>
prompt atunci sunteți gata să rock.
următoarele comenzi funcționează atât cugrub>
, cât și cugrub rescue>
. Prima comandă pe care ar trebui să o executați invocă pagerul, pentru paginarea ieșirilor de comandă lungi:
grub> set pager=1
nu trebuie să existe spații de ambele părți ale semnului egal. Acum hai să explorăm puțin. Tastațils
pentru a enumera toate partițiile pe care GRUB le vede:
grub> ls(hd0) (hd0,msdos2) (hd0,msdos1)
Ce sunt toate acesteamsdos stuff
? Asta înseamnă că acest sistem are tabela de partiții MS-DOS în stil vechi, mai degrabă decât noua tabelă de partiții cu identificatori unici la nivel global (GPT). (Consultați utilizarea noului tabel de partiții GUID în Linux (Goodbye Ancient MBR). Dacă executați GPT se va spune (hd0,gpt1)
. Acum hai să ne uităm. Utilizați comanda ls
pentru a vedea ce fișiere sunt în sistemul dvs.:
grub> ls (hd0,1)/lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old initrd.img initrd.img.old
ura, am găsit sistemul de fișiere rădăcină. Puteți omite etichetelemsdos
și gpt
. Dacă lăsați slash-ul, acesta va imprima informații despre partiție. Puteți citi orice fișier din sistem cu comanda cat
:
grub> cat (hd0,1)/etc/issueUbuntu 14.04 LTS n l
citirea/etc/issue
ar putea fi utilă pe un sistem multi-boot pentru identificarea diferitelor Linuxuri.
pornirea de la grub>
acesta este modul de a seta fișierele de boot și de a porni sistemul de lagrub>
prompt. Știm din rularea comenziils
că există un sistem de fișiere rădăcină Linux pe(hd0,1)
și puteți continua căutarea până când verificați unde este/boot/grub
. Apoi executați aceste comenzi, folosind propria partiție rădăcină, kernel și imagine initrd:
grub> set root=(hd0,1)grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub> initrd /boot/initrd.img-3.13.0-29-genericgrub> boot
prima linie setează partiția pe care se află sistemul de fișiere rădăcină. A doua linie spune GRUB locația kernel-ului pe care doriți să îl utilizați. Începeți să tastați /boot/vmli
, apoi utilizați fila-completare pentru a completa restul. Tastați root=/dev/sdX
pentru a seta locația sistemului de fișiere rădăcină. Da, acest lucru pare redundant, dar dacă lăsați acest lucru, veți obține o panică de kernel. De unde știi partiția corectă? hd0, 1 = / dev / sda1. hd1, 1 = / dev / sdb1. hd3, 2 = / dev / sdd2. Cred că poți extrapola restul.
a treia linie setează fișierulinitrd
, care trebuie să aibă același număr de versiune ca și nucleul.
a patra linie pornește sistemul.
pe unele sisteme Linux nucleele și initrd-urile actuale sunt conectate la nivelul superior al sistemului de fișiere rădăcină:
$ ls -l /vmlinuz -> boot/vmlinuz-3.13.0-29-genericinitrd.img -> boot/initrd.img-3.13.0-29-generic
astfel încât să puteți porni de lagrub>
ca aceasta:
grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot
Pornirea din grub-rescue>
dacă sunteți în shell-ul grub rescue comenzile sunt diferite și trebuie să încărcaținormal.mod
șilinux.mod
module:
grub rescue> set prefix=(hd0,1)/boot/grubgrub rescue> set root=(hd0,1)grub rescue> insmod normalgrub rescue> normalgrub rescue> insmod linuxgrub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub rescue> initrd /boot/initrd.img-3.13.0-29-genericgrub rescue> boot
tab-finalizarea ar trebui să înceapă să funcționeze după ce încărcați ambele module.
efectuarea reparațiilor permanente
când ați pornit cu succes sistemul, executați aceste comenzi pentru a repara GRUB permanent:
# update-grubGenerating grub configuration file ...Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound linux image: /boot/vmlinuz-3.13.0-29-genericFound initrd image: /boot/initrd.img-3.13.0-29-genericFound linux image: /boot/vmlinuz-3.13.0-27-genericFound initrd image: /boot/initrd.img-3.13.0-27-genericFound linux image: /boot/vmlinuz-3.13.0-24-genericFound initrd image: /boot/initrd.img-3.13.0-24-genericFound memtest86+ image: /boot/memtest86+.elfFound memtest86+ image: /boot/memtest86+.bindone# grub-install /dev/sdaInstalling for i386-pc platform.Installation finished. No error reported.
când executațigrub-install
amintiți-vă că îl instalați în sectorul de boot al hard disk-ului și nu într-o partiție, deci nu utilizați un număr de partiție ca/dev/sda1
.
dar tot nu funcționează
dacă sistemul dvs. este atât de încurcat încât nimic din toate acestea nu funcționează, încercați discul de salvare Super GRUB2 live. Manualul oficial GNU GRUB 2.00 ar trebui să fie de asemenea util.