Hoe een niet-opstartende GRUB 2 te redden op Linux

grub command shell

Once upon a time hadden we legacy GRUB, de Grand Unified Linux Bootloader versie 0.97. Legacy GRUB had vele deugden, maar het werd oud en de ontwikkelaars verlangden naar meer functionaliteit, en zo kwam GRUB 2 in de wereld.

GRUB 2 is een belangrijke herschrijving met een aantal significante verschillen. Het Start verwijderbare media, en kan worden geconfigureerd met een optie om uw systeem BIOS in te voeren. Het is ingewikkelder om alle soorten scripts te configureren om door te waden, en in plaats van een mooi vrij eenvoudig /boot/grub/menu.lst bestand met alle configuraties op één plaats, is de standaard /boot/grub/grub.cfg. Die je niet direct bewerkt, oh nee, want dit is niet alleen voor mensen om aan te raken, maar alleen andere scripts. Wij nederige mensen kunnen /etc/default/grub bewerken, wat voornamelijk het uiterlijk van het GRUB menu regelt. We kunnen ook de scripts bewerken in /etc/grub.d/. Dit zijn de scripts die uw besturingssystemen opstarten, die externe toepassingen besturen zoals memtest en os_prober, en themering./boot/grub/grub.cfg is opgebouwd uit /etc/default/grub en /etc/grub.d/* wanneer u het update-grub commando uitvoert, dat u elke keer moet uitvoeren als u wijzigingen aanbrengt.

het goede nieuws is dat het update-grub script betrouwbaar is voor het vinden van kernels, bootbestanden en het toevoegen van alle besturingssystemen aan je GRUB boot menu, dus je hoeft het niet handmatig te doen.

We gaan leren hoe we twee van de meest voorkomende fouten kunnen oplossen. Als je je systeem opstart en het stopt bij de grub> prompt, dan is dat de volledige GRUB 2 Commando shell. Dat betekent dat GRUB 2 normaal gestart is en de normal.mod module geladen heeft (en andere modules die zich in /boot/grub// bevinden), maar het heeft uw grub.cfg bestand niet gevonden. Als u grub rescue> ziet, betekent dit dat het normal.mod niet kon vinden, dus waarschijnlijk kon het geen van uw bootbestanden vinden.

hoe gebeurt dit? De kernel kan schijftoewijzingen hebben gewijzigd of je hebt je harde schijven verplaatst, je hebt een aantal partities gewijzigd, of een nieuw besturingssysteem geïnstalleerd en dingen verplaatst. In deze scenario ‘ s zijn je boot bestanden er nog steeds, maar GRUB kan ze niet vinden. Dus je kunt naar je boot bestanden zoeken bij de GRUB prompt, hun locaties instellen, en dan je systeem opstarten en je GRUB configuratie repareren.

GRUB 2 Commando Shell

de GRUB 2 Commando shell is net zo krachtig als de shell in legacy GRUB. Je kunt het gebruiken om boot images, kernels en root bestandssystemen te ontdekken. In feite geeft het je volledige toegang tot alle bestandssystemen op de lokale machine, ongeacht rechten of andere beveiligingen. Wat sommigen misschien als een beveiligingslek beschouwen, maar je kent het oude UNIX dictum: wie fysieke toegang heeft tot de machine is eigenaar.

wanneer u zich op de grub> prompt bevindt, heeft u veel functionaliteit die vergelijkbaar is met elke commandoregel, zoals geschiedenis en tab-completion. Degrub rescue> modus is beperkter, zonder geschiedenis en geen tab-completion.

als je oefent op een functionerend systeem, druk dan op C wanneer je GRUB boot menu verschijnt om de GRUB Commando shell te openen. U kunt het aftellen van het opstarten stoppen door met de pijltjestoetsen omhoog en omlaag te scrollen in uw menu-items. Het is veilig om te experimenteren op de GRUB commandoregel omdat niets wat je daar doet permanent is. Als je al staart naar de grub> of grub rescue>prompt Dan ben je klaar om te rocken.

de volgende commando ‘ s werken met zowel grub> als grub rescue>. Het eerste commando dat je moet uitvoeren roept de pager aan, voor het Pagen van lange Commando-uitgangen:

grub> set pager=1

Er mogen geen spaties zijn aan weerszijden van het gelijk-teken. Laten we nu een beetje verkennen. Typ ls om alle partities te tonen die GRUB ziet:

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

Wat is dit allemaal msdos stuff? Dat betekent dat dit systeem de oude MS-DOS partitietabel heeft, in plaats van de glanzende nieuwe globaal unieke Identifiers partitietabel (GPT). (Zie de nieuwe GUID partitietabel gebruiken in Linux (Goodbye Ancient MBR). Als je GPT draait zal (hd0,gpt1)staan. Laten we nu snuffelen. Gebruik het ls commando om te zien welke bestanden er op uw systeem staan:

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

hoera, we hebben het rootbestandssysteem gevonden. U kunt de labels msdos en gpt weglaten. Als je de slash weglaat zal het informatie over de partitie afdrukken. U kunt elk bestand op het systeem lezen met het cat Commando:

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

Het lezen van /etc/issue kan nuttig zijn op een multi-boot systeem voor het identificeren van uw verschillende Linuxes.

opstarten vanaf grub>

Dit is hoe de opstartbestanden in te stellen en het systeem op te starten vanaf de grub> prompt. We weten van het uitvoeren van het ls commando dat er een Linux root bestandssysteem is op (hd0,1), en je kunt blijven zoeken totdat je verifieert waar /boot/grub is. Voer dan deze commando ‘ s uit, gebruik je eigen root partitie, kernel en initrd image:

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

de eerste regel stelt de partitie in waarop het root bestandssysteem zich bevindt. De tweede regel vertelt GRUB de locatie van de kernel die je wilt gebruiken. Begin met het typen van /boot/vmli, en gebruik vervolgens tab-completion om de rest in te vullen. Typ root=/dev/sdX om de locatie van het rootbestandssysteem in te stellen. Ja, dit lijkt overbodig, maar als je dit weglaat krijg je een kernel paniek. Hoe weet je de juiste partitie? hd0, 1 = / dev / sda1. hd1, 1 = / dev / sdb1. hd3, 2 = / dev / sdd2. Ik denk dat je de rest kunt extrapoleren.

de derde regel stelt het initrd bestand in, dat hetzelfde versienummer moet hebben als de kernel.

de vierde regel start je systeem op.

Op sommige Linux-systemen worden de huidige kernels en initrds gesymlinkt naar het hoogste niveau van het rootbestandssysteem:

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

zodat u kunt opstarten vanaf grub> zoals dit:

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

opstarten vanaf grub-rescue>

als je in de grub rescue shell zit, zijn de commando ‘ s anders, en moet je de normal.mod enlinux.mod modules laden:

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-completion zou moeten beginnen te werken nadat u beide modules hebt geladen.

permanente reparaties uitvoeren

als je met succes je systeem hebt opgestart, voer je deze commando ‘ s uit om GRUB permanent te repareren:

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

wanneer u grub-install uitvoert, onthoud dat u het installeert op de bootsector van uw harde schijf en niet op een partitie, dus gebruik geen partitienummer zoals /dev/sda1.

maar het werkt nog steeds niet

als je systeem zo in de war is dat dit allemaal niet werkt, probeer dan de Super GRUB2 live rescue disk. De officiële GNU GRUB Manual 2.00 zou ook nuttig kunnen zijn.

Related Posts

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *