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.