Ik heb een virtuele box die draait met CentOS.

Ik heb een nieuwe virtuele schijf aan de bestaande CentOS VM gekoppeld en ik “m probeer nu GRUB op deze nieuw aangesloten schijf te installeren.

Later zal ik een tweede VM openen met een nieuw voorbereide opstartbare harde schijf met een aangepast rootbestandssysteem en kernel.

I hebben de volgende stappen geprobeerd:

  • Een nieuwe virtuele schijf aan de bestaande werkende CentOS-machine gekoppeld.
  • Een nieuwe partitie gemaakt met fdisk /dev/sdb. Tijdens het partitioneren koos ik de opties primaire partitie, partitienummer 1 en andere standaardopties.
  • Formatteerde de schijf met mkfs.ext3 /dev/sdb1.
  • De schijf gemount op /media/new_drive.
  • GRUB geïnstalleerd grub-install /dev/sdb1 --root-directory=/media/new_drive/.

Hierna startte de tweede VM met de nieuw voorbereide harde schijf niet op; Ik krijg de foutmelding: could not read from the boot medium. Het lijkt erop dat de MBR niet is bijgewerkt na grub-install, maar ik zie GRUB geïnstalleerd onder /boot/grub op de nieuwe schijf.

Maar het ergste is dat het mijn bestaande CentOS GRUB heeft beschadigd: de CentOS VM blijft hangen en toont een zwart scherm met als enige tekst GRUB.

Waarom wijzigt grub-install /dev/sdb1 de MBR van sdb1 niet? Is dit niet de juiste manier om GRUB op een nieuwe schijf te installeren?

Reacties

  • /dev/sdb1 is dat niet waar het BIOS zoekt naar MBR, het ‘ bevindt zich in /dev/sdb dwz de allereerste sector van de schijf.
  • bedoel je dat ik grub-install /dev/sdb --root-directory=/media/new_drive/ moet gebruiken in plaats van sdb1
  • ja, dat is precies wat @wurtel betekent
  • Ja. Ervan uitgaande dat je ‘ een geschikt rootbestandssysteem op die locatie hebt geplaatst (ik zie ‘ die stap niet vermelden tussen het aankoppelen en het draaien van grub -install).
  • Ik zal het proberen met / dev / sdb, ja heb ‘ niet bereikt voordat het rootbestandssysteem werd geplaatst, ik dacht dat ik eerst zou proberen te laten zien up grub-scherm.

Answer

Ik “ben geen grub2-expert (sorry) maar probeer --skip-fs-probe naar je grub-install-regel, heb ik ontdekt dat dit het maken van /boot/grub/device.map verhindert, wat kan leiden tot opstarten naar een grub-prompt. Ik denk dat zonder dit parameter grub-install, in plaats van te doen wat je het vertelt, denkt dat het slimmer is dan jij, en misschien iets anders doet.

Een ander ding is om er zeker van te zijn dat je de juiste grub-install gebruikt (dwz voor grub2 en niet voor originele grub). Dit is geen probleem als je binnen Centos bent, maar met SystemRecoveryCD zijn beide versies beschikbaar en dus je moet grub2-install gebruiken. Ik heb het op de moeilijke manier geleerd …

En zoals @wurtel opmerkte (kudos), je zou een schijf moeten specificeren en geen partitie. Grub2 installeert in sector 0 van de hele schijf, en deze “stub” wordt uitgevoerd tijdens het opstarten, maar het moet weten waar de bestanden zich op de schijf bevinden om de bestanden te installeren voor de volgende fase van het opstarten – dit is wat de --root-directory parameter is voor. (Denk ik.)

Door man grub-install te lezen en te googlen, zie ik dat --root-directory niet echt bedoeld is om te worden gebruikt voor grub2 versies 1.99 ++, hoewel het naar mijn ervaring werkt. Het is de bedoeling dat je --boot-directory gebruikt en naar de daadwerkelijke opstartdirectory verwijst, dus dit geeft je:

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

Opmerkingen

  • Mijn eerste poging was het zonder partitioneren en formatteren van grub-install /dev/sdb, maar het gaf een fout. Later probeerde ik het met een gepartitioneerde en geformatteerde schijf, met een geformatteerde schijf gebruikte ik altijd / dev / sdb1, ik zal proberen –skip-fs-probe
  • @Renjith oh en de root-directory zou moeten verwijzen naar het gemounte mountpoint als je grub-install uitvoert, dus je moet de partitie op de nieuwe schijf mounten, bijv. op /mnt/sys2 en specificeer vervolgens in je grub-install-regel --root-directory=/mnt/sys2. Het is ‘ s contra-intuïtief (zoals veel grub-dingen denk ik) maar het ‘ s hoe het werkt.
  • heb mijn antwoord enigszins aangepast …
  • De grub op dit moment gebruik ik 0.97, die ‘ –skip-fs-probe niet ondersteunt . maar zonder dat werkte het. sdb1 was de fout.
  • ok blij dat je het opgelost hebt, dat is oud, niet het nieuwere ‘ glanzend ‘ grub2. Ik had ‘ niet door dat RedHat zo traag was om naar grub2 te gaan. CentOS 7 gebruikt grub2 maar CentOS 6 (en eerder) gebruikt grub.

Antwoord

Dit is hoe ik een Debian-installatie heb verplaatst die bestaat uit een opstartpartitie /boot en een rootpartitie / naar een nieuwe schijf en deze opstartbaar gemaakt met GNU GRUB :

Partities klonen

  • Gebruik de GParted live-cd om de opstart- en rootpartitie op de nieuwe schijf.
  • Gebruik een rootconsole in GParted, koppel de oude opstartpartitie (laten we zeggen dat het is /dev/sda1) en de nieuwe partitie (/dev/sdb1): mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
  • Kopieer de gegevens van de oude opstartpartitie naar de nieuwe: cp -afv /mnt/oldBoot /mnt/newBoot. Uitleg van cp -afv:
    • a staat voor ” archief ” wat betekent:
      • verwijs niet naar links
      • kopieer recursief (zoals -R)
      • behoudt alle attributen (tijdstempel, eigenaar, toestemming)
    • f: forceer, indien een bestaand doelbestand kan niet worden geopend, verwijder het en probeer het opnieuw
    • v: uitgebreid, leg uit wat er wordt gedaan
  • Dit genereert wat output op je console die laat zien welk bestand momenteel gekopieerd is en of cp vooruitgang boekt
  • Koppel en kopieer de bestanden van je oude rootpartitie naar de nieuwe:
    • Voor de veiligheid: umount /mnt/oldBoot && umount /mnt/newBoot
    • Mount de oude en de nieuwe rootpartitie (ervan uitgaande dat het “s /dev/sda2 en /dev/sdb2): mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
    • Kopieer de dat een van de oude rootpartitie naar de nieuwe rootpartitie: cp -afv /mnt/oldRoot /mnt/newRoot
  • Bewerk de bestandssysteemtabel die definieert welke partities bij het opstarten worden gemount (daarvoor gebruik ik Vim):
    • vi /etc/fstab

    • U zult opmerken dat hier naar uw oude partities wordt verwezen. Gebruik in plaats daarvan de UUIDs van de nieuwe partities.

    • U kunt tijdelijk alle UUIDs in fstab invoegen voor eenvoudiger kopiëren en plakken met :r !blkid

    • Gebruik de UUIDs van uw nieuwe partities om de items in fstab te wijzigen. Ze zouden er ongeveer zo uit moeten zien:

       `# <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` 
      • Verwijder de uitvoer van blkid uit fstab die je hebt ingevoegd eerder met :r !blkid

Installeer GRUB

  • Mount de virtuele bestandssystemen van de GParted live CD:

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

  • Maak de GRUB utilites van de GParted live CD die beschikbaar zijn voor de root partitie: mount --bind /usr/ /mnt/newRoot/usr

  • Mount de boot partitie op de root partitie sinds GRUB zal zijn configuratie opslaan in /boot: mount /dev/sdb1 /mnt/newRoot/boot

  • Gebruik chroot /mnt/newRoot om de nieuwe rootpartitie tijdelijk de root van het bestandssysteem te maken

  • Maak een GRUB-configuratiebestand aan op /boot/grub/grub.cfg gebruikmakend van update-grub2

  • Installeer GRUB op de nieuwe schijf: grub-install /dev/sdb. Je moet hier “geen partitienummer specificeren

  • Keer terug naar het bestandssysteem van de GParted live CD: exit

  • Partities ontkoppelen: umount /mnt/newRoot/*

  • Machine uitschakelen

  • Als je meerdere schijven hebt aangesloten, zorg er dan voor dat de nieuwere schijf als eerste komt in de opstartvolgorde.

  • Start de machine

Deze instructies zijn geïnspireerd op die van oaktreepeak.com .

U kunt ook Clonezilla probeer hetzelfde te bereiken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *