Nejsem expert na grub2 (omlouvám se), ale zkuste přidat --skip-fs-probe
na váš řádek grub-install, zjistil jsem, že to brání vytvoření /boot/grub/device.map
což může způsobit zavádění na výzvu grub. Myslím, že bez tohoto parametru si grub-install místo toho, aby dělal, co mu řeknete, myslí, že je chytřejší než vy a může dělat něco jiného.
Další věcí je ujistit se, že používáte správný 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, takže musíte použít grub2-install
. Naučil jsem se tvrdě...
A jak zdůraznil @wurtel (sláva), měli byste zadat jednotku, nikoli oddíl. Grub2 se nainstaluje do sektoru 0 celé diskové jednotky a tento 'stub' je to, co se spouští při bootování, ale potřebuje vědět, kde se na disku nachází, aby 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
není ve skutečnosti určen k použití pro grub2 verze 1.99++, i když podle mých zkušeností funguje. Měli byste použít --boot-directory
a podívejte se na skutečný spouštěcí adresář, takže by vám to poskytlo:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Takto jsem přesunul instalaci Debianu sestávající ze zaváděcího oddílu /boot
a kořenový oddíl /
na nový disk a udělal z něj bootovatelný pomocí GNU GRUB:
Klonovat oddíly
- Pomocí živého disku CD GParted vytvořte spouštěcí a kořenový oddíl na nové jednotce.
- Pomocí kořenové konzoly v GParted připojte starý spouštěcí oddíl (řekněme, že je to
/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á "archive", což znamená:- neodkazujte odkazy
- kopírujte rekurzivně (jako
-R
) - zachovat všechny atributy (časové razítko, vlastník, oprávnění)
f
:vynutit, pokud existující cílový soubor nelze otevřít, odeberte jej a zkuste to znovuv
:podrobný, vysvětlete, co se dělá
- Tím se na vaší konzoli vygeneruje výstup, který vám ukáže, který soubor je aktuálně zkopírován a zda
cp
dělá pokrok - Připojte a zkopírujte soubory ze starého kořenového oddílu do nového:
- Pro bezpečnost:
umount /mnt/oldBoot && umount /mnt/newBoot
- Připojte starý a nový kořenový oddíl (za předpokladu, že je
/dev/sda2
a/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- Zkopírujte data ze starého kořenového oddílu do nového kořenového oddílu:
cp -afv /mnt/oldRoot /mnt/newRoot
- Pro bezpečnost:
- Upravte tabulku souborového systému, která definuje, které oddíly jsou připojeny při spouštění (použiji k tomu Vim):
-
vi /etc/fstab
-
Všimnete si, že zde jsou odkazy na vaše staré oddíly. Místo toho použijte UUID nových oddílů
-
Všechny UUID můžete dočasně vložit do fstab pro snazší kopírování a vkládání pomocí
:r !blkid
-
Použijte UUID vašich nových oddílů ke změně položek ve fstab. Měly by vypadat nějak 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 pomocí:r !blkid
- Odeberte výstup
-
Nainstalujte GRUB
-
Připojte virtuální souborové systémy živého CD GParted:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
Zpřístupněte nástroje GRUB z živého CD GParted kořenovému oddílu:
mount --bind /usr/ /mnt/newRoot/usr
-
Připojte zaváděcí oddíl na kořenový oddíl, protože GRUB uloží svou konfiguraci do
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Použijte
chroot /mnt/newRoot
aby se nový kořenový oddíl dočasně stal kořenem souborového systému -
Vytvořte konfigurační soubor GRUB na
/boot/grub/grub.cfg
pomocíupdate-grub2
-
Nainstalujte GRUB na nový disk:
grub-install /dev/sdb
. Zde nesmíte zadávat číslo oddílu -
Návrat do souborového systému živého CD GParted:
exit
-
Odpojit oddíly:
umount /mnt/newRoot/*
-
Vypnutí stroje
-
Pokud máte připojeno více jednotek, ujistěte se, že novější disk je v pořadí spouštění první
-
Spusťte stroj
Tyto pokyny jsou inspirovány pokyny z webu oaktreepeak.com.
Případně můžete zkusit Clonezillu, abyste dosáhli stejného.