13.4. スナップショット間の変更の取り消し

既存の 2 つの Snapper スナップショット間の変更を元に戻すには、undochange コマンドを、以下の形式で実行します。1 は最初のスナップショットで、2 は 2 つ目のスナップショットになります。
snapper -c config_name undochange 1..2

重要

undochange コマンドを使用しても、Snapper ボリュームは元の状態に戻らず、データの整合性は維持されません。指定範囲外で行われるファイルの編集 (例: スナップショット 2 以降) は、スナップショット 1 の状態に戻されても変更しません。たとえば、undochange を実行してユーザーが作成したものを元に戻す場合、そのユーザーが所有するファイルはそのままの状態を維持できます。
また、スナップショットの作成時にファイルの整合性を保証するメカニズムはないため、undochange コマンドを使用すると、すでに存在する不整合がスナップショットに戻される可能性があります。
undochange コマンドは失敗する可能性が高いため、ルートファイルシステムには Snapper の undochange コマンドを使用しないでください。
以下の図は、undochange コマンドの仕組みを表しています。
時間経過後の Snapper の状態

図13.1 時間経過後の Snapper の状態

上記の図では、snapshot_1 が作成されてから、file_a が作成され、file_b が削除されています。その後 Snapshot_2 が作成されてから、file_a が編集され、file_c が作成されています。これがシステムの現在の状態です。現在のシステムには編集後の file_a があり、file_b はなく、新規作成された file_c があります。
undochange コマンドが呼び出されると、最初のスナップショットと 2 つ目のスナップショットの間に編集されたファイルのリストが生成されます。この図の状態で、snapper -c SnapperExample undochange 1..2 コマンドを実行すると、編集されたファイルのリスト (file_a が作成され、file_b が削除されてます) が作成され、現在のシステムに適用されます。したがって、以下のようになります。
  • 現在のシステムには file_a がありません。snapshot_1 が作成されてから作成されたからです。
  • file_b は、snapshot_1 から、現在のシステムにコピーされます。
  • 指定期間外に作成されたため、file_c は存在します。
file_bfile_c が競合すると、システムが破損する可能性があります。
また、snapper -c SnapperExample undochange 2..1 コマンドを使用することも可能です。この場合、現在のシステムにある file_a が、snapshot_1 のものに置き換わるため、snapshot_2 を作成した後に加えられた変更内容は元に戻ります。

mount および unmount コマンドを使用した変更の取り消し

undochange コマンドが、変更を元に戻す最適な方法ではないことがあります。status コマンドと diff コマンドを併用して、適切な判断を行ってください。さらには、Snapper ではなく、mount コマンドと unmount コマンドを使用します。mount コマンドと unmount コマンドは、Snapper ワークフロー外のコンテンツを閲覧する場合に限り便利です。
必要に応じて、mount コマンドで、マウント前に対応する LVM Snapper スナップショットをアクティベートします。スナップショットをマウントし、古いバージョンのファイルを複数抽出する場合は、mount コマンドおよび unmount コマンドを使用します。ファイルを元に戻す場合は、マウントしているスナップショットから現在のファイルシステムにコピーします。現在のファイルシステムであるスナップショット 0 は、 手順13.1「Snapper 設定ファイルの作成」 から作成したライブファイルシステムです。このファイルを、元の /mount-point のサブツリーにコピーします。
明示的なクライアント側のリクエストには、mount コマンドおよび unmount コマンドを使用します。/etc/snapper/configs/config_name ファイルには、ユーザーおよびグループを追加できる ALLOW_USERS= 変数および ALLOW_GROUPS= 変数が含まれます。snapperd を使用すると、追加されたユーザーおよびグループのマウント操作を実行できます。