How to Rescue a Non-bootting GRUB 2 on Linux

grub command shell

Once upon a time we had legacy GRUB, The Grand Unified Linux Bootloader version 0.97. Legacy GRUBILLA oli monia hyveitä, mutta se vanheni ja sen kehittäjät kaipasivat lisää toiminnallisuutta, ja näin GRUB 2 tuli maailmaan.

GRUB 2 on merkittävä uudelleenkirjoitus, jossa on useita merkittäviä eroja. Se käynnistyy irrotettava media, ja voidaan määrittää mahdollisuus syöttää järjestelmän BIOS. On monimutkaisempaa konfiguroida kaikenlaisia skriptejä kahlattavaksi, ja sen sijaan, että olisi mukava melko yksinkertainen /boot/grub/menu.lst tiedosto, jossa kaikki konfiguraatiot ovat samassa paikassa, oletusarvo on /boot/grub/grub.cfg. Jota ei editoida suoraan, voi ei, sillä tämä ei ole pelkkien ihmisten kosketeltavaksi, vaan ainoastaan muihin käsikirjoituksiin. Me vaatimattomat ihmiset saatamme muokata /etc/default/grub, joka ohjaa lähinnä GRUB-valikon ulkonäköä. Voimme myös muokata skriptejä /etc/grub.d/. Nämä skriptit käynnistävät käyttöjärjestelmät, ohjaavat ulkoisia sovelluksia, kuten memtest ja os_prober, sekä teemat./boot/grub/grub.cfg on rakennettu /etc/default/grub ja /etc/grub.d/* kun ajaa update-grub komennon, joka on suoritettava aina, kun tekee muutoksia.

hyvä uutinen on, että update-grub skripti on luotettava ytimien, käynnistystiedostojen löytämiseen ja kaikkien käyttöjärjestelmien lisäämiseen GRUB boot-valikkoon, joten sitä ei tarvitse tehdä manuaalisesti.

opimme korjaamaan kaksi yleisempää vikaa. Kun käynnistät järjestelmän ja se pysähtyy grub> kehote, se on koko GRUB 2-komentotulkki. Se tarkoittaa, että GRUB 2 käynnistyi normaalisti ja latasi normal.mod moduulin (ja muita moduuleja, jotka sijaitsevat /boot/grub//), mutta se ei löytänyt grub.cfg tiedostoa. Jos näet grub rescue> se tarkoittaa, että se ei löytänyt normal.mod, joten se ei todennäköisesti löytänyt mitään käynnistystiedostoistasi.

miten tämä tapahtuu? Ydin on saattanut muuttaa asemien tehtäviä tai olet siirtänyt kiintolevyjäsi, muuttanut joitain osioita tai asentanut uuden käyttöjärjestelmän ja siirtänyt asioita ympäriinsä. Näissä skenaarioissa käynnistystiedostosi ovat yhä olemassa, mutta GRUB ei löydä niitä. Joten voit etsiä boot-tiedostoja GRUB-kehote, asettaa niiden sijainnit, ja sitten käynnistää järjestelmän ja korjata GRUB-asetukset.

GRUB 2-komentotulkki

GRUB 2-komentotulkki on aivan yhtä voimakas kuin legacy grubin komentotulkki. Voit käyttää sitä löytää boot kuvia, ytimet, ja root tiedostojärjestelmät. Itse asiassa, se antaa sinulle täydellisen pääsyn kaikkiin tiedostojärjestelmiin paikallisen koneen riippumatta käyttöoikeuksista tai muista suojauksista. Jota jotkut saattavat pitää tietoturva-aukkona, mutta tiedät vanhan Unix-sanonnan: se, jolla on fyysinen pääsy koneeseen, omistaa sen.

kun olet grub> kehote, sinulla on paljon toimintoja, jotka muistuttavat mitä tahansa komentotulkkia, kuten historia ja välilehtien täydennys. grub rescue> tila on suppeampi, eikä siinä ole historiaa eikä välilehtien täydennystä.

Jos harjoittelet toimivassa järjestelmässä, paina C, kun GRUB-käynnistysvalikko näyttää avaavan GRUB-komentotulkin. Voit lopettaa käynnistyslaskennan vierittämällä ylös ja alas valikkosi merkintöjä nuolinäppäimillä. On turvallista kokeilla GRUB komentorivillä, koska mikään siellä tekemäsi ei ole pysyvää. Jos tuijotat jo grub> tai grub rescue>prompt niin olet valmis rokkaamaan.

seuraavat komennot toimivat sekä grub> että grub rescue>. Ensimmäinen suoritettava komento käyttää hakulaitetta pitkien komentotulosten hakuun:

grub> set pager=1

yhtäsuuruusmerkin molemmin puolin ei saa olla välilyöntejä. Tutkitaan vähän. Type ls listataksesi kaikki grubin näkemät osiot:

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

What ’ s all this msdos stuff? Tämä tarkoittaa, että tämä järjestelmä on vanhan tyylin MS-DOS partition table, eikä kiiltävä Uusi globaalisti Unique Identifiers partition table (GPT). (Katso uuden GUID-osiotaulukon käyttäminen Linuxissa (Goodbye Ancient MBR). Jos käytät GPT: tä, se sanoo (hd0,gpt1). Nyt nuuskitaan. Käytä ls – komentoa nähdäksesi, mitä tiedostoja järjestelmässäsi on:

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

hurraa, olemme löytäneet juuritiedostojärjestelmän. msdos ja gpt etiketit voi jättää pois. Jos jätät viivan pois, se tulostaa tietoa osiosta. Voit lukea minkä tahansa järjestelmän tiedoston cat komennolla:

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

Reading /etc/issue voisi olla hyödyllinen moniotteisella järjestelmällä erilaisten Linuxien tunnistamiseen.

käynnistys grubista>

näin käynnistetään käynnistystiedostot ja käynnistetään järjestelmä grub> kehote. Tiedämme ls – komennon suorittamisesta, että (hd0,1) on Linux-juuritiedostojärjestelmä, ja voit jatkaa etsimistä, kunnes varmistat, missä /boot/grub on. Suorita sitten nämä komennot käyttäen omaa juuriosiota, ydintä ja initrd-kuvaa:

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

ensimmäinen rivi määrittää osion, jolla juuritiedostojärjestelmä on. Toinen rivi kertoo GRUBILLE sen ytimen sijainnin, jota haluat käyttää. Aloita kirjoittamalla /boot/vmli ja täytä loput välilehden täydennyksellä. Kirjoita root=/dev/sdX asettaaksesi juuritiedostojärjestelmän sijainnin. Kyllä, tämä tuntuu tarpeettomalta, mutta jos jätät tämän pois, saat ytimen paniikin. Mistä tiedät oikean osion? hd0, 1 = / dev/sda1. hd1, 1 = / dev / sdb1. hd3, 2 = / dev / sdd2. Voit päätellä loput.

kolmas rivi asettaa initrd tiedoston, jonka täytyy olla sama versionumero kuin ytimen.

neljäs rivi käynnistää systeemisi.

joissakin Linux-järjestelmissä nykyiset ytimet ja initrdit on symlinkattu juuritiedostojärjestelmän ylimmälle tasolle:

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

joten voit käynnistää grub> näin:

grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot

Raivauspelastuksen käynnistäminen>

Jos olet RAIVAUSPELASTUKSESSA, komennot ovat erilaiset, ja sinun täytyy ladata normal.mod jalinux.mod moduulit:

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-täydennyksen pitäisi alkaa toimia, kun olet ladannut molemmat moduulit.

pysyvien korjausten tekeminen

kun olet käynnistänyt järjestelmäsi onnistuneesti, suorita nämä komennot korjataksesi grubin pysyvästi:

# 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.

kun suoritat grub-install muista, että asennat sen kiintolevyn käynnistyssektoriin etkä osioon, joten älä käytä osionumeroa, kuten /dev/sda1.

mutta se ei vieläkään toimi

Jos järjestelmäsi on niin sekaisin, ettei mikään tästä toimi, kokeile Super GRUB2 live-pelastuslevyä. Virallisen GNU GRUB-käsikirjan 2.00 pitäisi myös olla hyödyllinen.

Related Posts

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *