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:aznamená "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
cpdě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/sda2a/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
blkidz 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/newRootaby 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.cfgpomocí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.