Am o casetă virtuală care rulează cu CentOS.
Am atașat un nou disc virtual la CentOS VM existent și „m” acum încerc să instalez GRUB pe acest nou disc atașat.
Mai târziu, voi afișa o a doua VM cu un hard disk de pornire nou pregătit cu un sistem de fișiere rădăcină personalizat și kernel.
I Am încercat următorii pași:
- Ați atașat un nou disc virtual la mașina CentOS de lucru existentă.
- A creat o nouă partiție cu
fdisk /dev/sdb
. În timpul partiționării, am ales opțiunile partiție primară, partiția numărul 1 și alte opțiuni implicite. - A formatat discul cu
mkfs.ext3 /dev/sdb1
. - A montat discul pe
/media/new_drive
. - GRUB instalat
grub-install /dev/sdb1 --root-directory=/media/new_drive/
.
După aceasta, a doua VM cu hard diskul nou pregătit nu a pornit; Am primit eroarea: could not read from the boot medium
. Se pare că MBR nu este actualizat după grub-install
, dar pot vedea GRUB instalat sub /boot/grub
pe noua unitate.
Dar cel mai rău lucru este că mi-a corupt CentOS GRUB-ul existent: CentOS VM se blochează afișând un ecran negru, singurul text fiind GRUB
.
grub-install /dev/sdb1
nu modifică MBR-ul sdb1? Nu este acesta modul corect de a instala GRUB pe unitatea nouă?
Comentarii
Răspuns
Nu sunt un expert grub2 (îmi pare rău), dar încercați să adăugați --skip-fs-probe
la linia dvs. de instalare grub, am constatat că acest lucru împiedică crearea de /boot/grub/device.map
care poate provoca bootarea la un prompt grub. Cred că fără acest lucru parametrul grub-install, în loc să facă ceea ce îi spui, consideră că este mai inteligent decât tine și poate face ceva diferit.
Un alt lucru este să fii sigur că folosești grub-install potrivit (adică pentru grub2 și nu pentru grub original). Aceasta nu este o problemă dacă vă aflați în Centos, dar cu SystemRecoveryCD ambele versiuni sunt disponibile și deci trebuie să utilizați grub2-install
. Am învățat din greu …
Și așa cum a subliniat @wurtel (felicitări), ar trebui să specificați o unitate, nu o partiție. Grub2 se instalează în sectorul 0 al întregii unități de disc, iar acest „stub” este cel care rulează la momentul pornirii, dar trebuie să știe unde se află pe disc ar trebui să instaleze fișierele pentru următoarea etapă de pornire – aceasta este ceea ce --root-directory
este pentru. (Cred.)
Citirea man grub-install
și googling văd că --root-directory
nu este menit să fie folosit pentru versiunile grub2 1.99 ++, deși funcționează din experiența mea. Sunteți menit să utilizați --boot-directory
și să vă referiți la directorul de încărcare propriu-zis, deci acest lucru vă va oferi:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Comentarii
- Prima mea încercare a fost fără partiționare și formare
grub-install /dev/sdb
, dar a dat erori. Mai târziu am încercat cu disc partiționat și formatat, cu disc formatat pe care îl foloseam întotdeauna / dev / sdb1, voi încerca de-a lungul –skip-fs-probe - @Renjith oh și directorul rădăcină ar trebui să se refere la punctul de montare montat când rulați grub-install, deci trebuie să montați partiția pe noua unitate, de ex. la
/mnt/sys2
și apoi în linia dvs. de instalare grub specificați--root-directory=/mnt/sys2
. Este ‘ contra-intuitiv (așa cum cred o mulțime de lucruri grub), dar ‘ este modul în care funcționează. - mi-am editat răspunsul oarecum …
- Grub chiar acum folosesc 0.97, care nu ‘ nu acceptă –skip-fs-probe . dar fără asta a funcționat. sdb1 a fost greșeala.
- ok mă bucur că l-ați rezolvat, adică vechiul grub nu cel mai recent ‘ strălucitor ‘ grub2. Nu ‘ nu mi-am dat seama că RedHat a fost atât de lent să treacă la grub2. CentOS 7 folosește grub2, dar CentOS 6 (și versiunile anterioare) folosește grub.
Răspuns
Așa am mutat o instalare Debian constând dintr-o partiție de boot /boot
și o partiție rădăcină /
pe o unitate nouă și a făcut-o bootabilă utilizând GNU GRUB :
Partiții de clonare
- Folosind CD live GParted , creați partiția de pornire și rădăcină pe noul unitate.
- Folosind o consolă rădăcină în GParted, montați vechea partiție de boot (să spunem „s
/dev/sda1
) și noua partiție (/dev/sdb1
):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- Copiați datele de pe vechea partiție de boot la cea nouă:
cp -afv /mnt/oldBoot /mnt/newBoot
. Explicațiacp -afv
:-
a
înseamnă ” arhivă ” ceea ce înseamnă:- nu faceți legături de dereferință
- copiați recursiv (cum ar fi
-R
) - păstrează toate atributele (timestamp, proprietar, permisiune)
-
f
: forță, dacă există un fișier de destinație existent nu poate fi deschis, eliminați-l și încercați din nou -
v
: detaliat, explicați ce se face
-
- Acest lucru va genera o ieșire pe consola dvs. care vă arată ce fișier este copiat în prezent și dacă
cp
face progrese - Montați și copiați fișierele din vechea partiție rădăcină în noua:
- Pentru siguranță:
umount /mnt/oldBoot && umount /mnt/newBoot
- Montați partiția rădăcină veche și nouă (presupunând că este „s
/dev/sda2
și/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- Copiați datele a vechii partiții rădăcină la noua partiție rădăcină:
cp -afv /mnt/oldRoot /mnt/newRoot
- Pentru siguranță:
- Editați tabel cu sistem de fișiere care definește ce partiții sunt montate la boot (voi folosi Vim pentru asta):
-
vi /etc/fstab
-
Veți observa că vechile partiții sunt menționate aici. Folosiți în schimb UUID-urile noilor partiții
-
Puteți introduce temporar toate UUID-urile în fstab pentru o copiere și lipire mai ușoară cu
:r !blkid
-
Utilizați UUID-urile noilor partiții pentru a modifica intrările din fstab. Ar trebui să arate cam așa:
`# <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`
- Eliminați rezultatul
blkid
din fstab pe care l-ați inserat mai devreme cu:r !blkid
- Eliminați rezultatul
-
Instalați GRUB
-
Montați sistemele de fișiere virtuale ale CD-ului live GParted:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
utilitățile GRUB ale CD-ului live GParted disponibile pentru partiția rădăcină:
mount --bind /usr/ /mnt/newRoot/usr
-
Montați partiția de boot pe partiția rădăcină de la GRUB își va stoca configurația în
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Utilizați
chroot /mnt/newRoot
pentru a transforma temporar noua partiție rădăcină în rădăcina sistemului de fișiere -
Creați un fișier de configurare GRUB la
/boot/grub/grub.cfg
folosindupdate-grub2
-
Instalați GRUB pe noua unitate:
grub-install /dev/sdb
. Nu trebuie să specificați aici un număr de partiție -
Reveniți la sistemul de fișiere al CD-ului live GParted:
exit
-
Demontați partițiile:
umount /mnt/newRoot/*
-
Mașina de închidere
-
Dacă aveți mai multe unități atașate, asigurați-vă că unitatea mai nouă este pe primul loc în ordinea de încărcare
-
Porniți mașina
Aceste instrucțiuni sunt inspirate de cele de la oaktreepeak.com .
Alternativ, puteți oferi Clonezilla încearcă să realizezi același lucru.
/dev/sdb1
nu este în cazul în care BIOS-ul caută MBR, ‘ este în/dev/sdb
adică chiar primul sector al discului.grub-install /dev/sdb --root-directory=/media/new_drive/
în loc sdb1