Mám virtuální schránku spuštěnou s CentOS.
Připojil jsem nový virtuální disk ke stávajícímu CentOS VM a já nyní se pokouším nainstalovat GRUB na tento nově připojený disk.
Později vygeneruji druhý virtuální počítač s nově připraveným zaváděcím pevným diskem s vlastním kořenovým souborovým systémem a jádrem.
I vyzkoušeli následující kroky:
- Připojil nový virtuální disk k existujícímu pracovnímu počítači CentOS.
- Vytvořil nový oddíl pomocí
fdisk /dev/sdb
. Při vytváření oddílů jsem vybral možnosti primární oddíl, oddíl číslo 1 a další výchozí možnosti. - Naformátoval disk pomocí
mkfs.ext3 /dev/sdb1
. - Připojil disk k
/media/new_drive
. - Nainstalován GRUB
grub-install /dev/sdb1 --root-directory=/media/new_drive/
.
Poté se druhý VM s nově připraveným pevným diskem nespustil; Zobrazila se chyba: could not read from the boot medium
. Zdá se, že MBR není aktualizován po grub-install
, ale vidím GRUB nainstalovaný pod /boot/grub
na nové jednotce.
Ale nejhorší je, že to poškodilo můj stávající CentOS GRUB: CentOS VM visí a ukazuje černou obrazovku s jediným textem GRUB
.
Proč nezmění grub-install /dev/sdb1
MBR sdb1? Není to správný způsob instalace GRUBu na nový disk?
Komentáře
Odpověď
Nejsem expert na grub2 (omlouvám se), ale zkuste přidat --skip-fs-probe
na vaši linku grub-install, zjistil jsem, že to brání vytvoření /boot/grub/device.map
, což může způsobit zavedení do výzvy grub. Myslím, že bez toho parametr grub-install si místo toho, co říkáte, myslí, že je chytřejší než vy, a může dělat něco jiného.
Další věcí je mít jistotu, že používáte správnou grub-install (tj. pro grub2 a ne pro původní grub). To není problém, pokud jste uvnitř Centos, ale s SystemRecoveryCD jsou k dispozici obě verze a takže musíte použít grub2-install
. Dozvěděl jsem se to těžce …
A jak @wurtel zdůraznil (kudos), měli byste specifikovat disk, nikoli oddíl. Grub2 se instaluje do sektoru 0 celé diskové jednotky a tento „útržek“ se spouští při bootování, ale potřebuje vědět, kde na disku je, že by měl nainstalovat soubory pro další fázi bootování – to je to, co --root-directory
parametr je pro. (Myslím.)
Čtení man grub-install
a googlování vidím, že --root-directory
ve skutečnosti není určen k použití grub2 verze 1.99 ++, i když to podle mých zkušeností funguje. Měli byste použít --boot-directory
a odkazovat se na skutečný spouštěcí adresář, takže byste získali:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Komentáře
- Můj první pokus byl bez rozdělení a formování
grub-install /dev/sdb
, ale došlo k chybě. Později jsem to zkusil s rozděleným a formátovaným diskem, s formátovaným diskem jsem vždy používal / dev / sdb1, pokusím se spolu –skip-fs-probe - @Renjith oh a kořenový adresář by měl odkazovat připojený přípojný bod při spuštění grub-install, takže musíte připojit oddíl na nový disk, např. na
/mnt/sys2
a poté na řádku grub-install zadejte--root-directory=/mnt/sys2
. Je to ‚ protiintuitivní (myslím, že je to spousta grubů), ale ‚ to funguje. - trochu jsem upravil svou odpověď …
- Grub právě teď používám 0.97, což ‚ nepodporuje –skip-fs-probe . ale bez toho to fungovalo. Chyba byla sdb1.
- ok, ráda, že jste to vyřešili, to je starý grub, ne novější ‚ lesklý ‚ grub2. Neuvědomil jsem si ‚, že RedHat je tak pomalý, že přejde na grub2. CentOS 7 používá grub2, ale CentOS 6 (a starší) používá grub.
Odpověď
Takto jsem přesunul instalaci Debianu skládající se ze zaváděcího oddílu /boot
a kořenový oddíl /
na nový disk a provedli jeho zavedení pomocí GNU GRUB :
Klonovat oddíly
- Pomocí GParted live CD vytvořte zaváděcí a kořenový oddíl na novém disk.
- Pomocí kořenové konzoly v GParted připojte starý spouštěcí oddíl (řekněme to s
/dev/sda1
) a nový oddíl (/dev/sdb1
):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- Zkopírujte data ze starého spouštěcího oddílu do nového:
cp -afv /mnt/oldBoot /mnt/newBoot
. Vysvětlenícp -afv
:-
a
znamená “ archiv “ což znamená:- nedereferenční odkazy
- kopírujte rekurzivně (jako
-R
) - zachovat všechny atributy (časové razítko, vlastník, oprávnění)
-
f
: vynutit, pokud existuje existující cílový soubor nelze otevřít, odstraňte ji a zkuste to znovu -
v
: podrobně, vysvětlete, co se děje
-
- Tím se na konzole vygeneruje nějaký výstup, který vám ukáže, který soubor je aktuálně zkopírován a zda
cp
udělá pokrok - Připojte a zkopírujte soubory ze starého kořenového oddílu do nový:
- Z bezpečnostních důvodů:
umount /mnt/oldBoot && umount /mnt/newBoot
- Připojte starý a nový kořenový oddíl (za předpokladu, že je to „s
/dev/sda2
a/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- zkopírujte data starého kořenového oddílu do nového kořenového oddílu:
cp -afv /mnt/oldRoot /mnt/newRoot
- Z bezpečnostních důvodů:
- Upravit tabulka souborového systému , která definuje, které oddíly jsou připojeny při spuštění (k tomu použiji Vim):
-
vi /etc/fstab
-
Zjistíte, že zde jsou odkazy na vaše staré oddíly. Místo toho použijte UUID nových oddílů
-
Všechna UUID můžete dočasně vložit do fstab pro snazší kopírování a vkládání pomocí
:r !blkid
-
Ke změně položek ve fstab použijte UUID vašich nových oddílů. Měly by vypadat asi takto:
`# <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`
- Odeberte výstup
blkid
z fstab, který jste vložili dříve s:r !blkid
- Odeberte výstup
-
nainstalovat GRUB
-
Připojte virtuální souborové systémy živého disku GParted:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
Vytvořit využití GRUBu živého CD GParted dostupné pro kořenový oddíl:
mount --bind /usr/ /mnt/newRoot/usr
-
Od kořene GRUB připojte spouštěcí oddíl na kořenový oddíl. uloží svou konfiguraci do
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Použít
chroot /mnt/newRoot
dočasný přechod nového kořenového oddílu na kořenový adresář souborového systému -
Vytvořte konfigurační soubor GRUB na adrese
/boot/grub/grub.cfg
pomocíupdate-grub2
-
Nainstalujte GRUB na nový disk:
grub-install /dev/sdb
. Zde nelze zadat číslo oddílu. -
Vraťte se do souborového systému živého CD GParted:
exit
-
Odpojit oddíly:
umount /mnt/newRoot/*
-
Vypínací stroj
-
Pokud máte připojeno více disků, ujistěte se, že novější disk je na prvním místě v pořadí zavádění.
-
Spustit stroj
Tyto pokyny jsou inspirovány pokyny oaktreepeak.com .
Alternativně můžete zadat Clonezilla a pokusit se dosáhnout stejného.
/dev/sdb1
není kde systém BIOS hledá MBR, je ‚ s v/dev/sdb
tj. úplně prvním sektoru disku.grub-install /dev/sdb --root-directory=/media/new_drive/
místo sdb1