Oprava bootloaderu Grub uvnitř KVM virtuálního serveru

Z nějakého důvodu mi po restartu přestaly nabíhat KVM virtuální servery. Možná jsem já udělal něco špatně nebo se jedná o nějaký bug v Debianu, který primárně na virtuální servery používám. Každopádně boot končil s chybou:

Nevím přesně co chyba error: symbol `grub_calloc` not found. znamená, ale je potřeba opravit instalaci bootloaderu Grub, aby virtuální server mohl opět nabootovat.

Nejprve je potřeba virtuální server úplně zastavit a namountovat diskový oddíl virtuálního serveru s root adresářem. Ať už je image disku uložen v souboru nebo jako LVM logický disk, není možné ho namountovat přímo.

Jako první si disk připojíme jako loop zařízení:

losetup -Pf /dev/vg0/disk1

Připojená loop zařízení je možné zobrazit pomocí:

losetup -a

Vytvoříme si adresář do kterého připojíme diskový oddíl (p1) z /dev/loop0:

mkdir /mnt/rescue
mount /dev/loop0p1 /mnt/rescue/

Abychom mohli pracovat s diskem, připojíme si do /mnt/rescue také systémové adresáře proc, sys, tmp, dev:

for fs in {proc,sys,tmp,dev}; do mount -o bind /$fs /mnt/rescue/$fs; done

Nyní si adresář /mnt/rescue spustíme v chrootu, abychom se dostali dovnitř našeho virtuálního serveru:

chroot /mnt/rescue

Uvnitř chrootu spustíme instalaci grubu na náš disk /dev/loop0:

grub-install /dev/loop0

Grub by měl být opraven a můžeme začít uklízet. Ukončíme chroot a odmountujeme systémové adresáře:

exit
for fs in {proc,sys,tmp,dev}; do umount /mnt/rescue/$fs; done

Odmountujeme samotný root adresář našeho virtuálního serveru a zrušíme loop zařízeni disku:

umount /mnt/rescue
losetup -d /dev/loop0

Vše je nyní dokončeno a po spuštění virtuálu již naběhl bez problémů.