Ik heb een virtuele box die draait met CentOS.
Ik heb een nieuwe virtuele schijf aan de bestaande CentOS VM gekoppeld en ik “m probeer nu GRUB op deze nieuw aangesloten schijf te installeren.
Later zal ik een tweede VM openen met een nieuw voorbereide opstartbare harde schijf met een aangepast rootbestandssysteem en kernel.
I hebben de volgende stappen geprobeerd:
- Een nieuwe virtuele schijf aan de bestaande werkende CentOS-machine gekoppeld.
- Een nieuwe partitie gemaakt met
fdisk /dev/sdb
. Tijdens het partitioneren koos ik de opties primaire partitie, partitienummer 1 en andere standaardopties. - Formatteerde de schijf met
mkfs.ext3 /dev/sdb1
. - De schijf gemount op
/media/new_drive
. - GRUB geïnstalleerd
grub-install /dev/sdb1 --root-directory=/media/new_drive/
.
Hierna startte de tweede VM met de nieuw voorbereide harde schijf niet op; Ik krijg de foutmelding: could not read from the boot medium
. Het lijkt erop dat de MBR niet is bijgewerkt na grub-install
, maar ik zie GRUB geïnstalleerd onder /boot/grub
op de nieuwe schijf.
Maar het ergste is dat het mijn bestaande CentOS GRUB heeft beschadigd: de CentOS VM blijft hangen en toont een zwart scherm met als enige tekst GRUB
.
Waarom wijzigt grub-install /dev/sdb1
de MBR van sdb1 niet? Is dit niet de juiste manier om GRUB op een nieuwe schijf te installeren?
Reacties
Answer
Ik “ben geen grub2-expert (sorry) maar probeer --skip-fs-probe
naar je grub-install-regel, heb ik ontdekt dat dit het maken van /boot/grub/device.map
verhindert, wat kan leiden tot opstarten naar een grub-prompt. Ik denk dat zonder dit parameter grub-install, in plaats van te doen wat je het vertelt, denkt dat het slimmer is dan jij, en misschien iets anders doet.
Een ander ding is om er zeker van te zijn dat je de juiste grub-install gebruikt (dwz voor grub2 en niet voor originele grub). Dit is geen probleem als je binnen Centos bent, maar met SystemRecoveryCD zijn beide versies beschikbaar en dus je moet grub2-install
gebruiken. Ik heb het op de moeilijke manier geleerd …
En zoals @wurtel opmerkte (kudos), je zou een schijf moeten specificeren en geen partitie. Grub2 installeert in sector 0 van de hele schijf, en deze “stub” wordt uitgevoerd tijdens het opstarten, maar het moet weten waar de bestanden zich op de schijf bevinden om de bestanden te installeren voor de volgende fase van het opstarten – dit is wat de --root-directory
parameter is voor. (Denk ik.)
Door man grub-install
te lezen en te googlen, zie ik dat --root-directory
niet echt bedoeld is om te worden gebruikt voor grub2 versies 1.99 ++, hoewel het naar mijn ervaring werkt. Het is de bedoeling dat je --boot-directory
gebruikt en naar de daadwerkelijke opstartdirectory verwijst, dus dit geeft je:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Opmerkingen
- Mijn eerste poging was het zonder partitioneren en formatteren van
grub-install /dev/sdb
, maar het gaf een fout. Later probeerde ik het met een gepartitioneerde en geformatteerde schijf, met een geformatteerde schijf gebruikte ik altijd / dev / sdb1, ik zal proberen –skip-fs-probe - @Renjith oh en de root-directory zou moeten verwijzen naar het gemounte mountpoint als je grub-install uitvoert, dus je moet de partitie op de nieuwe schijf mounten, bijv. op
/mnt/sys2
en specificeer vervolgens in je grub-install-regel--root-directory=/mnt/sys2
. Het is ‘ s contra-intuïtief (zoals veel grub-dingen denk ik) maar het ‘ s hoe het werkt. - heb mijn antwoord enigszins aangepast …
- De grub op dit moment gebruik ik 0.97, die ‘ –skip-fs-probe niet ondersteunt . maar zonder dat werkte het. sdb1 was de fout.
- ok blij dat je het opgelost hebt, dat is oud, niet het nieuwere ‘ glanzend ‘ grub2. Ik had ‘ niet door dat RedHat zo traag was om naar grub2 te gaan. CentOS 7 gebruikt grub2 maar CentOS 6 (en eerder) gebruikt grub.
Antwoord
Dit is hoe ik een Debian-installatie heb verplaatst die bestaat uit een opstartpartitie /boot
en een rootpartitie /
naar een nieuwe schijf en deze opstartbaar gemaakt met GNU GRUB :
Partities klonen
- Gebruik de GParted live-cd om de opstart- en rootpartitie op de nieuwe schijf.
- Gebruik een rootconsole in GParted, koppel de oude opstartpartitie (laten we zeggen dat het is
/dev/sda1
) en de nieuwe partitie (/dev/sdb1
):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- Kopieer de gegevens van de oude opstartpartitie naar de nieuwe:
cp -afv /mnt/oldBoot /mnt/newBoot
. Uitleg vancp -afv
:-
a
staat voor ” archief ” wat betekent:- verwijs niet naar links
- kopieer recursief (zoals
-R
) - behoudt alle attributen (tijdstempel, eigenaar, toestemming)
-
f
: forceer, indien een bestaand doelbestand kan niet worden geopend, verwijder het en probeer het opnieuw -
v
: uitgebreid, leg uit wat er wordt gedaan
-
- Dit genereert wat output op je console die laat zien welk bestand momenteel gekopieerd is en of
cp
vooruitgang boekt - Koppel en kopieer de bestanden van je oude rootpartitie naar de nieuwe:
- Voor de veiligheid:
umount /mnt/oldBoot && umount /mnt/newBoot
- Mount de oude en de nieuwe rootpartitie (ervan uitgaande dat het “s
/dev/sda2
en/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- Kopieer de dat een van de oude rootpartitie naar de nieuwe rootpartitie:
cp -afv /mnt/oldRoot /mnt/newRoot
- Voor de veiligheid:
- Bewerk de bestandssysteemtabel die definieert welke partities bij het opstarten worden gemount (daarvoor gebruik ik Vim):
-
vi /etc/fstab
-
U zult opmerken dat hier naar uw oude partities wordt verwezen. Gebruik in plaats daarvan de UUIDs van de nieuwe partities.
-
U kunt tijdelijk alle UUIDs in fstab invoegen voor eenvoudiger kopiëren en plakken met
:r !blkid
-
Gebruik de UUIDs van uw nieuwe partities om de items in fstab te wijzigen. Ze zouden er ongeveer zo uit moeten zien:
`# <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`
- Verwijder de uitvoer van
blkid
uit fstab die je hebt ingevoegd eerder met:r !blkid
- Verwijder de uitvoer van
-
Installeer GRUB
-
Mount de virtuele bestandssystemen van de GParted live CD:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
Maak de GRUB utilites van de GParted live CD die beschikbaar zijn voor de root partitie:
mount --bind /usr/ /mnt/newRoot/usr
-
Mount de boot partitie op de root partitie sinds GRUB zal zijn configuratie opslaan in
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Gebruik
chroot /mnt/newRoot
om de nieuwe rootpartitie tijdelijk de root van het bestandssysteem te maken -
Maak een GRUB-configuratiebestand aan op
/boot/grub/grub.cfg
gebruikmakend vanupdate-grub2
-
Installeer GRUB op de nieuwe schijf:
grub-install /dev/sdb
. Je moet hier “geen partitienummer specificeren -
Keer terug naar het bestandssysteem van de GParted live CD:
exit
-
Partities ontkoppelen:
umount /mnt/newRoot/*
-
Machine uitschakelen
-
Als je meerdere schijven hebt aangesloten, zorg er dan voor dat de nieuwere schijf als eerste komt in de opstartvolgorde.
-
Start de machine
Deze instructies zijn geïnspireerd op die van oaktreepeak.com .
U kunt ook Clonezilla probeer hetzelfde te bereiken.
/dev/sdb1
is dat niet waar het BIOS zoekt naar MBR, het ‘ bevindt zich in/dev/sdb
dwz de allereerste sector van de schijf.grub-install /dev/sdb --root-directory=/media/new_drive/
moet gebruiken in plaats van sdb1