Snapperを使用して、失敗したSLESアップデートを安全にロールバックする

BtrfsルートとSnapperが有効になっている標準的なSUSE Linux Enterprise Server(SLES)インストールでは、最も安全な復旧方法は、更新失敗前に作成されたスナップショットを起動し、読み取り専用の状態でテストしてから、を実行することですsudo snapper rollback。これにより、テストされた状態から新しい書き込み可能なルートが作成されます。すべてのディスク、サブボリューム、またはアプリケーションデータベースが巻き戻されるわけではありません。

現在のSLES 15 SP7の管理ガイドでは、引き続きこの起動・テストのワークフローが使用されています。この手順を実行する前に、マシンがSUSEがサポートするロールバック構成を満たしていることを確認し、失敗したZypperまたはYaSTトランザクションの事前スナップショットを特定してください。

Snapperのロールバックでサーバー全体が復元されますか?

いいえ。ブート可能なシステムロールバックは、デフォルトのSnapperroot構成のスナップショットに適用されます。SUSEドキュメントでは、単一のルートデバイスにBtrfsがあり、ブートローダーが正常にインストールされているデフォルトのルートサブボリューム構成をサポートしています。ロールバックはサブボリュームの内容を変更します。他のサブボリュームは/含まれません。一般的なSLESレイアウトでは/var、、、、などのパスはスナップショットの外側にあることがよくあります。そのため、データベースまたはサービスは/srv、システムパッケージが元に戻っても、スナップショット後に書き込まれたデータを保持する可能性があります。/opt/usr/local/home

ロールバックを実行する前に、重要なアプリケーションデータのバックアップを別途取得または検証してください。また、デフォルトの Btrfs サブボリュームレイアウトを変更した場合、またはマルチデバイスルートを使用している場合は、この手順を避けてください。SLES 15 SP7 のドキュメントに記載されているブート可能なロールバック要件では、これらの構成はカバーされていません。続行する前に、SUSE のSnapper リカバリ要件をお読みください。

アップデート失敗前に作成されたスナップショットはどれですか?

ルートファイルシステムにはSnapperの設定を使用し、トランザクションの前後のスナップショットを比較します。Btrfsルートスナップショットが有効になっている一般的なSLESシステムでは、ZypperとYaSTはパッケージ操作の前後にスナップショットを作成します。前スナップショットは操作前のルートの状態を表し、後スナップショットは部分的に失敗したトランザクションを含め、操作実行後の状態を表します。

  1. ルート構成が存在することを で確認しますsudo snapper list-configs。 という名前の構成を探しますroot。
  2. でルートファイルシステムのタイプを確認しますfindmnt -no FSTYPE /。このブート可能なロールバック手順では、 と報告されるはずですbtrfs。次に を実行しsudo btrfs filesystem show /、ルートファイルシステムが と報告されていることを確認しますTotal devices 1。
  3. トランザクションのペアを一覧表示しますsudo snapper -c root list -t pre-post。日付と説明を失敗した更新と一致させます。列にはPre #ペアになっている ではなく、番号を記録しますPost #。
  4. 2つの数値間で何が変わったかを確認してください。PREと を、POSTお使いの機器に表示されている数値に置き換えてください。
sudo snapper -c root status PRE..POST
sudo snapper -c root diff PRE..POST

これらのコマンドは、変更されたパスとファイルの差異を一覧表示します。スナップショット番号、日付、パッケージの説明、および出力はホストによって異なります。スクリーンショットから例の番号をコピーしないでください。関連するペアが表示されない場合は、Snapperが有効になっているかどうか、およびクリーンアップポリシーによって既にスナップショットが削除されていないかどうかを確認してください。削除されたスナップショットは、Snapperによって後から再作成することはできません。

ルートSnapperの事前/事後リストのターミナル画面の例。更新前のスナップショットを識別するのに役立つZypperトランザクションペアも含まれています。
ルートSnapperの事前/事後リストのターミナル画面の例。更新前のスナップショットを識別するのに役立つZypperトランザクションペアも含まれています。

古いルートを永久的に変更する前に、どのようにテストすればよいですか?

再起動して、ブートローダーのスナップショットエントリを使用します。SLES では、[スナップショット] を選択しStart Bootloader from a read-only snapshot、失敗したトランザクションの直前の日付のスナップショットを選択します。ブートメニューには、エントリに日付と説明が表示されます。説明には、zypp(zypper)または YaST 操作が含まれる場合があります。記録した更新前のスナップショットを選択してください。説明が分かりやすいからといって、更新後のスナップショットを選択しないでください。

ログインして、失敗したサービスまたはアプリケーションをテストしてください。この試行中はスナップショットのルートファイルは読み取り専用となるため、この起動だけではデフォルトのルートは変更されません。スナップショットが間違っている場合、またはシステムが依然として失敗する場合は、再起動して別のスナップショットを試すか、レスキューシステムを使用してください。メニューの選択を永続化するためだけにロールバックを強制しないでください。

ドキュメントに記載されている読み取り専用のスナップショットオプションと日付付きエントリを含む、ブートメニューの例を示します。更新前のスナップショットに一致するエントリを選択してください。
ドキュメントに記載されている読み取り専用のスナップショットオプションと日付付きエントリを含む、ブートメニューの例を示します。更新前のスナップショットに一致するエントリを選択してください。

Snapper Rollbackはいつ実行すべきですか?

古いスナップショットが起動してチェックに合格した後でのみ、ロールバックを実行してください。その読み取り専用スナップショットから、以下を実行します。

sudo snapper rollback

その後、再起動して通常のデフォルトの起動エントリを選択してください。

sudo reboot

Snapper はロールバック前のシステム状態のスナップショットを保持し、テスト済みのスナップショットに基づいて新しい読み書き可能なルートを作成します。ドキュメントに記載されているスナップショットからのブートワークフローでは、このコマンドに古いスナップショット番号を渡す必要はありません。結果として、読み取り専用のスナップショット自体が書き込み可能に変換されるのではなく、新しいデフォルト ルートが作成されます。スナップショットは後でクリーンアップ ルールによって削除される可能性があるため、古いロールバック スナップショットを長期アーカイブとして使用する前に、必要なファイルをすべてコピーしてください。

読み取り専用スナップショットのテストに合格した後に使用される 2 つのコマンド (snapper rollback、そして再起動) を示すターミナル画面の例。
読み取り専用スナップショットのテストに合格した後に使用される 2 つのコマンド (snapper rollback、そして再起動) を示すターミナル画面の例。

再起動後に確認すべきことは何ですか?

デフォルトのエントリから起動し、コマンドの完了だけでなく、実際の復旧状況を確認します。想定されるカーネルとパッケージの状態を確認し、障害が発生したサービスのステータスとログを確認し、アプリケーションレベルの簡単なチェックを実行します。その後、Snapper の新しい状態を調べます。

sudo snapper -c root list

通常のパッケージ更新の場合、これでマシンが新しいルートから起動することを確認するのに十分です。失敗した操作がサービスパックの移行だった場合は、SUSE のロールバック後のチェックも実行してください。リポジトリを更新して検査し、登録を確認します。

sudo zypper ref -fs
sudo zypper lr
sudo SUSEConnect --status

リポジトリは復元したサービスパックと一致している必要があり、インストール済みの製品は登録されている必要があります。登録が復元されない場合は、SUSE のSLES 15 SP7 サービスパックロールバック手順書に修復手順として記載されていますsudo SUSEConnect --rollback。この登録コマンドは移行復旧専用です。通常のパッケージ更新では実行しないでください。

Snapperの状態、有効なリポジトリ、およびSUSE製品の登録状況について、ロールバック後のチェックを実行する際のターミナル画面の例。
Snapperの状態、有効なリポジトリ、およびSUSE製品の登録状況について、ロールバック後のチェックを実行する際のターミナル画面の例。

このホストがtransactional-update(例えば、トランザクション対応の SLE Micro システムなど)を使用している場合は、従来の SLES コマンド シーケンスを適用する代わりに、その製品の手順に従ってください。その製品のドキュメントではsudo transactional-update rollback SNAPSHOT_NUMBER、実行中のシステムからスナップショットを選択する方法と、現在のルートが破損した場合の、読み取り専用のブート スナップショット ワークフローが別途記載されています。SUSE のトランザクション アップデート ロールバック手順を参照してください。

コメントを残す

SLES Btrfsが読み取り専用になった場合:再マウントする前に診断を行う

SLES Btrfsが読み取り専用になった場合:再マウントする前に診断を行う

Btrfsが意図的に読み取り専用になっているのか、容量不足なのか、エラー発生後のデータ保護のために動作しているのかを特定し、その原因に合った復旧方法を選択してください。

オフラインネットワークでSUSE Managerを使用してSLES 15を登録する

オフラインネットワークでSUSE Managerを使用してSLES 15を登録する

ミラーリングされたチャネルを準備し、アクティベーションキーを作成し、マネージャーのチェックインに必要な接続を維持しながら、インターネットに直接アクセスできないSLES 15クライアントをブートストラップします。

YaSTのX11フォワーディングをSSH経由で動作させる方法

YaSTのX11フォワーディングをSSH経由で動作させる方法

YaSTのSSH経由のXIO起動エラーを修正し、X11転送とxauthを検証し、リモートウィンドウが不要な場合はncursesインターフェースに切り替えます。

Snapperを使用して、失敗したSLESアップデートを安全にロールバックする

Snapperを使用して、失敗したSLESアップデートを安全にロールバックする

アップデート前のBtrfsスナップショットを見つけて、読み取り専用でテストし、どのデータがルートロールバックの対象外になるかを理解した上で、Snapperを使用して永続的なリカバリを実行します。

rsyslogと相互TLSを使用したSLES Syslogの安全な転送

rsyslogと相互TLSを使用したSLES Syslogの安全な転送

SLESシステムのログを、認証済みTLS経由でリモートのrsyslogコレクターに送信します。この際、証明書のチェック、障害発生時のバッファリング、および配信テストが行​​われます。

再試行前にSLESアップグレードのメモリエラーを追跡する

再試行前にSLESアップグレードのメモリエラーを追跡する

RAM、スワップ、カーネル、およびZypperのログを使用して、実際のメモリ負荷を特定し、パッケージの状態を保護し、より安全なSLESアップグレードの再試行を選択します。

ヘッドレスサーバーでDebian 12のセキュリティアップデートを継続的に実行する

ヘッドレスサーバーでDebian 12のセキュリティアップデートを継続的に実行する

DebianのSSH経由の自動セキュリティアップデートを有効にし、デフォルトのパッケージソースを維持し、systemdとAPTのログを通じてスケジュールされた実行を確認します。

smartdを使用してUbuntuのSMARTディスク警告をメールで受け取る

smartdを使用してUbuntuのSMARTディスク警告をメールで受け取る

メール配信オプションを比較し、Ubuntu上でsmartdを設定し、ディスクの状態に関する警告が受信トレイに届くことを確認します。

Debian 12 DNSルックアップの失敗: systemd-resolvedの修復

Debian 12 DNSルックアップの失敗: systemd-resolvedの修復

Debian 12 で DNS ルックアップを復元するには、systemd-resolved をチェックし、必要に応じて resolv.conf を修復し、アップストリームの DNS およびアプリケーション解決を検証します。

Ubuntu 24.04でHDMIオーディオが表示されない?出力を復元する

Ubuntu 24.04でHDMIオーディオが表示されない?出力を復元する

Ubuntuでモニターまたはテレビを音声出力として認識させ、サウンド設定でそれを選択し、HDMIが表示されない場合は接続またはPipeWireデバイスリストを確認してください。