Jag har en virtuell ruta som körs med CentOS.

Jag har anslutit en ny virtuell disk till den befintliga CentOS VM och jag ”m försöker nu installera GRUB på denna nyligen anslutna disk.

Senare tar jag upp en andra virtuell dator med en nyförberedd startbar hårddisk med ett anpassat rotfilsystem och kärna.

I har provat följande steg:

  • Bifogade en ny virtuell disk till den befintliga fungerande CentOS-maskinen.
  • Skapade en ny partition med fdisk /dev/sdb Under partitioneringen valde jag alternativen primärpartition, partition nummer 1 och andra standardalternativ.
  • Formaterade disken med mkfs.ext3 /dev/sdb1.
  • Monterade disken till /media/new_drive.
  • Installerad GRUB grub-install /dev/sdb1 --root-directory=/media/new_drive/.

Efter detta startade inte den andra virtuella datorn med den nyligen förberedda hårddisken; Jag fick felet: could not read from the boot medium. Det verkar som om MBR inte uppdateras efter grub-install, men jag kan se GRUB installerad under /boot/grub på den nya enheten.

Men det värsta är att det har skadat min befintliga CentOS GRUB: CentOS VM hänger och visar en svart skärm med den enda texten GRUB.

Varför ändrar grub-install /dev/sdb1 inte MBR för sdb1? Är det inte rätt sätt att installera GRUB på en ny enhet?

Kommentarer

  • /dev/sdb1 är inte där BIOS letar efter MBR är det ’ s i /dev/sdb dvs den allra första delen av skivan.
  • menar jag att jag måste använda grub-install /dev/sdb --root-directory=/media/new_drive/ istället sdb1
  • ja, det är precis vad @wurtel betyder
  • Ja. Förutsatt att du ’ har lagt ett lämpligt rotfilsystem på den platsen (jag ser inte ’ det steget som nämns mellan monterings- och löpgrubben -install).
  • Jag kommer att försöka med / dev / sdb, ja, ’ tänkte inte nå root-filsystemet, jag trodde att jag först skulle försöka visa upp grubskärmen.

Svar

Jag är inte en grub2-expert (sorry) men försök att lägga till --skip-fs-probe till din grub-installationsrad, jag har upptäckt att detta förhindrar skapandet av /boot/grub/device.map vilket kan orsaka start till en grubprompt. Jag tror att utan detta parameter grub-install, istället för att göra vad du säger den, tycker att den är smartare än du och kan göra något annorlunda.

En annan sak är att vara säker på att du använder rätt grub-installation (dvs. för grub2 och inte för original grub). Detta är inte ett problem om du är inne i Centos men med SystemRecoveryCD finns båda versionerna tillgängliga och så du måste använda grub2-install. Jag lärde mig på det hårda sättet …

Och som @wurtel påpekade (kudos), bör du ange en enhet inte en partition. Grub2 installeras i sektor 0 på hela hårddisken, och den här ”stubben” är vad som körs vid starttid, men den måste veta var på disken den ska installera filerna för nästa steg i startningen – detta är vad --root-directory -parametern är för. (Tror jag.)

Läser man grub-install och googlar ser jag att --root-directory egentligen inte är avsedd att användas för grub2 versioner 1.99 ++, men det fungerar enligt min erfarenhet. Du är tänkt att använda --boot-directory och hänvisa till den faktiska startkatalogen, så detta skulle ge dig:

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

Kommentarer

  • Mitt första försök var utan att partitionera och bilda grub-install /dev/sdb men det gav fel. Senare försökte jag med partitionerad och formaterad disk, med formaterad disk använde jag alltid / dev / sdb1, jag kommer att försöka längs –skip-fs-probe
  • @Renjith oh och rotkatalogen ska hänvisa till den monterade monteringspunkten när du kör grub-install, så du måste montera partitionen på den nya enheten t.ex. vid /mnt/sys2 och ange --root-directory=/mnt/sys2 på din grubinstallationsrad. Det ’ är kontraintuitivt (som en massa grubblar tycker jag) men det ’ är hur det fungerar.
  • har redigerat mitt svar något …
  • Grubben just nu använder jag 0,97, vilket inte ’ t stöd –skip-fs-probe . men utan det fungerade det. sdb1 var misstaget.
  • ok glad att du fick det löst, det vill säga gammal grub inte den nyare ’ blank ’ grub2. Jag insåg inte ’ att RedHat var så långsam att flytta till grub2. CentOS 7 använder grub2 men CentOS 6 (och tidigare) använder grub.

Svar

Så här flyttade jag en Debian-installation bestående av en startpartition /boot och en rotpartition / till en ny enhet och gjorde den startbar med GNU GRUB :

Klonpartitioner

  • Använd GParted live CD och skapa start- och rootpartitionen på den nya enhet.
  • Med hjälp av en rotkonsol i GParted monterar du den gamla startpartitionen (låt oss säga den ”s /dev/sda1) och den nya partitionen (/dev/sdb1): mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
  • Kopiera data från den gamla startpartitionen till den nya: cp -afv /mnt/oldBoot /mnt/newBoot. Förklaring till cp -afv:
    • a står för ” arkiv ” vilket betyder:
      • inte dereferenslänkar
      • kopiera rekursivt (som -R)
      • bevara alla attribut (tidsstämpel, ägare, behörighet)
    • f: kraft, om en befintlig målfil kan inte öppnas, ta bort det och försök igen
    • v: ingående, förklara vad som görs
  • Detta genererar en del utdata på konsolen som visar vilken fil som för närvarande kopieras och om cp gör framsteg
  • Montera och kopiera filerna från din gamla rotpartition till den nya:
    • För säkerhet: umount /mnt/oldBoot && umount /mnt/newBoot
    • Montera den gamla och den nya rotpartitionen (förutsatt att den är ”s /dev/sda2 och /dev/sdb2): mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
    • Kopiera dat a av den gamla rotpartitionen till den nya rotpartitionen: cp -afv /mnt/oldRoot /mnt/newRoot
  • Redigera filsystemstabell som definierar vilka partitioner som är monterade vid start (jag använder Vim för det):
    • vi /etc/fstab

    • Du kommer att märka att det refereras till dina gamla partitioner här. Använd UUID: erna för de nya partitionerna istället

    • Du kan tillfälligt infoga alla UUID: er i fstab för enklare kopiering och klistra in med :r !blkid

    • Använd UUID: erna för dina nya partitioner för att ändra posterna i fstab. De ska se ut så här:

       `# <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` 
      • Ta bort utdata från blkid från fstab som du satte in tidigare med :r !blkid

Installera GRUB

  • Montera de virtuella filsystemen på GParted live-CD: n:

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

  • Make GRUB-användningarna av GParted live-CD: n som är tillgängliga för rotpartitionen: mount --bind /usr/ /mnt/newRoot/usr

  • Montera startpartitionen på rotpartitionen sedan GRUB lagrar konfigurationen i /boot: mount /dev/sdb1 /mnt/newRoot/boot

  • Använd chroot /mnt/newRoot för att göra den nya rotpartitionen tillfälligt roten till filsystemet

  • Skapa en GRUB-konfigurationsfil vid /boot/grub/grub.cfg med update-grub2

  • Installera GRUB på den nya enheten: grub-install /dev/sdb. Du måste inte ange ett partitionsnummer här

  • Återgå till filsystemet på GParted live-CD: n: exit

  • Demontera partitioner: umount /mnt/newRoot/*

  • Avstängningsmaskin

  • Om du har flera enheter anslutna, se till att den nyare enheten kommer först i startordningen

  • Starta maskinen

Dessa instruktioner är inspirerade av de från oaktreepeak.com .

Alternativt kan du ge Clonezilla ett försök att uppnå detsamma.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *