engang havde vi legacy GRUB, den Grand Unified Linuk Bootloader version 0.97. Legacy GRUB havde mange dyder, men det blev gammelt, og dets udviklere længtes efter mere funktionalitet, og dermed kom GRUB 2 til verden.
GRUB 2 er en større omskrivning med flere væsentlige forskelle. Det starter flytbare medier, og kan konfigureres med en mulighed for at indtaste dit system BIOS. Det er mere kompliceret at konfigurere med alle slags scripts til at vade igennem, og i stedet for at have en dejlig ret simpel /boot/grub/menu.lst
fil med alle konfigurationer på et sted, er standard /boot/grub/grub.cfg
. Som du ikke Redigerer direkte, Åh nej, for dette er ikke kun for mennesker at røre ved, men kun andre scripts. Vi ydmyge mennesker kan redigere /etc/default/grub
, som primært styrer udseendet af GRUB-menuen. Vi kan også redigere scripts i /etc/grub.d/
. Dette er de scripts, der starter dine operativsystemer, styrer eksterne applikationer som memtest
og os_prober
og temaer./boot/grub/grub.cfg
er bygget fra /etc/default/grub
og /etc/grub.d/*
når du kører update-grub
kommando, som du skal køre hver gang du foretager ændringer.
den gode nyhed er, at scriptetupdate-grub
er pålideligt til at finde kerner, starte filer og tilføje alle operativsystemer til din GRUB boot menu, så du ikke behøver at gøre det manuelt.
Vi skal lære at løse to af de mere almindelige fejl. Når du starter dit system op, og det stopper ved grub>
prompten, er det den fulde GRUB 2 kommandoskal. Det betyder, at GRUB 2 startede normalt og indlæste normal.mod
modul (og andre moduler, der er placeret i /boot/grub//
), men det fandt ikke din grub.cfg
fil. Hvis du ser grub rescue>
det betyder, at det ikke kunne findenormal.mod
, så det kunne sandsynligvis ikke finde nogen af dine boot-filer.
hvordan sker det? Kernen har muligvis ændret drevtildelinger, eller du flyttede dine harddiske, du ændrede nogle partitioner eller installerede et nyt operativsystem og flyttede tingene rundt. I disse scenarier dine boot filer er der stadig, men GRUB kan ikke finde dem. Så du kan kigge efter dine boot-filer ved GRUB-prompten, indstille deres placeringer og derefter starte dit system og rette din GRUB-konfiguration.
GRUB 2 Command Shell
GRUB 2 command shell er lige så kraftig som skallen i legacy GRUB. Du kan bruge den til at opdage boot billeder, kerner og rod filsystemer. Faktisk giver det dig fuld adgang til alle filsystemer på den lokale maskine uanset tilladelser eller anden beskyttelse. Som nogle måske betragter som et sikkerhedshul, men du kender det gamle unikke diktum: den, der har fysisk adgang til maskinen, ejer det.
Når du er vedgrub>
prompten, har du en masse funktionalitet, der ligner enhver kommandoskal, såsom historie og tab-færdiggørelse. grub rescue>
-tilstanden er mere begrænset, uden historie og ingen tab-færdiggørelse.
Hvis du øver på et fungerende system, skal du trykke på C, når din GRUB-Startmenu vises for at åbne GRUB-kommandoskallen. Du kan stoppe nedtællingen af opstart ved at rulle op og ned i dine menuposter med piletasterne. Det er sikkert at eksperimentere på GRUB kommandolinjen, fordi intet du gør der er permanent. Hvis du allerede stirrer pågrub>
ellergrub rescue>
prompten, så er du klar til at rocke.
de næste par kommandoer arbejder med bådegrub>
oggrub rescue>
. Den første kommando, du skal køre, påberåber personsøgeren til personsøgning af lange kommandoudgange:
grub> set pager=1
Der må ikke være mellemrum på begge sider af lighedstegnet. Lad os nu undersøge lidt. Skriv ls
for at liste alle partitioner, som GRUB ser:
grub> ls(hd0) (hd0,msdos2) (hd0,msdos1)
Hvad er alt dette msdos stuff
? Det betyder, at dette system har den gamle stil MS-DOS partitionstabel, snarere end den skinnende nye globalt unikke identifikatorer partitionstabel (GPT). (Se brug af den nye GUID-partitionstabel (Goodbye Ancient MBR). Hvis du kører GPT, vil det sige (hd0,gpt1)
. Lad os nu snuse. Brug kommandoenls
for at se, hvilke filer der er på dit system:
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
Hurra, vi har fundet rodfilsystemet. Du kan udelademsdos
oggpt
etiketter. Hvis du forlader skråstreg det vil udskrive oplysninger om partitionen. Du kan læse enhver fil på systemet med kommandoencat
:
grub> cat (hd0,1)/etc/issueUbuntu 14.04 LTS n l
læsning/etc/issue
kunne være nyttigt på et multi-boot-system til identifikation af dine forskellige Linukker.
Opstart fra grub>
Sådan indstilles startfilerne og starter systemet fragrub>
prompt. Vi ved fra at køre ls
kommandoen, at der er et rodfilsystem på (hd0,1)
, og du kan fortsætte med at søge, indtil du bekræfter, hvor /boot/grub
er. Kør derefter disse kommandoer ved hjælp af din egen rodpartition, kerne og initrd-billede:
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
den første linje indstiller den partition, som rodfilsystemet er tændt. Den anden linje fortæller GRUB placeringen af den kerne, du vil bruge. Begynd at skrive /boot/vmli
, og brug derefter tab-completion til at udfylde resten. Skriv root=/dev/sdX
for at indstille placeringen af rodfilsystemet. Ja, dette virker overflødigt, men hvis du udelader dette, får du en kernepanik. Hvordan kender du den korrekte partition? hd0,1 = / dev / sda1. hd1,1 = / dev / sdb1. hd3, 2 = / dev / sdd2. Jeg tror, du kan ekstrapolere resten.
den tredje linje indstillerinitrd
filen, som skal være det samme versionsnummer som kernen.
den fjerde linje starter dit system.
på nogle Linuks-systemer er de nuværende kerner og initrd ‘ er symlinket til det øverste niveau af rodfilsystemet:
$ ls -l /vmlinuz -> boot/vmlinuz-3.13.0-29-genericinitrd.img -> boot/initrd.img-3.13.0-29-generic
så du kunne starte fra grub>
som dette:
grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot
Opstart fra grub-rescue>
Hvis du er i GRUB rescue shell, er kommandoerne forskellige, og du skal indlæse normal.mod
oglinux.mod
moduler:
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-afslutning skal begynde at arbejde, når du har indlæst begge moduler.
gør permanente reparationer
når du har startet dit system, skal du køre disse kommandoer for at rette 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.
Når du kørergrub-install
husk at du installerer det til boot-sektoren på din harddisk og ikke til en partition, så brug ikke et partitionsnummer som/dev/sda1
.
men det fungerer stadig ikke
Hvis dit system er så rodet, at intet af dette fungerer, kan du prøve Super GRUB2 live rescue disk. Den officielle GNU GRUB Manual 2.00 bør også være nyttigt.