実践的な課題:アップグレードのボタンを「押すべき時」と「押すべきでない時」
駆け出しの頃、本番サーバーで午前10時に不用意にインプレースアップグレード(in-place upgrade)を実行したことがあります。結果は悲惨なものでした。GRUBの設定中にサーバーがフリーズし、すべてのサービスがダウン。データの復旧だけに丸6時間を費やしました。この苦い経験から学んだ教訓は、「入念な準備なしにOSのアップグレードを軽視してはいけない」ということです。
現在、Ubuntu 24.04 LTS (Noble Numbat) がリリースされ、Kernel 6.8 の採用、セキュリティの強化、パフォーマンスの大幅な最適化が図られています。既存の 22.04 VPS 群が安定して稼働しているかもしれませんが、最新のパッチや Python 3.12、PHP 8.3 といった新しいライブラリが必要になる時期はすぐそこまで来ています。
徹夜でバグ修正に追われることなく 24.04 へ移行するにはどうすればいいでしょうか? Database、Nginx、Docker コンテナをコマンド実行後もスムーズに動かし続けるには? 本稿では、システム管理者の視点からこの課題を解決していきます。
原因分析:なぜアップグレードは失敗するのか?
Ubuntu のアップグレードは、単にコマンドを打って待つだけの作業ではありません。インフラ管理の経験上、システムが途中で「死ぬ」主な原因は 3 つあります。
- リポジトリ(PPA)の競合: これが最大の原因です。サードパーティ製 PPA(Ondrej PHP や MariaDB など)を多用している場合、それらのパッケージが新しいライブラリ構造と互換性がないことがあり、深刻な依存関係エラーを引き起こす可能性があります。
- SSH 接続の切断: アップグレードプロセスには通常 20 分から 45 分かかります。不安定なネットワーク環境で、古いパッケージの削除中に SSH セッションが切れるのは致命的です。サーバーは中途半端な状態に陥り、再起動すらできなくなることがよくあります。
- ディスク容量の不足: このプロセスでは、約 1.5GB 〜 2GB のデータがダウンロードされ、継続的に解凍されます。
/bootパーティションが 500MB 未満、あるいは/パーティションの空きが 5GB 未満の場合、失敗する確率はほぼ確実です。事前に不要なファイルを削除し空き容量を確保しておきましょう。
CentOS から Ubuntu に移行したばかりの方は、apt upgrade と do-release-upgrade を混同しがちです。前者はパッケージのマイナー更新、後者が OS 全体の「入れ替え」であることを忘れないでください。apt vs apt-get vs dpkg の違いを正しく理解しておくことは、トラブル回避の第一歩です。
一般的なアプローチ
24.04 へ移行する際、サービスの重要度に応じて主に 2 つの選択肢があります。
方法 1:クリーンインストール (Clean Install)
技術的に最も安全な方法です。24.04 が動作する新しい VPS を契約し、そこへコードとデータベースを移行します。
- メリット: システムが 100% クリーンになり、長年蓄積された不要な設定ファイルを完全に排除できる。
- デメリット: 一から設定し直す手間がかかり、
/etc内の隠れた設定ファイルや古い cron ジョブを見落とすリスクがある。
方法 2:インプレースアップグレード (In-place Upgrade)
Canonical 公式の do-release-upgrade ツールを使用します。
- メリット: 迅速かつ簡単で、ユーザー、データ、ディレクトリ権限をそのまま保持できる。
- デメリット: 現在のシステムに複雑なカスタマイズが施されている場合、潜在的なリスクがある。
安全なアップグレードのための 5 ステップ(成功率 99%)
すべてを円滑に進めるために、以下の「急がば回れ」のプロセスを遵守することをお勧めします。これは私が数十台の顧客サーバーを管理する際に適用している標準手順です。
ステップ 0:スナップショット — 唯一の非常口
コマンドを打つ前に、クラウドプロバイダー(DigitalOcean、AWS、Vultr など)のダッシュボードから **Snapshot(スナップショット)** を作成してください。何か問題が起きても、「Restore(リストア)」ボタン一つで元に戻せます。データと運を天秤にかけてはいけません!OSレベルでのバックアップが必要な場合は、Timeshiftで自動復元ポイントを作成しておくのも有効な手段です。
ステップ 1:旧システムのクリーンアップ
アップグレード前にシステムを最も安定した状態にします。以下のコマンドを実行して、現在の全パッケージを更新してください。
sudo apt update && sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
その後、一度サーバーを reboot して、最新のカーネルが安定して動作していることを確認します。
ステップ 2:Screen の利用 — 突然の通信断絶対策
PC のネットワークが切れても、サーバー側でセッションをバックグラウンドで維持できるように screen または tmux をインストールします。
sudo apt install screen -y
screen -S upgrade_session
万が一接続が切れた場合は、再ログインして screen -r upgrade_session と打てば、進行状況を再開できます。
ステップ 3:アップグレードコマンドの実行
メインの制御コマンドを実行します:
sudo do-release-upgrade
重要な注意点: Ubuntu が “No new release found” と表示する場合、LTS のアップグレードは通常 24.04.1 のリリースまで正式には開放されません。強制的に(少しリスクは上がりますが)アップグレードするには、-d (Development) フラグを使用します:
sudo do-release-upgrade -d
ステップ 4:対話操作と設定ファイルの処理
システムが一時停止し、いくつか重要な質問をされます:
- 予備の SSH ポートを開放:
yを選択してください(通常はポート 1022)。アップグレード中にメインのポート 22 に問題が生じても、サーバーにアクセスする手段が残ります。 - 設定ファイル: Nginx や MySQL などのサービスで旧設定と新設定のどちらを使うか聞かれたら、Keep the local version currently installed を選択しましょう。既存の設定ファイルを保持することで、再起動後にサービスが停止するのを防げます。
ステップ 5:確認とクリーンアップ
サーバー再起動後、結果を確認します:
lsb_release -a
sudo systemctl status nginx mysql docker
よくあるトラブルシューティング
パッケージの破損 (Broken Packages): 途中でパッケージエラーが出た場合は、落ち着いて sudo apt --fix-broken install を試してください。多くの場合、単純な依存関係は自動で修復されます。
Python に関する問題: Ubuntu 24.04 では Python 3.12 がデフォルトです。仮想環境(virtualenv)を使用している古い Python スクリプトがある場合、新しいインタープリタと互換性を持たせるために環境を一度削除して再作成する必要があるでしょう。Pythonのプロフェッショナル開発環境の構築手順を参考に、最新環境へ最適化することをお勧めします。
ネットワークインターフェース名の変更: システムがインターフェース名を eth0 から ens3 などに変更し、通信ができなくなることがあります。Ping が通らない場合は、すぐに /etc/netplan/ 内の設定ファイルを確認し、Netplanの設定を正しく見直してください。
システムのアップグレードは、IT インフラの安全性とパフォーマンスを維持するために不可欠なスキルです。恐れることはありません。事前のバックアップを徹底し、正しい手順に従うだけです。あなたのサーバーが Ubuntu 24.04 LTS へ無事に移行できることを願っています!

