Jeg har en virtuell boks som kjører med CentOS.
Jeg har festet en ny virtuell disk til eksisterende CentOS VM og jeg er prøver nå å installere GRUB på denne nylig tilkoblede disken.
Senere vil jeg ta opp en ekstra virtuell maskin med en nylig forberedt oppstartbar harddisk med et tilpasset rotfilsystem og kjerne.
I har prøvd følgende trinn:
- Festet en ny virtuell disk til den eksisterende fungerende CentOS-maskinen.
- Opprettet en ny partisjon med
fdisk /dev/sdb
mens jeg partisjonerte, valgte jeg alternativets primære partisjon, partisjon nummer 1 og andre standardalternativer. - Formaterte disken med
mkfs.ext3 /dev/sdb1
. - Monterte disken til
/media/new_drive
. - Installert GRUB
grub-install /dev/sdb1 --root-directory=/media/new_drive/
.
Etter dette startet ikke den andre VM med den nylig forberedte harddisken; Jeg fikk feilen: could not read from the boot medium
. Det ser ut til at MBR ikke er oppdatert etter grub-install
, men jeg kan se GRUB installert under /boot/grub
på den nye stasjonen.
Men det verste er at det har ødelagt min eksisterende CentOS GRUB: CentOS VM henger og viser en svart skjerm med den eneste teksten GRUB
.
Hvorfor endrer grub-install /dev/sdb1
ikke MBR for sdb1? Er dette ikke den rette måten å installere GRUB på ny stasjon?
Kommentarer
Svar
Jeg er ikke en grub2-ekspert (beklager), men prøv å legge til --skip-fs-probe
til din grub-installasjonslinje, jeg har funnet ut at dette forhindrer oppretting av /boot/grub/device.map
som kan føre til oppstart til en grubprompt. Jeg tror det uten dette parameter grub-install, i stedet for å gjøre det du forteller det, synes det er smartere enn deg, og kan gjøre noe annerledes.
En annen ting er å være sikker på at du bruker riktig grub-installasjon (dvs. for grub2 og ikke for original grub). Dette er ikke et problem hvis du er inne i Centos, men med SystemRecoveryCD er begge versjonene tilgjengelige og så du må bruke grub2-install
. Jeg lærte på den harde måten …
Og som @wurtel påpekte (kudos), bør du spesifisere en stasjon ikke en partisjon. Grub2 installeres i sektor 0 av hele diskstasjonen, og denne «stubben» er det som kjører ved oppstartstidspunktet, men den trenger å vite hvor på disken den skal installere filene for neste oppstartsfase – dette er hva --root-directory
-parameteren er for. (Tror jeg.)
Å lese man grub-install
og google ser jeg at --root-directory
egentlig ikke er ment å brukes til grub2 versjoner 1.99 ++, selv om det fungerer etter min erfaring. Du er ment å bruke --boot-directory
og referere til selve oppstartsmappen, så dette vil gi deg:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Kommentarer
- Mitt første forsøk var uten partisjonering og formering av
grub-install /dev/sdb
, men det ga feil. Senere prøvde jeg med partisjonert og formatert disk, med formatert disk brukte jeg alltid / dev / sdb1, jeg vil prøve sammen –skip-fs-probe - @Renjith oh og rotkatalogen skal referere til det monterte monteringspunktet når du kjører grub-install, så du må montere partisjonen på den nye stasjonen, f.eks. på
/mnt/sys2
og spesifiser deretter--root-directory=/mnt/sys2
i grubinstall-linjen din. Det ‘ er kontraintuitivt (som mye grubt synes jeg), men det ‘ er hvordan det fungerer. - har redigert svaret mitt noe …
- Grubben akkurat nå bruker jeg 0,97, noe som ikke ‘ ikke støtter –skip-fs-probe . men uten det fungerte det. sdb1 var feilen.
- ok glad for at du fikk det løst, det vil si gammel grub ikke den nyere ‘ skinnende ‘ grub2. Jeg skjønte ikke ‘ at RedHat var så treg å flytte til grub2. CentOS 7 bruker grub2, men CentOS 6 (og tidligere) bruker grub.
Svar
Slik flyttet jeg en Debian-installasjon som består av en oppstartspartisjon /boot
og en rotpartisjon /
til en ny stasjon og gjorde den startbar med GNU GRUB :
Klonpartisjoner
- Bruk GParted live CD , og opprett oppstarts- og rotpartisjonen på den nye stasjon.
- Bruk en rotkonsoll i GParted, monter den gamle oppstartspartisjonen (la oss si den «s
/dev/sda1
) og den nye partisjonen (/dev/sdb1
):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- Kopier dataene fra den gamle oppstartspartisjonen til den nye:
cp -afv /mnt/oldBoot /mnt/newBoot
. Forklaring tilcp -afv
:-
a
står for » arkiv » som betyr:- don «t dereference links
- copy recursively (like
-R
) - bevare alle attributter (tidsstempel, eier, tillatelse)
-
f
: force, hvis en eksisterende destinasjonsfil kan ikke åpnes, fjern den og prøv igjen -
v
: ordentlig, forklar hva som blir gjort
-
- Dette vil generere noe utdata på konsollen din som viser deg hvilken fil som for øyeblikket er kopiert, og om
cp
gjør fremgang - Monter og kopier filene fra den gamle rotpartisjonen til den nye:
- For sikkerhets skyld:
umount /mnt/oldBoot && umount /mnt/newBoot
- Monter den gamle og den nye rotpartisjonen (forutsatt at den er «s
/dev/sda2
og/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- Kopier datoen a av den gamle rotpartisjonen til den nye rotpartisjonen:
cp -afv /mnt/oldRoot /mnt/newRoot
- For sikkerhets skyld:
- Rediger filsystemtabell som definerer hvilke partisjoner som er montert på oppstart (jeg bruker Vim til det):
-
vi /etc/fstab
-
Du vil merke at de gamle partisjonene dine er referert til her. Bruk UUID-ene til de nye partisjonene i stedet
-
Du kan midlertidig sette inn alle UUID-ene i fstab for enklere kopiering og liming med
:r !blkid
-
Bruk UUID-ene til de nye partisjonene dine til å endre oppføringene i fstab. De skal se slik ut:
`# <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`
- Fjern utdataene fra
blkid
fra fstab du satte inn tidligere med:r !blkid
- Fjern utdataene fra
-
Installer GRUB
-
Monter de virtuelle filsystemene til GParted live CD:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
Make GRUB-bruken av GParted live CD tilgjengelig for rotpartisjonen:
mount --bind /usr/ /mnt/newRoot/usr
-
Monter oppstartspartisjonen på rotpartisjonen siden GRUB lagrer konfigurasjonen i
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Bruk
chroot /mnt/newRoot
for å gjøre den nye rotpartisjonen midlertidig roten til filsystemet -
Opprett en GRUB-konfigurasjonsfil på
/boot/grub/grub.cfg
ved hjelp avupdate-grub2
-
Installer GRUB på den nye stasjonen:
grub-install /dev/sdb
. Du må ikke spesifisere et partisjonsnummer her -
Gå tilbake til filsystemet til GParted live CD:
exit
-
Demontere partisjoner:
umount /mnt/newRoot/*
-
Avstengningsmaskin
-
Hvis du har flere stasjoner tilknyttet, må du sørge for at den nyere stasjonen kommer først i oppstartsrekkefølgen
-
Start maskin
Disse instruksjonene er inspirert av de fra oaktreepeak.com .
Alternativt kan du gi Clonezilla et forsøk på å oppnå det samme.
/dev/sdb1
er ikke der BIOS ser etter MBR, er det ‘ s i/dev/sdb
dvs. den aller første sektoren av disken.grub-install /dev/sdb --root-directory=/media/new_drive/
i stedet sdb1