CentOS Stream 8 から Oracle Linux 8.10へ移行したらSSH接続できなくなった!GRUBの復旧までの記録

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での起動は未検証。

参考:Oracle Linux移行ツール(GitHub)

コメントを残す