2台のハードドライブがあり、2台の対応するGrubがあります。 1つはArchLinuxからのもので、もう1つはUbuntuからのものです。 Archのグラブを使用して、どちらのディストリビューションでも起動できます。ただし、Ubuntuのグラブを使用すると、ArchとUbuntuの両方を表示できますが、Archを起動できません。エラーが発生します:
Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.
grub.cfg
を比較しました 両方のディストリビューションで。 Ubuntuのグラブでは、次の行でArchのエントリを確認できます。
initrd /boot/intel-ucode.img
Archのgrub.cfg
に従うように変更しました :
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
これで、UbuntuのgrubからArchを起動できます。 Ubuntuはデフォルトでこの必須オプションを追加していないようです。 Ubuntuに正しいエントリを自動的に作成させるにはどうすればよいですか?
編集
Archのgrubをgrub-mkconfig -o /boot/grub/grub.cfg
で更新しています 。 Ubuntuでは、両方のupdate-grub
を試しました 上記のrawコマンド(エイリアス化されています)。
編集2
/etc/default/grub
のコメントされていない行
GRUB_DEFAULT="saved"
GRUB_SAVEDEFAULT="true"
GRUB_HIDDEN_TIMEOUT_QUIET="true"
GRUB_TIMEOUT="3"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
承認された回答:
実際、この問題を解決するには、2つのファイルを変更する必要があります。これをLubuntu16.04.1とManjaroLinuxでテストしました。
Ubuntuの場合:
1)ファイル / usr / lib / linux-boot-probes / Mounted / 40grub2 すべてのinitrdパラメーターを処理しない関数parse_grub_menuがあります。 ‘ case“ $ 1” in…initrd)を変更する必要があります ‘:
a)割り当てを削除する
initrd="$(echo "$2" ...)"
b)削除した行の代わりに2行を追加します:
shift 1
initrd="$(echo "[email protected]" | sed 's/(.*)//')"
2)ファイル /etc/grub.d/30_os-prober forループ内で、LINITRDの割り当てを修正します:
for LINUX in ${LINUXPROBED}; do
...
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
最初の修正では、Manjaroで利用可能なすべてのinitrd情報が考慮されます。 2番目の修正では、一部の「^」文字をスペースに変更して、生成されたinitrd行をクリーンアップします。