Jag har en virtuell ruta som körs med CentOS.
Jag har anslutit en ny virtuell disk till den befintliga CentOS VM och jag ”m försöker nu installera GRUB på denna nyligen anslutna disk.
Senare tar jag upp en andra virtuell dator med en nyförberedd startbar hårddisk med ett anpassat rotfilsystem och kärna.
I har provat följande steg:
- Bifogade en ny virtuell disk till den befintliga fungerande CentOS-maskinen.
- Skapade en ny partition med
fdisk /dev/sdb
Under partitioneringen valde jag alternativen primärpartition, partition nummer 1 och andra standardalternativ. - Formaterade disken med
mkfs.ext3 /dev/sdb1
. - Monterade disken till
/media/new_drive
. - Installerad GRUB
grub-install /dev/sdb1 --root-directory=/media/new_drive/
.
Efter detta startade inte den andra virtuella datorn med den nyligen förberedda hårddisken; Jag fick felet: could not read from the boot medium
. Det verkar som om MBR inte uppdateras efter grub-install
, men jag kan se GRUB installerad under /boot/grub
på den nya enheten.
Men det värsta är att det har skadat min befintliga CentOS GRUB: CentOS VM hänger och visar en svart skärm med den enda texten GRUB
.
Varför ändrar grub-install /dev/sdb1
inte MBR för sdb1? Är det inte rätt sätt att installera GRUB på en ny enhet?
Kommentarer
Svar
Jag är inte en grub2-expert (sorry) men försök att lägga till --skip-fs-probe
till din grub-installationsrad, jag har upptäckt att detta förhindrar skapandet av /boot/grub/device.map
vilket kan orsaka start till en grubprompt. Jag tror att utan detta parameter grub-install, istället för att göra vad du säger den, tycker att den är smartare än du och kan göra något annorlunda.
En annan sak är att vara säker på att du använder rätt grub-installation (dvs. för grub2 och inte för original grub). Detta är inte ett problem om du är inne i Centos men med SystemRecoveryCD finns båda versionerna tillgängliga och så du måste använda grub2-install
. Jag lärde mig på det hårda sättet …
Och som @wurtel påpekade (kudos), bör du ange en enhet inte en partition. Grub2 installeras i sektor 0 på hela hårddisken, och den här ”stubben” är vad som körs vid starttid, men den måste veta var på disken den ska installera filerna för nästa steg i startningen – detta är vad --root-directory
-parametern är för. (Tror jag.)
Läser man grub-install
och googlar ser jag att --root-directory
egentligen inte är avsedd att användas för grub2 versioner 1.99 ++, men det fungerar enligt min erfarenhet. Du är tänkt att använda --boot-directory
och hänvisa till den faktiska startkatalogen, så detta skulle ge dig:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Kommentarer
- Mitt första försök var utan att partitionera och bilda
grub-install /dev/sdb
men det gav fel. Senare försökte jag med partitionerad och formaterad disk, med formaterad disk använde jag alltid / dev / sdb1, jag kommer att försöka längs –skip-fs-probe - @Renjith oh och rotkatalogen ska hänvisa till den monterade monteringspunkten när du kör grub-install, så du måste montera partitionen på den nya enheten t.ex. vid
/mnt/sys2
och ange--root-directory=/mnt/sys2
på din grubinstallationsrad. Det ’ är kontraintuitivt (som en massa grubblar tycker jag) men det ’ är hur det fungerar. - har redigerat mitt svar något …
- Grubben just nu använder jag 0,97, vilket inte ’ t stöd –skip-fs-probe . men utan det fungerade det. sdb1 var misstaget.
- ok glad att du fick det löst, det vill säga gammal grub inte den nyare ’ blank ’ grub2. Jag insåg inte ’ att RedHat var så långsam att flytta till grub2. CentOS 7 använder grub2 men CentOS 6 (och tidigare) använder grub.
Svar
Så här flyttade jag en Debian-installation bestående av en startpartition /boot
och en rotpartition /
till en ny enhet och gjorde den startbar med GNU GRUB :
Klonpartitioner
- Använd GParted live CD och skapa start- och rootpartitionen på den nya enhet.
- Med hjälp av en rotkonsol i GParted monterar du den gamla startpartitionen (låt oss säga den ”s
/dev/sda1
) och den nya partitionen (/dev/sdb1
):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- Kopiera data från den gamla startpartitionen till den nya:
cp -afv /mnt/oldBoot /mnt/newBoot
. Förklaring tillcp -afv
:-
a
står för ” arkiv ” vilket betyder:- inte dereferenslänkar
- kopiera rekursivt (som
-R
) - bevara alla attribut (tidsstämpel, ägare, behörighet)
-
f
: kraft, om en befintlig målfil kan inte öppnas, ta bort det och försök igen -
v
: ingående, förklara vad som görs
-
- Detta genererar en del utdata på konsolen som visar vilken fil som för närvarande kopieras och om
cp
gör framsteg - Montera och kopiera filerna från din gamla rotpartition till den nya:
- För säkerhet:
umount /mnt/oldBoot && umount /mnt/newBoot
- Montera den gamla och den nya rotpartitionen (förutsatt att den är ”s
/dev/sda2
och/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- Kopiera dat a av den gamla rotpartitionen till den nya rotpartitionen:
cp -afv /mnt/oldRoot /mnt/newRoot
- För säkerhet:
- Redigera filsystemstabell som definierar vilka partitioner som är monterade vid start (jag använder Vim för det):
-
vi /etc/fstab
-
Du kommer att märka att det refereras till dina gamla partitioner här. Använd UUID: erna för de nya partitionerna istället
-
Du kan tillfälligt infoga alla UUID: er i fstab för enklare kopiering och klistra in med
:r !blkid
-
Använd UUID: erna för dina nya partitioner för att ändra posterna i fstab. De ska se ut så här:
`# <file system> <mount point> <type> <options> <dump> <pass> # Root partition UUID=76fd1ffd-fb96-4ab4-be1a-42f8e9223983 / ext4 errors=remount-ro 0 1 # Boot partition UUID=e560e29e-8752-4b83-b1ee-4b86c0009f0b /boot ext2 defaults 0 2`
- Ta bort utdata från
blkid
från fstab som du satte in tidigare med:r !blkid
- Ta bort utdata från
-
Installera GRUB
-
Montera de virtuella filsystemen på GParted live-CD: n:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
Make GRUB-användningarna av GParted live-CD: n som är tillgängliga för rotpartitionen:
mount --bind /usr/ /mnt/newRoot/usr
-
Montera startpartitionen på rotpartitionen sedan GRUB lagrar konfigurationen i
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Använd
chroot /mnt/newRoot
för att göra den nya rotpartitionen tillfälligt roten till filsystemet -
Skapa en GRUB-konfigurationsfil vid
/boot/grub/grub.cfg
medupdate-grub2
-
Installera GRUB på den nya enheten:
grub-install /dev/sdb
. Du måste inte ange ett partitionsnummer här -
Återgå till filsystemet på GParted live-CD: n:
exit
-
Demontera partitioner:
umount /mnt/newRoot/*
-
Avstängningsmaskin
-
Om du har flera enheter anslutna, se till att den nyare enheten kommer först i startordningen
-
Starta maskinen
Dessa instruktioner är inspirerade av de från oaktreepeak.com .
Alternativt kan du ge Clonezilla ett försök att uppnå detsamma.
/dev/sdb1
är inte där BIOS letar efter MBR är det ’ s i/dev/sdb
dvs den allra första delen av skivan.grub-install /dev/sdb --root-directory=/media/new_drive/
istället sdb1