ここ数年、自宅では Ubuntu を使っているのですが、他のディストリビューションも試してみようと思いたち、openSUSE をデュアルブートで入れようとしたのですがなかなか大変でした。
現在は、なんとかデュアルブートにできていますが、本当のところどうするのが一番いいのかまだ模索中です。その経緯です。
- openSUSE の Grub から Ubuntu が見えない
- openSUSE のブートローダーをインストールしない
- grub-mkconfig しても openSUSE を認識しない
- Grub が他の OS を検索しなくなっている
- openSUSE を ext4 でインストールする
- やっと Grub が openSUSE を認識してくれました
01openSUSE の Grub から Ubuntu が見えない
Ubuntu 同士であれば何も考えることなくパーティションを切ってインストールすればブートローダーの Grub が自動的にすべての OS を読み込んでくれます(22.04以降は未確認…)。
そのつもりで openSUSE をインストールしたらハマりました。openSUSE が書き込んだ Grub から Ubuntu が見えないのです。実はそのとき Ubuntu 上でブログを書いていたのですが、ちょっと行き詰まったために気分転換で openSUSE のインストールを始めたものですから焦りました(汗…)。
プロのライターでもありませんので焦るようなことではないんですけどね(笑)。
Grub と言えば、過去には
という記事も書いていますのである程度は理解しているのですが、すでにそれから数年以上の月日が流れていますのでかなり理解が曖昧になっています。
結局、詳細は省きますが、あれこれやっても Ubuntu の起動を復活させることができず、ああ、めんどくさい、入れ直しちゃえ! と Ubuntu そのものの再インストールとなりました。今では、Ubuntu のインストールや環境設定は1時間もかけずにできますので判断は早いです(笑)。
02openSUSE のブートローダーをインストールしない
ということで、まず、Ubuntu22.04 LTS を入れて通常作業ができる環境を整え、あらためて openSUSE をインストールするわけですが、その際、まずは openSUSE が入れるブートローダーをインストールしないでやってみます。
openSUSE のインストールの過程に「ブートローダーの設定」がありますので「管理しない」を選択して OS 本体のみインストールしてみます。
「管理しない」を選択して戻りますと「システムを起動できない」と警告が出ますが、Ubuntu の Grub で openSUSE を読み込めば問題ないはずですのでこれで進んでみます。
03grub-mkconfig しても openSUSE を認識しない
この段階では Ubuntu22.04 と openSUSE Leap 15.6 がインストールされた状態です。ただ、まだブートローダーには openSUSE は認識されていません。
Ubuntu を起動して、grub-mkconfig を使って Grub に openSUSE を認識させます。Ubuntu の Grub は Grub2 になっていますが、コマンドは grub2-mkconfig ではなく grub-mkconfig です。また、Grub の設定を変更した場合に update-grub を使いますが、これは grub-mkconfig のラッパーです。
#!/bin/sh
set -e
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
update-grub はこうなっています。update-grub2 も同じです。ですので、Grub の設定を変更した場合は、まずコンソールで
$ sudo grub-mkconfig -o /boot/grub/grub-new.cfg
などとして、仮の設定ファイルを出力して、grub.cfg との差分をとってチェックするほうが安全です。
ということで、これでうまくいくと思ったのですが、なぜか何度やってもインストールされている openSUSE を認識しません。
04Grub が他の OS を検索しなくなっている
これはかなり悩みました。こういうことでした。
Grub の設定ファイルは /boot/grub/grub.cfg ですが、設定変更にはこのファイルを直接触るのではなく、grub-mkconfig を使って行います。grub-mkconfig は Grub 用環境変数ファイルの /etc/default/grub と /etc/grub.d/ 以下の各ファイルを実行して得られる結果を使って grub.cfg をつくります。
で、Grub を実行している OS 以外がインストールされているかどうかを調べるファイルが /etc/grub.d/30_os-prober なんですが、なんと! この機能は Ubuntu22.04 から無効にされているらしいのです。理由はセキュアブート絡みらしいのですが詳しくは調べていませんので興味のある方はご自身でどうぞ。
この無効化は /etc/default/grub 内の変数 GRUB_DISABLE_OS_PROBER を true にすることで行われています。ですので、これを false に設定して grub-mkconfig を実行すれば openSUSE を読み込んでくれるはずです。
GRUB_DISABLE_OS_PROBER=false
ということで、この設定で grub-mkconfig を実行してみたんですが、これでもダメなんですね。相変わらず Ubuntu しか読み込みません。
btrfs ってなんだ?
じゃあ、試しに grubメニューを立ち上げてコマンドラインで起動してみようと考え grubメニューを出してみました。
“c” と打ってコマンドでデバイス内を確認したところです。
(hd0,gpt3) が openSUSE で、(hd0,gpt2) が Ubuntu です。openSUSE の方のファイル一覧は @/ となって表示されません。Ubuntu の方はディレクトリが表示されています。openSUSE のファイルシステムは btrfs となっています。
btrfs ってなんだ? ということで、そもそも openSUSE についてなんの知識もなく始めたことが間違いじゃないか気づき(遅い…)公式サイトなどを少し読んでみました。
このフィルシステム btrfs が読み込めない理由かも知れません。一度 openSUSE をext4 でインストールしてみることにしました。
05openSUSE を ext4 でインストールする
openSUSE のインストールの過程の「パーティション設定の提案」からです。
openSUSE のパーティションのファイルシステムが btrfs になっています。下の選択肢「ガイド付き設定」をクリックし「現在表示されている提案を元にする」を選びます。
openSUSE のパーティション sda3 を選択し、下の「編集」をクリックします。
ファイルシステムの選択肢「ext4」を選択します。
戻りますと sda3 が ext4 になっていますので、これでインストールを進めます。
06やっと Grub が openSUSE を認識してくれました
Ubuntu, openSESU ともに ext4 でフォーマットされています。この状態で Ubuntu を立ち上げ、再度 grub-mkconfig を実行してみます。
grub.cfg の該当部分です。やっと 30_os-prober が openSUSE を読み込んでくれました。
再起動してみましょう。
grubメニューに openSUSE が現れました。
やりました。やっと openSUSE と Ubuntu のデュアルブート環境ができました。
Grub の再勉強と btrfs, openSUSE の勉強の始まりです(笑)。