GNU/Linux >> Linux の 問題 >  >> Ubuntu

UbuntuのGrubでInitramfsを使用してArchLinuxを起動する方法は?

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行をクリーンアップします。


Ubuntu
  1. Ubuntu – GrubがグラフィカルUIを使用/開始しないようにする方法は?

  2. Nfsを使用してUbuntuServer14.04をネットワークブートする方法は?

  3. UbuntuとLinuxMintをデュアルブートする方法は?

  1. ArchLinuxをインストールする方法

  2. Debian / Ubuntu、Fedora、Arch Linux / Manjaro などでコンソール (テキスト) モードで起動する方法

  3. Ubuntu をリカバリ モードで起動する方法

  1. GrubRescueを使用してLinuxの起動エラーを修正する方法

  2. WindowsXPとUbuntuLinuxをデュアルブートする方法

  3. UbuntuでGrub2を修復する方法