14.4. スナップショット間の変更を元に戻す
2 つの既存の Snapper スナップショット間で行われた変更を元に戻すには、次の形式で undochange コマンドを実行します。
1
は最初のスナップショットで、2
は 2 番目のスナップショットです。
snapper -c config_name undochange 1..2
重要
undochange コマンドを使用しても、Snapper ボリュームは元の状態に戻らず、データの一貫性は確保されません。たとえば、スナップショット 2 の後で、指定された範囲外で発生したファイルの変更は、たとえばスナップショット 1 の状態に戻った後も変更されないままとなります。たとえば、undochange を実行してユーザーの作成を元に戻すと、そのユーザーが所有するファイルはそのまま残ることができます。
また、スナップショットとしてファイルの一貫性を確保するメカニズムもないため、undochange コマンドの使用時に、すでに存在する不整合をスナップショットに戻すことができます。
root ファイルシステムで Snapper undochange コマンドを使用しないでください。失敗する可能性があるためです。
以下の図は、undochange コマンドがどのように機能するかを示しています。
図14.1 時間の経過に伴う Snapper のステータス
[D]
図は、
snapshot_1
が作成された時点、file_a
が作成され、file_b
が削除されることを示しています。次に Snapshot_2
が作成され、その後に file_a
が編集され、file_c
が作成されます。これが、システムの現在の状態になります。現在のシステムには、編集バージョンの file_a
があり、file_b
はなく、新しく作成された file_c
があります。
undochange コマンドが呼び出されると、Snapper は、最初にリストされたスナップショットと 2 番目のスナップショットの間に変更されたファイルのリストを生成します。図では、snapper -c SnapperExample undochange 1..2 コマンドを使用すると、Snapper は変更されたファイルのリスト(つまり、
file_a
が作成され、file_b
が削除されます)を作成し、それらを現在のシステムに適用します。そのため、以下に留意してください。
- 現在のシステムには
file_a
がありません。これは、snapshot_1
の作成時にまだ作成されていないためです。 file_b
は存在します。snapshot_1
から現在のシステムにコピーされます。file_c
は、作成が指定の時間外であったため、存在します。
file_b
と file_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 は、手順14.1「Snapper 設定ファイルの作成」 で作成されたライブファイルシステムです。ファイルを、元の /mount-point のサブツリーにコピーします。
明示的なクライアント側の要求には、mount コマンドおよび unmount コマンドを使用します。
/etc/snapper/configs/config_name
ファイルには、ユーザーおよびグループを追加できる ALLOW_USERS= 変数および ALLOW_GROUPS= 変数が含まれています。次に、snapperd
を使用すると、追加したユーザーおよびグループのマウント操作を実行できます。