Jeg har en virtuel kasse, der kører med CentOS.
Jeg har knyttet en ny virtuel disk til den eksisterende CentOS VM og jeg er forsøger nu at installere GRUB på denne nyligt vedhæftede disk.
Senere vil jeg bringe en anden VM op med en nyforberedt bootbar harddisk med et brugerdefineret rodfilsystem og kerne.
I har prøvet følgende trin:
- Fastgjort en ny virtuel disk til den eksisterende fungerende CentOS-maskine.
- Oprettet en ny partition med
fdisk /dev/sdb
mens jeg partitionerede, valgte jeg indstillingerne primær partition, partition nummer 1 og andre standardindstillinger. - Formaterede disken med
mkfs.ext3 /dev/sdb1
. - Monterede disken til
/media/new_drive
. - Installeret GRUB
grub-install /dev/sdb1 --root-directory=/media/new_drive/
.
Herefter startede den anden VM med den nyforberedte harddisk ikke; Jeg fik fejlen: could not read from the boot medium
. Det ser ud til, at MBR ikke er opdateret efter grub-install
, men jeg kan se GRUB installeret under /boot/grub
på det nye drev.
Men det værste er, at det har ødelagt min eksisterende CentOS GRUB: CentOS VM hænger med en sort skærm med den eneste tekst GRUB
.
Hvorfor ændrer grub-install /dev/sdb1
ikke MBR for sdb1? Er dette ikke den rigtige måde at installere GRUB på nyt drev på?
Kommentarer
Svar
Jeg er ikke en grub2-ekspert (undskyld) men prøv at tilføje --skip-fs-probe
til din grub-installationslinje, jeg har fundet dette forhindrer oprettelse af /boot/grub/device.map
som kan forårsage opstart til en grub-prompt. Jeg tror, at uden dette parameter grub-installation, i stedet for at gøre, hvad du fortæller det, mener, at det er klogere end dig og muligvis gør noget andet.
En anden ting er at være sikker på, at du bruger den rigtige grub-installation (dvs. til grub2 og ikke til original grub). Dette er ikke et problem, hvis du er inde i Centos, men med SystemRecoveryCD er begge versioner tilgængelige og så du skal bruge grub2-install
. Jeg lærte den hårde måde …
Og som @wurtel påpegede (kudos), skal du angive et drev ikke en partition. Grub2 installeres i sektor 0 af hele diskdrevet, og denne “stub” er det, der kører ved opstartstidspunktet, men det skal vide, hvor på disken det skal installere filerne til næste trin i opstart – dette er hvad --root-directory
-parameteren er til. (Tror jeg.)
Læsning af man grub-install
og googling ser jeg, at --root-directory
egentlig ikke er beregnet til at blive brugt til grub2 versioner 1.99 ++, selvom det fungerer efter min erfaring. Det er meningen, at du skal bruge --boot-directory
og henvise til den aktuelle startmappe, så dette giver dig:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Kommentarer
- Mit første forsøg var uden partitionering og dannelse af
grub-install /dev/sdb
men det gav en fejl. Senere prøvede jeg med partitioneret og formateret disk, med formateret disk brugte jeg altid / dev / sdb1, jeg vil prøve sammen –skip-fs-probe - @Renjith åh og rodkataloget skal henvise til det monterede monteringspunkt, når du kører grub-install, så du skal montere partitionen på det nye drev, f.eks. ved
/mnt/sys2
og derefter angive--root-directory=/mnt/sys2
i din grubinstallationslinje. Det ‘ er kontraintuitivt (som en masse grub-ting synes jeg), men det ‘ er, hvordan det fungerer. - har redigeret mit svar noget …
- Grubben lige nu bruger jeg 0,97, hvilket ikke ‘ t understøtter –skip-fs-probe . men uden det fungerede det. sdb1 var fejlen.
- ok glad for at du fik det løst, det vil sige gammel grub ikke den nyere ‘ skinnende ‘ grub2. Jeg forstod ikke ‘, at RedHat var så langsom til at flytte til grub2. CentOS 7 bruger grub2, men CentOS 6 (og tidligere) bruger grub.
Svar
Sådan flyttede jeg en Debian-installation bestående af en bootpartition /boot
og en rodpartition /
til et nyt drev og gjorde det startbart ved hjælp af GNU GRUB :
Klonpartitioner
- Brug GParted live CD til at oprette boot- og rodpartitionen på den nye drev.
- Brug en rodkonsol i GParted, monter den gamle bootpartition (lad os sige den “s
/dev/sda1
) og den nye partition (/dev/sdb1
):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- Kopier dataene fra den gamle bootpartition til den nye:
cp -afv /mnt/oldBoot /mnt/newBoot
. Forklaring tilcp -afv
:-
a
står for ” arkiv ” hvilket betyder:- don t dereference links
- kopi rekursivt (som
-R
) - bevar alle attributter (tidsstempel, ejer, tilladelse)
-
f
: kraft, hvis en eksisterende destinationsfil kan ikke åbnes, fjern det og prøv igen -
v
: detaljeret, forklar hvad der gøres
-
- Dette genererer noget output på din konsol, der viser dig, hvilken fil der i øjeblikket er kopieret, og om
cp
gør fremskridt - Monter og kopier filerne fra din gamle rodpartition til den nye:
- Af hensyn til sikkerheden:
umount /mnt/oldBoot && umount /mnt/newBoot
- Monter den gamle og den nye rodpartition (forudsat at den er “s
/dev/sda2
og/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- Kopier datoen a af den gamle rodpartition til den nye rodpartition:
cp -afv /mnt/oldRoot /mnt/newRoot
- Af hensyn til sikkerheden:
- Rediger filsystemtabel , der definerer, hvilke partitioner der er monteret på boot (jeg bruger Vim til det):
-
vi /etc/fstab
-
Du vil bemærke, at der refereres til dine gamle partitioner her. Brug UUIDerne til de nye partitioner i stedet
-
Du kan midlertidigt indsætte alle UUIDer i fstab for lettere kopiering og indsættelse med
:r !blkid
-
Brug UUIDerne til dine nye partitioner til at ændre posterne i fstab. De skal se sådan ud:
`# <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 output fra
blkid
fra fstab, som du indsatte tidligere med:r !blkid
- Fjern output fra
-
Installer GRUB
-
Monter de virtuelle filsystemer på GParted live CD:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
Make GRUB-anvendelserne af GParted live-cden, der er tilgængelig for rodpartitionen:
mount --bind /usr/ /mnt/newRoot/usr
-
Monter bootpartitionen på rodpartitionen siden GRUB gemmer sin konfiguration i
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Brug
chroot /mnt/newRoot
for at gøre den nye rodpartition midlertidigt roden til filsystemet -
Opret en GRUB-konfigurationsfil ved
/boot/grub/grub.cfg
ved hjælp afupdate-grub2
-
Installer GRUB på det nye drev:
grub-install /dev/sdb
. Du skal ikke angive et partitionsnummer her -
Gå tilbage til filsystemet på GParted live CD:
exit
-
Afmonter partitioner:
umount /mnt/newRoot/*
-
Lukningsmaskine
-
Hvis du har tilknyttet flere drev, skal du sørge for, at det nyere drev kommer først i startrækkefølgen
-
Start maskine
Disse instruktioner er inspireret af dem fra oaktreepeak.com .
Alternativt kan du give Clonezilla et forsøg på at opnå det samme.
/dev/sdb1
er ikke hvor BIOS ser efter MBR, er det ‘ s i/dev/sdb
dvs. den allerførste sektor på disken.grub-install /dev/sdb --root-directory=/media/new_drive/
i stedet for sdb1