Hvordan redde en ikke-oppstart GRUB 2 på Linux

Det var en gang vi hadde arven GRUB, Grand Unified Linux Bootloader versjon 0.97. Legacy GRUB hadde mange dyder, men det ble gammel og utviklerne gjorde lengte etter mer funksjonalitet, og dermed gjorde GRUB 2 er kommet til verden.

GRUB 2 er en stor omskriving med flere signifikante forskjeller. Den starter flyttbare medier, og kan konfigureres med en opsjon på å oppgi systemets BIOS. Det er mer komplisert å konfigurere med alle typer skript for å vasse gjennom, og i stedet for å ha en fin ganske enkel /boot/grub/menu.lst fil med alle konfigurasjoner på ett sted, er standard /boot/grub/grub.cfg. Som du ikke redigere direkte, oh no, for dette er ikke for bare mennesker å ta på, men bare andre scripts. Vi ydmyk mennesker kan redigere /etc /default /grub, som kontrollerer hovedsakelig utseendet på GRUB menyen. Vi kan også redigere skript i /etc/grub.d/. Dette er de skript som støvel operativsystemer, kontrollere eksterne applikasjoner som memtest og os_prober, og theming. /Boot /grub /grub.cfg er bygget fra /etc /default /grub og /etc/grub.d/* når du kjøre update-grub kommando, som du må kjøre hver gang du gjør endringer.

Den gode nyheten er at update-grub script er pålitelig for å finne kjerner, oppstartsfiler, og legge alle operativsystemer til GRUB oppstartsmenyen, slik at du slipper å gjøre det manuelt.

Vi kommer til å lære hvordan du kan fikse to av de vanligste feil. Når du starter opp systemet og den stopper på grub > spør, er at hele GRUB 2 kommandoskall. Det betyr at GRUB 2 startet normalt og lastet den normal.mod modulen (og andre moduler som ligger i /boot /grub /[erke] /), men det gjorde ikke finner din grub.cfg fil. Hvis du ser grub rescue > det betyr at det ikke kunne finne normal.mod, så det sannsynligvis ikke kunne finne noen av dine oppstartsfiler.

Hvordan skjer dette? Kjernen kan ha endret driv oppdrag eller du flyttet dine harddisker, du endret noen partisjoner, eller installert et nytt operativsystem og flyttet rundt på ting. I disse scenariene oppstartsfilene er der fremdeles, men GRUB kan ikke finne dem. Så du kan se etter oppstartsfilene på GRUB teksten satt sine steder, og deretter starte opp systemet ditt og fikse GRUB konfigurasjon.

GRUB 2 Command Shell

GRUB 2 kommandoskall er like kraftig som skallet i arv GRUB. Du kan bruke den til å oppdage boot bilder, kjerner, og rot filsystemer. Faktisk, det gir deg full tilgang til alle filsystemer på den lokale maskinen uavhengig av tillatelser eller andre beskyttelser. Som noen kanskje vurdere et sikkerhetshull, men du vet det gamle Unix dictum. Den som har fysisk tilgang til maskinen eier den

Når du er på grub > spør, du har mye funksjonalitet som ligner på noen kommando shell slik som historie og tab-ferdigstillelse. Grub rescue > modusen er mer begrenset, med ingen historie og ingen tab-ferdigstillelse.

Hvis du øver på et fungerende system, trykk C når GRUB boot menyen ser ut til å åpne GRUB kommandoskall. Du kan stoppe oppstart nedtellingen ved å rulle opp og ned menyoppføringer med piltastene. Det er trygt å eksperimentere på GRUB kommandolinjen fordi ingenting du gjør det er permanent. Hvis du allerede stirrer på grub > eller grub rescue > be da er du klar til å rocke

De neste par kommandoer arbeide med både grub >.; og grub rescue >. Den første kommandoen du bør kjøre påkaller personsøker, for personsøk lange kommando utganger:

 grub > satt øker = 1 

Det må være noen mellomrom på hver side av likhetstegnet. Nå la oss gjøre en liten utforske. Skriv ls å liste opp alle partisjoner som GRUB ser:

 grub > ls (hd0) (hd0, msdos2) (hd0, msdos1) 

Hva er alt dette msdos ting? Det betyr at dette systemet har den gammeldagse MS-DOS partisjonstabellen, snarere enn den skinnende nye globalt unike identifikatorer partisjonstabellen (GPT). (Se Bruke New GUID Partition Table i Linux (Legg Ancient MBR) Hvis du kjører GPT vil det si (hd0, gpt1) Nå la oss Snoop Bruk ls kommandoen for å se hva filene er på systemet ditt...

 grub > ls (hd0,1) /tapt + funnet /bin /boot /cdrom /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /kjøre /sbin /srv /sys /tmp /usr /var /vmlinuz vmlinuz.old initrd.img initrd.img.old 

Hurra, vi har funnet rot filsystemet. Du kan utelate msdos og GPT etiketter. Hvis du la ut skråstreken den vil skrive ut informasjon om partisjonen Du kan lese hvilken som helst fil på systemet med katten kommandoen.

 grub > cat (hd0,1) /etc /issueUbuntu 14.04 LTS \\ n \\ l 

Reading /etc /issue kunne være nyttig på en multi-boot system for å identifisere ulike Linuxes

oppstart fra grub >.

Dette er hvordan du setter oppstartsfilene og starte opp systemet fra grub >. teksten vet vi fra å kjøre kommandoen ls at det er en Linux root filsystem på (hd0,1), og du kan fortsette å søke før du har bekreftet hvor /boot /grub er. Deretter kjører disse kommandoene, med din egen root partisjon, kernel, og initrd bilde:

 grub > satt 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 linjen setter partisjonen som root filsystemet er på. Den andre linjen forteller GRUB plasseringen av kjernen du vil bruke. Begynner å skrive /boot /vmli, og deretter bruke tab-fullføring å fylle inn resten. Tast inn root = /dev /sd X
å angi plasseringen av rot-filsystemet. Ja, dette virker overflødig, men hvis du la dette ut vil du få en kernel panic. Hvordan vet du riktig partisjon? hd0,1 = /dev /sda1. hd1,1 = /dev /sdb1. hd3,2 = /dev /sdd2. Jeg tror du kan ekstrapolere resten.

Den tredje linjen setter initrd-fil, som må være det samme versjonsnummer som kjernen.

Den fjerde linjen støvler ditt system.
< p> På noen Linux-systemer dagens kjerner og initrd er symlinked inn i øverste nivået av rot-filsystemet:

 $ ls -l /vmlinuz - > boot /vmlinuz-3.13.0-29-genericinitrd.img - > boot /initrd.img-3.13.0-29-generisk 

Så du kan boote fra grub > som dette:

 grub > satt root = (hd0,1) grub > linux /vmlinuz root = /dev /sda1grub > initrd /initrd.imggrub> boot 
oppstart fra grub-redning >

Hvis du er i GRUB rednings skallet kommandoene er forskjellige, og du må laste normal.mod andlinux.mod moduler:

 grub rescue > sett prefix = (hd0,1) /boot /grubgrub redning > satt root = (hd0,1) grub rescue > insmod normalgrub redning > normalgrub redning > insmod linuxgrub redning > linux /boot/vmlinuz-3.13.0-29-generic root = /dev /sda1grub redning > initrd /boot/initrd.img-3.13.0-29-genericgrub redning > boot 

Tab-fullføring skal begynne å jobbe etter at du laste begge modulene

Making permanent reparasjon

Når du har startet opp ditt system, kjøre disse kommandoene for å fikse GRUB permanent.

 # update-grubGenerating grub konfigurasjonsfil ... Funnet bakgrunn: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound bakgrunnsbilde: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound linux bilde: /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 bilde: /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 + bilde : /boot/memtest86+.bindone# grub-install /dev /sdaInstalling for i386-pc platform.Installation ferdig. Ingen feil rapporteres. 

Når du kjører grub-install husker du installerer den til oppstartssektoren på harddisken og ikke på en partisjon, så ikke bruk en partisjon nummer som /dev /sda1.
< h3> Men det fortsatt ikke fungerer

Hvis systemet er så messed up at ingenting av dette fungerer, kan du prøve Super GRUB2 levende redningsdisk. Den offisielle GNU GRUB Manuell 2,00 bør også være nyttig. Anmeldelser