Jeg har en virtuel kasse, der kører med CentOS.

Jeg har knyttet en ny virtuel disk til den eksisterende CentOS VM og jeg er forsøger nu at installere GRUB på denne nyligt vedhæftede disk.

Senere vil jeg bringe en anden VM op med en nyforberedt bootbar harddisk med et brugerdefineret rodfilsystem og kerne.

I har prøvet følgende trin:

  • Fastgjort en ny virtuel disk til den eksisterende fungerende CentOS-maskine.
  • Oprettet en ny partition med fdisk /dev/sdb mens jeg partitionerede, valgte jeg indstillingerne primær partition, partition nummer 1 og andre standardindstillinger.
  • Formaterede disken med mkfs.ext3 /dev/sdb1.
  • Monterede disken til /media/new_drive.
  • Installeret GRUB grub-install /dev/sdb1 --root-directory=/media/new_drive/.

Herefter startede den anden VM med den nyforberedte harddisk ikke; Jeg fik fejlen: could not read from the boot medium. Det ser ud til, at MBR ikke er opdateret efter grub-install, men jeg kan se GRUB installeret under /boot/grub på det nye drev.

Men det værste er, at det har ødelagt min eksisterende CentOS GRUB: CentOS VM hænger med en sort skærm med den eneste tekst GRUB.

Hvorfor ændrer grub-install /dev/sdb1 ikke MBR for sdb1? Er dette ikke den rigtige måde at installere GRUB på nyt drev på?

Kommentarer

  • /dev/sdb1 er ikke hvor BIOS ser efter MBR, er det ‘ s i /dev/sdb dvs. den allerførste sektor på disken.
  • mener du, at jeg skal bruge grub-install /dev/sdb --root-directory=/media/new_drive/ i stedet for sdb1
  • ja, det er præcis, hvad @wurtel betyder
  • Ja. Forudsat at du ‘ har sat et passende rodfilsystem på den placering (jeg kan ikke ‘ ikke se det trin nævnes mellem monterings- og kørende grub -install).
  • Jeg vil prøve med / dev / sdb, ja, ‘ t rækkevidde indtil sætte rodfilsystemet, jeg troede, jeg ville først prøve at vise op grub-skærm.

Svar

Jeg er ikke en grub2-ekspert (undskyld) men prøv at tilføje --skip-fs-probe til din grub-installationslinje, jeg har fundet dette forhindrer oprettelse af /boot/grub/device.map som kan forårsage opstart til en grub-prompt. Jeg tror, at uden dette parameter grub-installation, i stedet for at gøre, hvad du fortæller det, mener, at det er klogere end dig og muligvis gør noget andet.

En anden ting er at være sikker på, at du bruger den rigtige grub-installation (dvs. til grub2 og ikke til original grub). Dette er ikke et problem, hvis du er inde i Centos, men med SystemRecoveryCD er begge versioner tilgængelige og så du skal bruge grub2-install. Jeg lærte den hårde måde …

Og som @wurtel påpegede (kudos), skal du angive et drev ikke en partition. Grub2 installeres i sektor 0 af hele diskdrevet, og denne “stub” er det, der kører ved opstartstidspunktet, men det skal vide, hvor på disken det skal installere filerne til næste trin i opstart – dette er hvad --root-directory -parameteren er til. (Tror jeg.)

Læsning af man grub-install og googling ser jeg, at --root-directory egentlig ikke er beregnet til at blive brugt til grub2 versioner 1.99 ++, selvom det fungerer efter min erfaring. Det er meningen, at du skal bruge --boot-directory og henvise til den aktuelle startmappe, så dette giver dig:

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

Kommentarer

  • Mit første forsøg var uden partitionering og dannelse af grub-install /dev/sdb men det gav en fejl. Senere prøvede jeg med partitioneret og formateret disk, med formateret disk brugte jeg altid / dev / sdb1, jeg vil prøve sammen –skip-fs-probe
  • @Renjith åh og rodkataloget skal henvise til det monterede monteringspunkt, når du kører grub-install, så du skal montere partitionen på det nye drev, f.eks. ved /mnt/sys2 og derefter angive --root-directory=/mnt/sys2 i din grubinstallationslinje. Det ‘ er kontraintuitivt (som en masse grub-ting synes jeg), men det ‘ er, hvordan det fungerer.
  • har redigeret mit svar noget …
  • Grubben lige nu bruger jeg 0,97, hvilket ikke ‘ t understøtter –skip-fs-probe . men uden det fungerede det. sdb1 var fejlen.
  • ok glad for at du fik det løst, det vil sige gammel grub ikke den nyere ‘ skinnende ‘ grub2. Jeg forstod ikke ‘, at RedHat var så langsom til at flytte til grub2. CentOS 7 bruger grub2, men CentOS 6 (og tidligere) bruger grub.

Svar

Sådan flyttede jeg en Debian-installation bestående af en bootpartition /boot og en rodpartition / til et nyt drev og gjorde det startbart ved hjælp af GNU GRUB :

Klonpartitioner

  • Brug GParted live CD til at oprette boot- og rodpartitionen på den nye drev.
  • Brug en rodkonsol i GParted, monter den gamle bootpartition (lad os sige den “s /dev/sda1) og den nye partition (/dev/sdb1): mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
  • Kopier dataene fra den gamle bootpartition til den nye: cp -afv /mnt/oldBoot /mnt/newBoot. Forklaring til cp -afv:
    • a står for ” arkiv ” hvilket betyder:
      • don t dereference links
      • kopi rekursivt (som -R)
      • bevar alle attributter (tidsstempel, ejer, tilladelse)
    • f: kraft, hvis en eksisterende destinationsfil kan ikke åbnes, fjern det og prøv igen
    • v: detaljeret, forklar hvad der gøres
  • Dette genererer noget output på din konsol, der viser dig, hvilken fil der i øjeblikket er kopieret, og om cp gør fremskridt
  • Monter og kopier filerne fra din gamle rodpartition til den nye:
    • Af hensyn til sikkerheden: umount /mnt/oldBoot && umount /mnt/newBoot
    • Monter den gamle og den nye rodpartition (forudsat at den er “s /dev/sda2 og /dev/sdb2): mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
    • Kopier datoen a af den gamle rodpartition til den nye rodpartition: cp -afv /mnt/oldRoot /mnt/newRoot
  • Rediger filsystemtabel , der definerer, hvilke partitioner der er monteret på boot (jeg bruger Vim til det):
    • vi /etc/fstab

    • Du vil bemærke, at der refereres til dine gamle partitioner her. Brug UUIDerne til de nye partitioner i stedet

    • Du kan midlertidigt indsætte alle UUIDer i fstab for lettere kopiering og indsættelse med :r !blkid

    • Brug UUIDerne til dine nye partitioner til at ændre posterne i fstab. De skal se sådan ud:

       `# <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 output fra blkid fra fstab, som du indsatte tidligere med :r !blkid

Installer GRUB

  • Monter de virtuelle filsystemer på GParted live CD:

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

  • Make GRUB-anvendelserne af GParted live-cden, der er tilgængelig for rodpartitionen: mount --bind /usr/ /mnt/newRoot/usr

  • Monter bootpartitionen på rodpartitionen siden GRUB gemmer sin konfiguration i /boot: mount /dev/sdb1 /mnt/newRoot/boot

  • Brug chroot /mnt/newRoot for at gøre den nye rodpartition midlertidigt roden til filsystemet

  • Opret en GRUB-konfigurationsfil ved /boot/grub/grub.cfg ved hjælp af update-grub2

  • Installer GRUB på det nye drev: grub-install /dev/sdb. Du skal ikke angive et partitionsnummer her

  • Gå tilbage til filsystemet på GParted live CD: exit

  • Afmonter partitioner: umount /mnt/newRoot/*

  • Lukningsmaskine

  • Hvis du har tilknyttet flere drev, skal du sørge for, at det nyere drev kommer først i startrækkefølgen

  • Start maskine

Disse instruktioner er inspireret af dem fra oaktreepeak.com .

Alternativt kan du give Clonezilla et forsøg på at opnå det samme.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *