CentOS Stream 8からOracle Linux 8.10への移行とGRUB復旧手順
PHPを更新するため、CentOS Stream 8にRemiリポジトリをインストールしようとしたところ、次のエラーが発生した。
nothing provides redhat-release >= 8.10
CentOS Stream 8はすでにサポートが終了しているため、Oracle Linux 8.10へ移行することにした。
今回は、OS移行と、移行後に発生したGRUB起動エラーの復旧手順を記録する。
1. 移行前の環境
- クラウド:Oracle Cloud(OCI)
- OS:CentOS Stream 8
- PHP:8.2.13
- CPU:x86_64
- 移行先:Oracle Linux 8.10
2. Oracle Linux 8.10へ移行
まず、OCIでBoot Volumeのバックアップを作成する。
移行スクリプトをダウンロードする。
cd /root
curl -fL -o migrate-to-oracle-linux.sh \
https://raw.githubusercontent.com/oracle/migrate-to-ol/main/migrate-to-oracle-linux.sh
ドライランで確認する。
bash migrate-to-oracle-linux.sh --dry-run
問題がなければ、正式に移行する。
bash migrate-to-oracle-linux.sh \
-y --target-version latest --kernel uek
移行完了後、再起動する。
reboot
3. 再起動後、SSH接続できなくなった
OCIのインスタンスは「Running」と表示されていたが、SSHで接続できなくなった。
OCI管理画面の Console connection → Launch Cloud Shell connection からシリアルコンソールに接続すると、次の画面で停止していた。
grub>
GRUBの設定ファイルを確認する。
grub> ls (hd0,gpt1)/EFI/
grub> ls (hd0,gpt1)/EFI/redhat/
grub> ls (hd0,gpt2)/grub2/
Oracle Linux側の grub.cfg が存在しなかった。
一方、CentOS時代の設定ファイルは残っていた。
grub> ls (hd0,gpt1)/EFI/centos/
そこで、古い設定ファイルから起動メニューを読み込む。
grub> configfile (hd0,gpt1)/EFI/centos/grub.cfg
GRUBメニューが表示されたので、Oracle Linux 8.10の4.18系カーネルを選択。
正常に起動し、SSH接続も復旧した。
※GRUBのパーティション番号は環境によって異なる。
4. GRUBを修復する
SSHでログイン後、OSを確認する。
cat /etc/oracle-release
uname -r
結果:
Oracle Linux Server release 8.10
4.18.0-553.174.1.el8_10.x86_64
まず、旧設定をバックアップする。
cp -a /boot/efi/EFI/centos/grub.cfg \
/root/grub-centos-backup.cfg
UEFIの起動先とGRUB設定ファイルのリンクを確認する。
efibootmgr -v
ls -l /etc/grub2*
今回の環境では、UEFIは /EFI/redhat/shimx64.efi を使用し、設定ファイルのリンク先は /boot/efi/EFI/redhat/grub.cfg だった。
そこで、GRUB設定を再生成する。
grub2-mkconfig -o /etc/grub2-efi.cfg
生成されたファイルを確認する。
ls -lh /boot/efi/EFI/redhat/grub.cfg
grub2-script-check /boot/efi/EFI/redhat/grub.cfg
約6.9KBの設定ファイルが生成され、構文チェックでもエラーは発生しなかった。
5. デフォルトカーネルを確認
Oracle Linux 8.10には、RHCK 4.18とUEK 5.15の2種類のカーネルがインストールされていた。
grubby --default-kernel
結果:
/boot/vmlinuz-5.15.0-325.221.6.5.el8uek.x86_64
デフォルトはOracleのUEK 5.15だった。
GRUB設定の修復後、再起動して正常に起動できるか確認する必要がある。
まとめ
今回の問題は、CentOS Stream 8からOracle Linux 8.10への移行後、GRUBの設定ファイルが欠落していたことが原因と考えられる。
特に重要だったのは、次の2つのコマンド。
一時的な起動復旧:
configfile (hd0,gpt1)/EFI/centos/grub.cfg
GRUB設定の再生成:
grub2-mkconfig -o /etc/grub2-efi.cfg
OCIのシリアルコンソールを使用することで、SSH接続できない状態からOracle Linux 8.10を起動し、GRUB設定を修復できた。
※記録時点では、GRUB修復後の自動再起動およびUEKでの起動は未検証。