en gång i tiden hade vi legacy GRUB, Grand Unified Linux Bootloader version 0.97. Legacy GRUB hade många dygder, men det blev gammalt och dess utvecklare längtade efter mer funktionalitet, och därmed kom GRUB 2 till världen.
GRUB 2 är en stor omskrivning med flera signifikanta skillnader. Det startar flyttbara media, och kan konfigureras med en möjlighet att ange ditt system BIOS. Det är mer komplicerat att konfigurera med alla typer av skript för att vada igenom, och istället för att ha en trevlig ganska enkel /boot/grub/menu.lst
fil med alla konfigurationer på ett ställe, är standard /boot/grub/grub.cfg
. Som du inte redigerar direkt, Åh nej, för det här är inte för bara människor att röra, utan bara andra skript. Vi ödmjuka människor kan redigera /etc/default/grub
, som huvudsakligen styr utseendet på GRUB-menyn. Vi kan också redigera skripten i /etc/grub.d/
. Det här är skript som startar dina operativsystem, styr externa applikationer som memtest
och os_prober
och teman./boot/grub/grub.cfg
är byggt från/etc/default/grub
och/etc/grub.d/*
när du kör kommandotupdate-grub
, som du måste köra varje gång du gör ändringar.
den goda nyheten är att skriptetupdate-grub
är pålitligt för att hitta kärnor, startfiler och lägga till alla operativsystem i din GRUB-startmeny, så du behöver inte göra det manuellt.
vi ska lära oss att fixa två av de vanligaste misslyckandena. När du startar upp ditt system och det stannar vid grub>
prompten är det hela GRUB 2-kommandoskalet. Det betyder att GRUB 2 startade normalt och laddadenormal.mod
– modulen (och andra moduler som finns i/boot/grub//
), men det hittade inte dingrub.cfg
– fil. Om du ser grub rescue>
det betyder att det inte kunde hitta normal.mod
, så det kunde förmodligen inte hitta någon av dina startfiler.
hur händer detta? Kärnan kan ha ändrat enhetstilldelningar eller du flyttade dina hårddiskar, du ändrade några partitioner eller installerade ett nytt operativsystem och flyttade saker runt. I dessa scenarier finns dina startfiler fortfarande kvar, men GRUB kan inte hitta dem. Så du kan leta efter dina startfiler vid GRUB-prompten, ställa in deras platser och starta sedan ditt system och fixa din GRUB-konfiguration.
Grub 2 kommandoskal
GRUB 2 kommandoskal är lika kraftfullt som skalet i legacy GRUB. Du kan använda den för att upptäcka startbilder, kärnor och rotfilsystem. Faktum är att det ger dig fullständig åtkomst till alla filsystem på den lokala maskinen oavsett behörigheter eller andra skydd. Som vissa kanske anser vara ett säkerhetshål, men du känner till det gamla Unix-diktumet: den som har fysisk tillgång till maskinen äger den.
När du är pågrub>
prompten har du mycket funktionalitet som liknar alla kommandoskal som historik och flikkomplettering. grub rescue>
– läget är mer begränsat, utan historik och ingen flikkomplettering.
om du övar på ett fungerande system trycker du på C när din GRUB-startmeny visas för att öppna Grub-kommandoskalet. Du kan stoppa nedräkningen genom att rulla upp och ner dina menyposter med piltangenterna. Det är säkert att experimentera på GRUB-kommandoraden eftersom inget du gör där är permanent. Om du redan stirrar pågrub>
ellergrub rescue>
prompten är du redo att rocka.
de närmaste kommandona fungerar med både grub>
och grub rescue>
. Det första kommandot du ska köra anropar personsökaren, för personsökning av långa kommandoutgångar:
grub> set pager=1
det får inte finnas några mellanslag på vardera sidan av likhetstecknet. Låt oss nu utforska lite. Skriv ls
för att lista alla partitioner som GRUB ser:
grub> ls(hd0) (hd0,msdos2) (hd0,msdos1)
vad är allt detta msdos stuff
? Det betyder att detta system har den gammaldags MS-DOS-partitionstabellen, snarare än den glänsande nya globalt unika Identifierarpartitionstabellen (GPT). (Se använda den nya GUID-partitionstabellen i Linux (adjö forntida MBR). Om du kör GPT kommer det att säga (hd0,gpt1)
. Nu ska vi snoka. Använd kommandot ls
för att se vilka filer som finns på ditt 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 hittat rotfilsystemet. Du kan utelämna etiketterna msdos
och gpt
. Om du lämnar snedstrecket kommer det att skriva ut information om partitionen. Du kan läsa vilken fil som helst på systemet med kommandotcat
:
grub> cat (hd0,1)/etc/issueUbuntu 14.04 LTS n l
läsning /etc/issue
kan vara användbart på ett multi-boot-system för att identifiera dina olika Linuxer.
starta från grub >
Så här ställer du in startfilerna och startar systemet från grub>
prompten. Vi vet från att köra kommandot ls
att det finns ett Linux-rotfilsystem på (hd0,1)
, och du kan fortsätta söka tills du verifierar var /boot/grub
är. Kör sedan dessa kommandon med din egen rotpartition, kärna och initrd-bild:
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örsta raden ställer in den partition som rotfilsystemet är på. Den andra raden berättar GRUB platsen för kärnan du vill använda. Börja skriva /boot/vmli
och använd sedan flikkomplettering för att fylla i resten. Skriv root=/dev/sdX
för att ställa in platsen för rotfilsystemet. Ja, det verkar överflödigt, men om du lämnar det här får du en kärnpanik. Hur vet du rätt partition? hd0,1 = / dev / sda1. hd1, 1 = /dev/sdb1. hd3, 2 = /dev/sdd2. Jag tror att du kan extrapolera resten.
den tredje raden anger fileninitrd
, som måste vara samma versionsnummer som kärnan.
den fjärde raden startar ditt system.
på vissa Linux-system är de nuvarande kärnorna och initrds symlänkade till den översta nivån i rotfilsystemet:
$ ls -l /vmlinuz -> boot/vmlinuz-3.13.0-29-genericinitrd.img -> boot/initrd.img-3.13.0-29-generic
så att du kan starta från grub>
så här:
grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot
starta från grub-rescue>
om du befinner dig i Grub rescue shell är kommandona olika, och du måste laddanormal.mod
ochlinux.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-slutförande bör börja fungera när du har laddat båda modulerna.
göra permanenta reparationer
När du har startat ditt system, kör dessa kommandon för att fixa 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örgrub-install
kom ihåg att du installerar den till startsektorn på hårddisken och inte till en partition, så använd inte ett partitionsnummer som/dev/sda1
.
men det fungerar fortfarande inte
Om ditt system är så trasslat att inget av detta fungerar, prova Super GRUB2 live rescue disk. Den officiella GNU GRUB Manual 2.00 bör också vara till hjälp.