kexecでUbuntu24.04環境でデュアルブート再起動せずに切り替える方法

# はじめに

こんにちは、しゅんです。

新年入ってかなり気合入っています。実は自分のリアルのことで色々と現実逃避しているだけです。
今回は、Ubuntu環境でkexecを利用してデュアルブート構成のOSを切り替える方法を解説します！この記事は、デュアルブートを利用している方に向けた内容で、OSを切り替える手間を軽減したい場合に役立つ手法です。

それと！windowsはすでに半年くらい前に消しました。
自分の環境は
`SSD01`→`ubuntu24.04`
`SSD02`→`ubutu22.04`

:::note warn
注意: この方法では、システムに問題が発生した場合の保証はできません。データ損失やOSの破損などのリスクを理解した上で、自己責任でお試しください。
:::

# 実現したいこと

`Ubuntu 24.04`と`22.04`がインストールされたデュアルブート環境で、再起動を伴わずにOSを切り替えます。

通常、OSを切り替える際には再起動して`GRUB`メニューから選択しますが、`kexec`を利用すると高速にカーネルを切り替えることが可能です。

### 必要な準備

以下の環境を前提としています：

現在の環境: `Ubuntu 24.04`

切り替え先: `Ubuntu 22.04`

ストレージ構成:
この辺は自分の環境に合わせてください

Ubuntu 24.04: `/dev/nvme0n1`

Ubuntu 22.04: `/dev/nvme1n1p4`

以下の手順を実行する前に、データのバックアップをおすすめします。

# kexecを使ったOS切り替え手順

## 1. kexec-toolsのインストール

まず、kexec-toolsをインストールします：

```bash
sudo apt update
sudo apt install kexec-tools
```

## 2. 切り替え先カーネルの確認

Ubuntu 22.04のブートディレクトリにアクセスして、カーネルイメージとinitrdファイルを確認します。

```bash
ls /media/syun/782fb4f7-ccc5-467a-8b56-356b23da8f52/boot
```

出力例：

```bash
syun@syun:~$ ls /media/syun/782fb4f7-ccc5-467a-8b56-356b23da8f52/boot
System.map-5.15.0-43-generic  initrd.img.old
System.map-6.8.0-49-generic   memtest86+.bin
config-5.15.0-43-generic      memtest86+.elf
config-6.8.0-49-generic       memtest86+_multiboot.bin
efi                           vmlinuz
grub                          vmlinuz-5.15.0-43-generic
initrd.img                    vmlinuz-6.8.0-49-generic
initrd.img-5.15.0-43-generic  vmlinuz.old
initrd.img-6.8.0-49-generic
syun@syun:~$ 
```

この場合、以下のファイルを使用します：

- カーネル: `vmlinuz-6.8.0-49-generic`
- initrd: `initrd.img-6.8.0-49-generic`

## 3. kexecでカーネルをロード

**ロードの前に念の為に起動してたソフトなどのデータを保存する**

`Ubuntu 22.04`のカーネルをロードします：

```bash
sudo kexec -l /media/syun/782fb4f7-ccc5-467a-8b56-356b23da8f52/boot/vmlinuz-6.8.0-49-generic \
    --initrd=/media/syun/782fb4f7-ccc5-467a-8b56-356b23da8f52/boot/initrd.img-6.8.0-49-generic \
    --append="root=/dev/nvme1n1p4 ro quiet splash"
```

## 4. kexecでカーネルを起動

ロードが成功したら、以下のコマンドで新しいカーネルを起動します：

```bash
sudo kexec -e
```

すぐ起動する。失敗したら強制シャットダウンするしかないらしい。
この操作で、Ubuntu 22.04が起動します。

:::note warn

注意事項

- 復旧手段を用意する: 問題が発生した場合に備え、ライブUSBなどでシステムを復旧できる状態を整えておきましょう。
- ファイルシステムの整合性: 切り替え前に必ずディスクの整合性を確認してください。
- サポート外の動作: kexecは特殊なツールであり、すべてのハードウェアや環境で完全に動作するわけではありません。

:::

# Ubuntu 24.04に戻るには

## 1. Ubuntu 22.04で再起動

Ubuntu 22.04上で以下を実行して再起動します：

```bash
sudo reboot
```

## 2. GRUBメニューで選択

再起動後、GRUBメニューからUbuntu 24.04を選択して起動します。

#### こういう感じです

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">kexecでUbuntu24.04環境でデュアルブート再起動せずに切り替えることができた！<br>便利ですね👀👀<a href="https://twitter.com/hashtag/ubuntu?src=hash&amp;ref_src=twsrc%5Etfw">#ubuntu</a><a href="https://twitter.com/hashtag/dualboot?src=hash&amp;ref_src=twsrc%5Etfw">#dualboot</a> <a href="https://t.co/OhI52ySkgr">pic.twitter.com/OhI52ySkgr</a></p>&mdash; SYUN (@syun88AI) <a href="https://twitter.com/syun88AI/status/1876509829415796875?ref_src=twsrc%5Etfw">January 7, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

# おわりに

kexecを利用した高速なOS切り替え方法をご紹介しました。この手法は便利ですが、リスクも伴いますので、慎重に試してください。デュアルブート環境をより効率的に活用したい方にとって役立つ内容になれば幸いです。

最後まで読んでいただきありがとうございました！