Jeg har en virtuell boks som kjører med CentOS.

Jeg har festet en ny virtuell disk til eksisterende CentOS VM og jeg er prøver nå å installere GRUB på denne nylig tilkoblede disken.

Senere vil jeg ta opp en ekstra virtuell maskin med en nylig forberedt oppstartbar harddisk med et tilpasset rotfilsystem og kjerne.

I har prøvd følgende trinn:

  • Festet en ny virtuell disk til den eksisterende fungerende CentOS-maskinen.
  • Opprettet en ny partisjon med fdisk /dev/sdb mens jeg partisjonerte, valgte jeg alternativets primære partisjon, partisjon nummer 1 og andre standardalternativer.
  • Formaterte disken med mkfs.ext3 /dev/sdb1.
  • Monterte disken til /media/new_drive.
  • Installert GRUB grub-install /dev/sdb1 --root-directory=/media/new_drive/.

Etter dette startet ikke den andre VM med den nylig forberedte harddisken; Jeg fikk feilen: could not read from the boot medium. Det ser ut til at MBR ikke er oppdatert etter grub-install, men jeg kan se GRUB installert under /boot/grub på den nye stasjonen.

Men det verste er at det har ødelagt min eksisterende CentOS GRUB: CentOS VM henger og viser en svart skjerm med den eneste teksten GRUB.

Hvorfor endrer grub-install /dev/sdb1 ikke MBR for sdb1? Er dette ikke den rette måten å installere GRUB på ny stasjon?

Kommentarer

  • /dev/sdb1 er ikke der BIOS ser etter MBR, er det ‘ s i /dev/sdb dvs. den aller første sektoren av disken.
  • mener du at jeg må bruke grub-install /dev/sdb --root-directory=/media/new_drive/ i stedet sdb1
  • ja, det er akkurat det @wurtel betyr
  • Ja. Forutsatt at du ‘ har satt et passende rotfilsystem på det stedet (jeg ser ikke ‘ t det trinnet som nevnes mellom monterings- og løpegruppen -install).
  • Jeg vil prøve med / dev / sdb, ja, ‘ t rekkevidde før jeg setter rotfilsystemet, jeg trodde jeg først skulle prøve opp grub-skjermen.

Svar

Jeg er ikke en grub2-ekspert (beklager), men prøv å legge til --skip-fs-probe til din grub-installasjonslinje, jeg har funnet ut at dette forhindrer oppretting av /boot/grub/device.map som kan føre til oppstart til en grubprompt. Jeg tror det uten dette parameter grub-install, i stedet for å gjøre det du forteller det, synes det er smartere enn deg, og kan gjøre noe annerledes.

En annen ting er å være sikker på at du bruker riktig grub-installasjon (dvs. for grub2 og ikke for original grub). Dette er ikke et problem hvis du er inne i Centos, men med SystemRecoveryCD er begge versjonene tilgjengelige og så du må bruke grub2-install. Jeg lærte på den harde måten …

Og som @wurtel påpekte (kudos), bør du spesifisere en stasjon ikke en partisjon. Grub2 installeres i sektor 0 av hele diskstasjonen, og denne «stubben» er det som kjører ved oppstartstidspunktet, men den trenger å vite hvor på disken den skal installere filene for neste oppstartsfase – dette er hva --root-directory -parameteren er for. (Tror jeg.)

Å lese man grub-install og google ser jeg at --root-directory egentlig ikke er ment å brukes til grub2 versjoner 1.99 ++, selv om det fungerer etter min erfaring. Du er ment å bruke --boot-directory og referere til selve oppstartsmappen, så dette vil gi deg:

grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot 

Kommentarer

  • Mitt første forsøk var uten partisjonering og formering av grub-install /dev/sdb, men det ga feil. Senere prøvde jeg med partisjonert og formatert disk, med formatert disk brukte jeg alltid / dev / sdb1, jeg vil prøve sammen –skip-fs-probe
  • @Renjith oh og rotkatalogen skal referere til det monterte monteringspunktet når du kjører grub-install, så du må montere partisjonen på den nye stasjonen, f.eks. på /mnt/sys2 og spesifiser deretter --root-directory=/mnt/sys2 i grubinstall-linjen din. Det ‘ er kontraintuitivt (som mye grubt synes jeg), men det ‘ er hvordan det fungerer.
  • har redigert svaret mitt noe …
  • Grubben akkurat nå bruker jeg 0,97, noe som ikke ‘ ikke støtter –skip-fs-probe . men uten det fungerte det. sdb1 var feilen.
  • ok glad for at du fikk det løst, det vil si gammel grub ikke den nyere ‘ skinnende ‘ grub2. Jeg skjønte ikke ‘ at RedHat var så treg å flytte til grub2. CentOS 7 bruker grub2, men CentOS 6 (og tidligere) bruker grub.

Svar

Slik flyttet jeg en Debian-installasjon som består av en oppstartspartisjon /boot og en rotpartisjon / til en ny stasjon og gjorde den startbar med GNU GRUB :

Klonpartisjoner

  • Bruk GParted live CD , og opprett oppstarts- og rotpartisjonen på den nye stasjon.
  • Bruk en rotkonsoll i GParted, monter den gamle oppstartspartisjonen (la oss si den «s /dev/sda1) og den nye partisjonen (/dev/sdb1): mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
  • Kopier dataene fra den gamle oppstartspartisjonen til den nye: cp -afv /mnt/oldBoot /mnt/newBoot. Forklaring til cp -afv:
    • a står for » arkiv » som betyr:
      • don «t dereference links
      • copy recursively (like -R)
      • bevare alle attributter (tidsstempel, eier, tillatelse)
    • f: force, hvis en eksisterende destinasjonsfil kan ikke åpnes, fjern den og prøv igjen
    • v: ordentlig, forklar hva som blir gjort
  • Dette vil generere noe utdata på konsollen din som viser deg hvilken fil som for øyeblikket er kopiert, og om cp gjør fremgang
  • Monter og kopier filene fra den gamle rotpartisjonen til den nye:
    • For sikkerhets skyld: umount /mnt/oldBoot && umount /mnt/newBoot
    • Monter den gamle og den nye rotpartisjonen (forutsatt at den er «s /dev/sda2 og /dev/sdb2): mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
    • Kopier datoen a av den gamle rotpartisjonen til den nye rotpartisjonen: cp -afv /mnt/oldRoot /mnt/newRoot
  • Rediger filsystemtabell som definerer hvilke partisjoner som er montert på oppstart (jeg bruker Vim til det):
    • vi /etc/fstab

    • Du vil merke at de gamle partisjonene dine er referert til her. Bruk UUID-ene til de nye partisjonene i stedet

    • Du kan midlertidig sette inn alle UUID-ene i fstab for enklere kopiering og liming med :r !blkid

    • Bruk UUID-ene til de nye partisjonene dine til å endre oppføringene i fstab. De skal se slik ut:

       `# <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 utdataene fra blkid fra fstab du satte inn tidligere med :r !blkid

Installer GRUB

  • Monter de virtuelle filsystemene til GParted live CD:

    mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys

  • Make GRUB-bruken av GParted live CD tilgjengelig for rotpartisjonen: mount --bind /usr/ /mnt/newRoot/usr

  • Monter oppstartspartisjonen på rotpartisjonen siden GRUB lagrer konfigurasjonen i /boot: mount /dev/sdb1 /mnt/newRoot/boot

  • Bruk chroot /mnt/newRoot for å gjøre den nye rotpartisjonen midlertidig roten til filsystemet

  • Opprett en GRUB-konfigurasjonsfil på /boot/grub/grub.cfg ved hjelp av update-grub2

  • Installer GRUB på den nye stasjonen: grub-install /dev/sdb. Du må ikke spesifisere et partisjonsnummer her

  • Gå tilbake til filsystemet til GParted live CD: exit

  • Demontere partisjoner: umount /mnt/newRoot/*

  • Avstengningsmaskin

  • Hvis du har flere stasjoner tilknyttet, må du sørge for at den nyere stasjonen kommer først i oppstartsrekkefølgen

  • Start maskin

Disse instruksjonene er inspirert av de fra oaktreepeak.com .

Alternativt kan du gi Clonezilla et forsøk på å oppnå det samme.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *