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

  • /dev/sdb1 non lo è dove il BIOS cerca MBR, ‘ si trova in /dev/sdb cioè il primo settore del disco.
  • vuoi dire che devo usare grub-install /dev/sdb --root-directory=/media/new_drive/ invece di sdb1
  • sì, è esattamente ciò che significa @wurtel
  • Sì. Supponendo che tu ‘ abbia messo un file system root adatto in quella posizione (non ‘ non vedo quel passaggio menzionato tra il montaggio e lesecuzione di grub -install).
  • Proverò con / dev / sdb, sì ‘ non è riuscito a mettere il file system di root, ho pensato che proverò prima a mostrare nella schermata di grub.

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 di cp -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
  • 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

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 utilizzando update-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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *