Ho una scatola virtuale in esecuzione con CentOS.
Ho collegato un nuovo disco virtuale alla VM CentOS esistente e io “m ora sto cercando di installare GRUB su questo disco appena collegato.
Più tardi, aprirò una seconda VM con un disco rigido avviabile appena preparato con un filesystem root personalizzato e un kernel.
I hanno provato i seguenti passaggi:
- Ha collegato un nuovo disco virtuale alla macchina CentOS funzionante esistente.
- Creato una nuova partizione con
fdisk /dev/sdb
. Durante il partizionamento, ho scelto le opzioni partizione primaria, partizione numero 1 e altre opzioni predefinite. - Ho formattato il disco con
mkfs.ext3 /dev/sdb1
. - Montato il disco su
/media/new_drive
. - Installato GRUB
grub-install /dev/sdb1 --root-directory=/media/new_drive/
.
Dopo questo, la seconda VM con il disco rigido appena preparato non si è avviata; Ho ricevuto lerrore: could not read from the boot medium
. Sembra che lMBR non venga aggiornato dopo grub-install
, ma posso vedere GRUB installato sotto /boot/grub
sulla nuova unità.
Ma la cosa peggiore è che ha danneggiato il mio GRUB CentOS esistente: la VM CentOS si blocca mostrando una schermata nera con lunico testo GRUB
.
Perché grub-install /dev/sdb1
non modifica lMBR di sdb1? Non è questo il modo giusto per installare GRUB sulla nuova unità?
Commenti
Rispondi
Non sono un esperto di grub2 (scusa) ma prova ad aggiungere --skip-fs-probe
alla riga di installazione di grub, ho scoperto che questo impedisce la creazione di /boot/grub/device.map
che può causare lavvio da un prompt di grub. Penso che senza questo parametro grub-install, invece di fare quello che gli dici, pensa che sia più intelligente di te e potrebbe fare qualcosa di diverso.
Unaltra cosa è essere sicuri di utilizzare il corretto grub-install (cioè per grub2 e non per grub originale). Questo non è un problema se sei allinterno di Centos, ma con SystemRecoveryCD sono disponibili entrambe le versioni e quindi devi utilizzare grub2-install
. Ho imparato a mie spese …
E come ha sottolineato @wurtel (complimenti), dovresti specificare ununità e non una partizione. Grub2 si installa nel settore 0 dellintero disco rigido, e questo “stub” è ciò che viene eseguito allavvio, ma deve sapere dove si trova sul disco dovrebbe installare i file per la fase successiva dellavvio – questo è ciò che il --root-directory
il parametro è per. (Penso.)
Leggendo man grub-install
e googling vedo che --root-directory
non è realmente destinato a essere utilizzato per grub2 versioni 1.99 ++, anche se secondo la mia esperienza funziona. Dovresti usare --boot-directory
e fare riferimento alla directory di avvio effettiva, quindi questo ti darebbe:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Commenti
- Il mio primo tentativo è stato senza partizionare e formattare
grub-install /dev/sdb
ma ha dato un errore. Successivamente ho provato con il disco partizionato e formattato, con il disco formattato ho sempre usato / dev / sdb1, proverò con –skip-fs-probe - @Renjith oh e la directory root dovrebbe fare riferimento a il punto di montaggio montato quando si esegue grub-install, quindi è necessario montare la partizione sulla nuova unità, ad es. in
/mnt/sys2
e quindi nella riga di installazione di grub specifica--root-directory=/mnt/sys2
. ‘ è controintuitivo (come un sacco di cose grub credo) ma ‘ è come funziona. - ho modificato in qualche modo la mia risposta …
- Il grub in questo momento sto usando 0.97, che non ‘ supporta –skip-fs-probe . ma senza quello ha funzionato. sdb1 è stato lerrore.
- ok sono contento che tu abbia risolto, questo è il vecchio grub non il più recente ‘ shiny ‘ grub2. ‘ non mi ero reso conto che RedHat fosse così lento a passare a grub2. CentOS 7 usa grub2 ma CentOS 6 (e versioni precedenti) usa grub.
Risposta
È così che ho spostato uninstallazione Debian costituita da una partizione di avvio /boot
e una partizione root /
su una nuova unità e resa avviabile utilizzando GNU GRUB :
Clona partizioni
- Utilizzando il CD live GParted , crea la partizione di avvio e di root sul nuovo drive.
- Utilizzando una console di root in GParted, monta la vecchia partizione di avvio (diciamolo “s
/dev/sda1
) e la nuova partizione (/dev/sdb1
):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- Copia i dati dalla vecchia partizione di avvio a quella nuova:
cp -afv /mnt/oldBoot /mnt/newBoot
. Spiegazione dicp -afv
:-
a
sta per ” archivio ” che significa:- don “t dereferenziare link
- copiare in modo ricorsivo (come
-R
) - conserva tutti gli attributi (timestamp, proprietario, autorizzazione)
-
f
: force, se un file di destinazione esistente non può essere aperto, rimuovilo e riprova -
v
: verbose, spiega cosa si sta facendo
-
- Questo genererà un output sulla tua console che ti mostra quale file è attualmente copiato e se
cp
fa progressi - Monta e copia i file dalla vecchia partizione di root in il nuovo:
- Per sicurezza:
umount /mnt/oldBoot && umount /mnt/newBoot
- Montare la vecchia e la nuova partizione di root (supponendo che “s
/dev/sda2
e/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- Copia il dat da una della vecchia partizione root alla nuova partizione root:
cp -afv /mnt/oldRoot /mnt/newRoot
- Per sicurezza:
- Modifica tabella del filesystem che definisce quali partizioni sono montate allavvio (userò Vim per questo):
-
vi /etc/fstab
-
Noterai che qui si fa riferimento alle tue vecchie partizioni. Utilizza invece gli UUID delle nuove partizioni
-
Puoi inserire temporaneamente tutti gli UUID in fstab per copiarli e incollarli più facilmente con
:r !blkid
-
Usa gli UUID delle tue nuove partizioni per modificare le voci in fstab. Dovrebbero avere un aspetto simile a questo:
`# <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`
- Rimuovi loutput di
blkid
da fstab che hai inserito in precedenza con:r !blkid
- Rimuovi loutput di
-
Installa GRUB
-
Monta i filesystem virtuali del live CD GParted:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
Crea le utilità GRUB del live CD GParted disponibili per la partizione root:
mount --bind /usr/ /mnt/newRoot/usr
-
Montare la partizione di avvio sulla partizione root da GRUB memorizzerà la sua configurazione in
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Usa
chroot /mnt/newRoot
per rendere temporaneamente la nuova partizione di root la root del filesystem -
Crea un file di configurazione GRUB in
/boot/grub/grub.cfg
utilizzandoupdate-grub2
-
Installa GRUB sulla nuova unità:
grub-install /dev/sdb
. Non devi specificare un numero di partizione qui -
Tornare al filesystem del CD live di GParted:
exit
-
Smonta le partizioni:
umount /mnt/newRoot/*
-
Spegni la macchina
-
Se sono collegate più unità, assicurati che lunità più recente sia la prima nellordine di avvio
-
Avvia macchina
Queste istruzioni sono ispirate a quelle di oaktreepeak.com .
In alternativa, puoi fornire Clonezilla un tentativo di ottenere lo stesso risultato.
/dev/sdb1
non lo è dove il BIOS cerca MBR, ‘ si trova in/dev/sdb
cioè il primo settore del disco.grub-install /dev/sdb --root-directory=/media/new_drive/
invece di sdb1