Snapper は、ファイルシステムのスナップショットを作成および管理するための Linux コマンドライン ツールです。
snapper コマンドを使用して、読み取り専用のスナップショットを作成できます。これらのスナップショットを使用して、災害時に特定のファイルまたはすべてのファイルを復元できます。
また、複数のスナップショットを比較して、特定の古いスナップショットに戻すこともできます。
Snapper は、btrfs (B ツリー ファイル システムのコピー オン ライト)、ext4 ファイル システム、およびシンプロビジョニングされた LVM ベースの論理ボリューム。
snapper コマンドを使用してスナップショットを作成すると、スナップショットは同じファイルシステムに存在するため、十分な空き容量があり、定期的な FS クリーンアップが必要になる場合があります。
rsync ベースのスナップショットの使用に関心がある場合は、以前に説明した rsnapshot ユーティリティも確認してください。
Snapper ユーティリティをインストール
さまざまなディストリビューション用の snapper バイナリをダウンロードしてインストールするか、ソース コードをダウンロードして自分でコンパイルすることができます。
たとえば、SUSE SLES11 SP2 リポジトリから snapper rpm をダウンロードできます。
# rpm -ivh snapper-0.1.6-2.1.x86_64.rpm
以下は、snapper パッケージの依存関係です。 yum またはその他のパッケージ管理ツールを使用すると、すべての依存関係が自動的にインストールされます。
- libsnapper-devel-0.1.6-2.1.x86_64.rpm
- pam_snapper-0.1.6-2.1.x86_64.rpm
- snapper-debuginfo-0.1.6-2.1.x86_64.rpm
- snapper-debugsource-0.1.6-2.1.x86_64.rpm
btrfs ファイルシステムの作成
btrfs は SLES11 SP2 からサポートされているファイル システムであるため、btrfs を使用して論理ボリュームを作成するか、btrfs-convert コマンドを使用して既存の ext3 ファイル システムを btrfs に変換できます。
次のコマンドを実行して、新しい btrfs ファイルシステムを作成します。btrfs プログラムがインストールされていない場合は、zypper install btrfsprogs を使用してインストールします。
# lvcreate -L 8G -n snapvol vglocal Logical volume "snapvol" created # mkfs.btrfs /dev/vglocal/snapvol # mount /dev/vglocal/snapvol /snapmount
シン プロビジョニング LVM の作成
シン プロビジョニング LVM を作成する場合は、lvcreate コマンドを使用して次の操作を行います。
# lvcreate --thin vglocal/vgthinpool --size 20G Rounding up size to full physical extent 32.00 MiB Logical volume "vgthinpool" create # lvcreate --thin vglocal/vgthinpool --virtualsize 8G --name lvthin_snap Logical volume "lvthin_snap" created # lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert opt vglocal -wi-ao--- 2.73g tmp vglocal -wi-ao--- 2.73g usr_local vglocal -wi-ao--- 2.73g var vglocal -wi-ao--- 2.73g lvthin_snap vglocal Vwi-a-tz- 8.00g vgthinpool 0.00 vgthinpool vglocal twi-a-tz- 20.00g 0.00 # mkfs.ext3 /dev/vglocal/lvthin_snap # mkdir /snapmount # mount /dev/vglocal/lvthin_snap /snapmount
Snapper 構成ファイルの作成
snapper コマンドを使用して構成ファイルを作成するには、以下に示すように「snapper -c」コマンドを使用します。
btrfs の構文:
snapper –c create-config
btrfs では、以下に示すように構成ファイル名とマウントポイントを指定するだけです。
snapper -c snapconfig create-config /snapmount
シンプロビジョニングされた LVM の構文:
snapper –c create-config --fstype="lvm(xfs)"
シン プロビジョニング LVM では、構成ファイル名とマウントポイントを指定する以外に、以下に示すように –fstype を使用してファイル システム タイプも指定する必要があります。
snapper -c snapconfig1 create-config --fstype="lvm(xfs)" /snapmount1
Snapper 設定ファイルの表示と削除
構成ファイルを作成すると、/snapmount ディレクトリの下に作成された .snapshots ディレクトリが表示されます。
また、構成ファイルが /etc/snapper/configs/snapconfig の下に作成されていることにも気付くでしょう。スナップショット用に構成されたすべてのサブボリュームに関する情報は、このファイルに保存されます。
トラブルシューティングの目的で使用されるログ ファイルは、/var/log/snapper.log にあります
すべての構成ファイルを表示するには、次の snapper コマンドを実行します:
# snapper list-configs Config | Subvolume ------------+------------ snapconfig | /snapmount ? btrfs filesystem snapconfig1 | /snapmount1 ? Thin provisioned filesystem
構成ファイルを削除するには、次の構文を使用します:
snapper –c delete-config
たとえば、次のコマンドは、/etc/snapper/configs ディレクトリにある構成ファイル snapconfig を削除します。
# snapper -c snapconfig delete-config
Snapper を使用してスナップショットを作成する
ファイルシステムのスナップショットを作成するには、次の snapper コマンド構文を使用します:
snapper –config create –description "description of the snapshot"
たとえば、次の例では新しいスナップショットが作成されます。
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0354"
スナップショットを作成したら、以下に示すようにスナップショット情報を表示します。
# snapper --config snapconfig list Type | # | Pre # | Date | User | Cleanup | Description | Userdata -------+---+-------+--------------------------+------+---------+------------------------------+--------- single | 0 | | | root | | current | single | 1 | | Mon Feb 24 15:57:00 2014 | root | | Snapshot taken on 02-24-0354 |
比較のために 2 番目のスナップショットを撮る
テスト目的で、/snapmount ディレクトリの下の testfile1 を無効にしました。
# cat /dev/null > testfile1 # ls -ltr -rw-r--r-- 1 root root 11 Feb 24 11:28 testfile2 -rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3 drwxr-x--- 1 root root 2 Feb 24 15:57 .snapshots -rw-r--r-- 1 root root 0 Feb 24 16:25 testfile1
上記の変更の後、別のスナップショットを撮りましょう。
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0427"
以下に示すように、2 つのスナップショットがあります。
# snapper --config snapconfig list Type | # | Pre # | Date | User | Cleanup | Description | Userdata -------+---+-------+--------------------------+------+---------+------------------------------+--------- single | 0 | | | root | | current | single | 1 | | Mon Feb 24 15:57:00 2014 | root | | Snapshot taken on 02-24-0354 | single | 2 | | Mon Feb 24 16:27:48 2014 | root | | Snapshot taken on 02-24-0427 |
1 番目と 2 番目のスナップショットを比較
では、両方のスナップショットを比較してみましょう。
以下のコマンドは、スナップショット#1 とスナップショット#2 を比較します。
# snapper -c snapconfig status 1..2 c.... /snapmount/testfile1
出力:
- 出力の「c」は、コンテンツが変更されたことを示します
- 「+」は、newl ファイルがディレクトリに追加されることを示します。
- 「-」は、削除されたファイルがあることを示します。
複数のスナップショットを取得して出力を比較
いくつかのファイルを追加し、いくつかのファイルを削除し、コンテンツを少し変更して、複数のテスト スナップショットを作成しました。
# snapper --config snapconfig list Type | # | Pre # | Date | User | Cleanup | Description | Userdata -------+---+-------+--------------------------+------+---------+------------------------------+--------- single | 0 | | | root | | current | single | 1 | | Mon Feb 24 15:57:00 2014 | root | | Snapshot taken on 02-24-0354 | single | 2 | | Mon Feb 24 16:27:48 2014 | root | | Snapshot taken on 02-24-0427 | single | 3 | | Mon Feb 24 16:37:53 2014 | root | | Snapshot taken on 02-24-0437 | single | 4 | | Mon Feb 24 16:38:17 2014 | root | | Snapshot taken on 02-24-0440 |
次の出力は、追加、変更、および削除されたファイルを一覧表示します。
# snapper -c snapconfig status 4..1 -.... /snapmount/a -.... /snapmount/b -.... /snapmount/c c.... /snapmount/testfile1 +.... /snapmount/testfile2
スナップショットの違いを見る
スナップショット #1 とスナップショット #4 の間のファイルの具体的なコンテンツの違いを表示するには、次のコマンドを使用できます。
# snapper -c snapconfig diff 4..1 /snapmount/testfile1 --- /snapmount/.snapshots/4/snapshot/testfile1 2014-02-24 16:25:44.416490642 -0500 +++ /snapmount/.snapshots/1/snapshot/testfile1 2014-02-24 11:27:35.000000000 -0500 @@ -0,0 +1 @@ +This is a test file
出力は、diff コマンド出力の一般的な形式です。
スナップショットから特定のファイルを復元
スナップショット間の違いを確認し、復元する特定のファイルがわかったら、ここで説明するように復元できます。
復元前は、このリストに testfile2 がありません。
# ls -ltr -rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3 -rw-r--r-- 1 root root 0 Feb 24 16:25 testfile1 drwxr-x--- 1 root root 10 Feb 24 16:45 .snapshots
たとえば、スナップショットから 1 つのファイルを復元するには、つまり /snapmount/testfile2 (削除されたファイル) をスナップショット #1 から復元するには、次のコマンドを使用します。
# snapper -c snapconfig -v undochange 1..4 /snapmount/testfile2 create:1 modify:0 delete:0 creating /snapmount/testfile2
復元後、リストに testfile2 が表示されます。
# ls -ltr -rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3 -rw-r--r-- 1 root root 0 Feb 24 16:25 testfile1 drwxr-x--- 1 root root 10 Feb 24 16:45 .snapshots -rw-r--r-- 1 root root 11 Feb 24 16:55 testfile2
スナップショットからすべてのファイルを復元
スナップショットからすべてのファイルを復元するには、次の手順を実行します:
それでは、特定のスナップショットからすべてのファイルを復元しましょう。これにより、いくつかのファイルが削除され、ファイルが作成され、ファイルが変更されることに注意してください。
# snapper -c snapconfig -v undochange 1..4 create:1 modify:1 delete:3 deleting /snapmount/c deleting /snapmount/b deleting /snapmount/a modifying /snapmount/testfile1 creating /snapmount/testfile2