上記のコードに基づいて修正されたソリューション
上記のソリューションは、ブートパーティションをファイルシステムの/(ルート)にマウントするため、問題なく完全に機能することはありません。もちろん、grubは/ bootが存在しないと不平を言っています。これはその問題を修正します:
mkdir /mnt/chrootdir
mkdir /mnt/chrootdir/boot
mount /dev/sda1 /mnt/chrootdir/boot
for dir in proc dev sys etc bin sbin var usr lib lib64 tmp; do mkdir /mnt/chrootdir/$dir && mount --bind /$dir /mnt/chrootdir/$dir ; done
chroot /mnt/chrootdir
update-grub2 # inside chroot
ご覧のように、改行も削除したので、誰でも簡単に実行できます。
別の(簡単な)ソリューション
問題が解決しない場合は、/ bootパーティションを/(ルート)パーティションにコピーしてください。そのために、UbuntuライブブートDVDを使用してシステムを起動し、ターミナルを開きます。その中に入力:
sudo su
fdisk -l
使用しているパーティションを確認します。私の場合、sda1は約250MBの/ bootパーティションと約500GBのsda5です。以下のコマンドでこれらの値を使用します。
mkdir /mnt/boot/
mount /dev/sda1 /mnt/boot/
mkdir /mnt/root/
mount /dev/sda5 /mnt/root/
cp -R /mnt/boot/ /mnt/root/boot/
データパーティションのブート可能フラグを設定し、ブートパーティションのそれを削除します。
fdisk /dev/sda
b -> 1 (unset the bootable flag for the first partition)
b -> 5 (set the bootable flag for the fifth partition)
w -> write changes to the MBR
これで、コンピューターはsda5内でブートファイルを探します。もう一度chrootを実行します。今回は、grubに必要な、Ubuntuライブディスクによって既に生成されているいくつかの必要なフォルダーを使用します。
mkdir /mnt/chrootdir/
mkdir /mnt/chrootdir/dev/
mkdir /mnt/chrootdir/proc/
mkdir /mnt/chrootdir/sys/
mount /dev/sda5 /mnt/chrootdir/
mount --bind /dev/ /mnt/chrootdir/dev/
mount --bind /proc/ /mnt/chrootdir/proc/
mount --bind /sys/ /mnt/chrootdir/sys/
chroot /mnt/chrootdir/
grub-install /dev/sda
インストールが完了しました。エラーは報告されていません。
grub.cnfファイルが生成されたというメッセージが表示されない場合は、更新コマンドも実行します。
update-grub2 /dev/sda
これで安全に再起動でき、よく知られているブートメニューが再び表示されます。
このソリューションは、物理サーバーから仮想マシンへの移行後に機能していた唯一のソリューションでした。誰かがこれが役に立つと思うことを願っています!