CentOS 7からRocky Linux 8への移行:新規構築を優先する実践ガイド
EdwardMoon
CentOS 7からRocky Linuxへ移行する際は、新しいRocky Linux 8.10サーバーを構築し、アプリケーションとデータを段階的に移す方法を推奨します。CentOS Linux 7は2024年6月30日にサポートが終了し、セキュリティ更新も提供されていません。本番サーバーをVaultリポジトリに接続しても、サポート対象には戻りません。
現在のELevate公式ガイドでは、サポート対象として明記された移行経路を使用するよう案内しています。Rocky Linuxへの変換が可能だと決めつけた未検証のインプレース移行は避け、最新のサポートマトリックスに移行先がなければ、新規構築とデータ移行を選択してください。例外的にインプレース移行が必要な場合も、まず複製環境で手順を再現します。

推奨する移行構成
| 移行方法 | 推奨度 | 主な条件 |
|---|---|---|
| Rocky 8.10を新規構築して移行 | 推奨 | 新規OS環境、明確なロールバック、段階的な検証 |
| インプレース移行ツール | 例外的に検討 | 現在サポートされる移行先、移行を阻止する要因、復旧用コンソールを確認 |
| CentOS 7の継続運用 | 非推奨 | 隔離した短期間の復旧用途を除き、セキュリティリスクがある |
手順1:CentOS 7の資産と依存関係を収集する
sudo install -d -m 0700 /root/migration-inventory
cat /etc/centos-release | sudo tee /root/migration-inventory/release.txt
uname -r | sudo tee /root/migration-inventory/kernel.txt
sudo rpm -qa --qf '%{NAME}|%{VERSION}-%{RELEASE}|%{ARCH}\n' | sort | sudo tee /root/migration-inventory/packages.txt >/dev/null
sudo systemctl list-unit-files --state=enabled | sudo tee /root/migration-inventory/enabled-units.txt >/dev/null
sudo ss -lntup | sudo tee /root/migration-inventory/listeners.txt >/dev/null
sudo crontab -l 2>/dev/null | sudo tee /root/migration-inventory/root-crontab.txt >/dev/null
パッケージ一覧の比較だけでは不十分です。systemdのoverride、証明書、ファイアウォール、SELinuxの独自ポリシー、cron、アカウントのUID・GID、データベースの文字セット、外部ストレージ、監視エージェントも、管理責任者とともに一覧化します。
ネットワークとセキュリティの基準状態
ip -br address
ip route
sudo firewall-cmd --list-all-zones
getenforce
sudo semanage port -l | sudo tee /root/migration-inventory/selinux-ports.txt >/dev/null
sudo getsebool -a | sudo tee /root/migration-inventory/selinux-booleans.txt >/dev/null
sudo find /etc/systemd/system -type f -print | sort | sudo tee /root/migration-inventory/systemd-local-files.txt >/dev/null
手順2:バックアップと復元試験を行う
サービスごとに整合性のあるバックアップを取得します。データベースは単純なファイルコピーではなく、製品が保証するdumpやバックアップツールを使用し、暗号鍵と証明書のアクセス権限も別途保存してください。
sudo install -d -m 0700 /backup
sudo tar --xattrs --acls --selinux -C / -czf /backup/centos7-etc-home-$(date +%F).tgz etc home
sudo find /backup -maxdepth 1 -type f -name 'centos7-etc-home-*.tgz' -exec sha256sum {} \; | sudo tee /backup/SHA256SUMS >/dev/null
# PostgreSQLの例:バージョンごとの公式復旧手順と併せて検証
set -o pipefail
sudo -u postgres pg_dumpall --clean --if-exists | sudo tee "/backup/postgresql-all-$(date +%F).sql" >/dev/null
バックアップファイルを作成できたことと、復旧できることは同じではありません。隔離した試験サーバーで実際に復元し、アプリケーションのトランザクションが正常に動作することを確認して初めて、ロールバック手段として扱えます。
手順3:移行先のRocky Linuxサーバーを構築する
Rocky Linux 8.10 ISOのチェックサムを確認し、最小限のパッケージでインストールします。新サーバーのホスト名、時刻同期、DNS、ストレージ性能、SELinuxのEnforcing状態を整えてから、アプリケーション用リポジトリを追加します。
cat /etc/rocky-release
sudo dnf upgrade --refresh -y
sudo systemctl --failed --no-pager
timedatectl status
chronyc tracking
getenforce
sudo firewall-cmd --state
df -hT
df -i
手順4:必要な設定だけを移行する
CentOS 7の/etc全体をRocky Linux 8へ上書きすると、PAM、crypto policy、systemd、ネットワークの設定が壊れるおそれがあります。アプリケーションの設定だけを新しい既定ファイルと比較し、サポートされなくなったディレクティブは削除してください。
diff -u /srv/migration/old/app.conf /etc/example/app.conf || true
sudo rsync -aHAXn --numeric-ids /srv/migration/app-data/ /var/lib/example/
# 試行結果を確認してから実際にコピー
sudo rsync -aHAX --numeric-ids /srv/migration/app-data/ /var/lib/example/
sudo restorecon -RFv /var/lib/example
手順5:データを同期して停止時間を短縮する
データ移行は、初回の全体コピー、差分同期、最終的な書き込み停止、最後の同期の順に進めます。データベースのレプリケーションや論理dumpを使用する場合は、移行元と移行先のメジャーバージョンの組み合わせがサポートされているか確認してください。
# ファイルデータの初回同期:まずdry-runを実施
sudo rsync -aHAXn --delete --numeric-ids /srv/app-data/ rocky8:/srv/app-data/
# 承認後に初回同期を実施
sudo rsync -aHAX --delete --numeric-ids /srv/app-data/ rocky8:/srv/app-data/
# 最終切り替え時間帯:アプリケーションの書き込み停止後に差分を再同期
sudo systemctl stop example-app
sudo rsync -aHAX --delete --numeric-ids /srv/app-data/ rocky8:/srv/app-data/
手順6:切り替え前に機能と性能を試験する
curl --fail --silent --show-error https://staging.example.com/health
openssl s_client -connect staging.example.com:443 -servername staging.example.com -verify_return_error </dev/null
ssh rocky8 'systemctl --failed --no-pager'
ssh rocky8 'journalctl -p err -b --no-pager'
ssh rocky8 'ss -lntup'
ssh rocky8 'getenforce'
ログイン、読み書き、バッチ処理、バックアップ、監視、通知、性能を、実際の利用経路で試験します。IPアドレスへ接続できるだけで完了と判断してはいけません。
手順7:DNS・ロードバランサーを切り替え、ロールバックに備える
dig +short app.example.com
curl --resolve app.example.com:443:192.0.2.80 --fail --silent --show-error https://app.example.com/health
# 切り替え後にDNSと証明書を確認
dig +trace app.example.com
openssl s_client -connect app.example.com:443 -servername app.example.com -verify_return_error </dev/null
切り替え前に計画的にTTLを短くし、旧サーバーはすぐに削除せず、書き込みを禁止した復旧用の状態で保持します。失敗と判断する数値基準と、切り戻せる最終時刻を変更計画書に記録してください。新サーバーが書き込みを受け付けた後にDNSだけを元へ戻すと、最新データが失われる場合があります。ロールバック前に両方のサーバーへの書き込みを止め、新しい変更分を旧サーバーへ整合性を保って反映できるか確認します。逆方向のレプリケーションやデータの再移行を検証できていなければ、旧サーバーを書き込み可能な状態で直ちに再公開しないでください。
インプレース移行を検討する場合
ELevateなどのツールは、preupgradeレポートのinhibitorをすべて解消し、移行元と移行先の組み合わせが現在のサポートマトリックスに含まれる場合に限って使用します。公式資料がAlmaLinuxへの移行を説明している場合、それをRocky Linuxへの変換の根拠として読み替えてはいけません。
# 例外的な移行経路の共通原則:実際のコマンドは最新の公式資料で確認
cat /etc/centos-release
sudo yum repolist enabled
sudo rpm -Va | sudo tee /root/preupgrade-rpm-verify.txt >/dev/null
findmnt -T /
df -hT / /var /boot
df -i / /var /boot
インプレース移行は、別の複製サーバーで全手順を繰り返し、起動、アプリケーション、バックアップからの復旧を確認してから承認します。サポートマトリックスにないRocky Linuxへの移行経路を、独自のパッケージ置換で作らないでください。
移行検証チェックリスト
- CentOS 7のEOLに伴うリスクを変更記録に残す。
- 資産、依存関係、UID・GID、セキュリティの基準状態を収集する。
- 隔離環境でバックアップを復元する。
- 最新の更新を適用したRocky 8.10サーバーを新規構築する。
- 必要な設定とデータを選んで移行する。
- 実際のトランザクションと性能を試験する。
- DNS・LBの切り替えと、数値で定めたロールバック条件を運用する。
- 経過観察後、CentOS 7へのアクセスを遮断して廃止する。
公式資料と関連記事
- CentOS Linux公式のEOL案内
- Rocky Linux公式:バージョンとサポート期間
- AlmaLinux ELevate公式:サポートされる移行経路
- Rocky Linux 8.10へのアップグレード手順
- CentOS 7 Vaultによる緊急復旧ガイド
まとめ
CentOS 7からRocky Linuxへの移行では、Rocky Linux 8.10を新規構築し、バックアップと復元試験、必要な設定の移行、データ同期、サービス検証、切り戻しを一連の手順として整える方法が最も見通しを立てやすくなります。VaultでCentOS 7のサポートを延長できると考えたり、現在のサポートマトリックスにないインプレース経路を前提にしたりしないでください。