GNU/Linux >> Linux の 問題 >  >> Linux

Linux で Snapper コマンドを使用してファイルシステムのスナップショットを作成する方法

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

Linux
  1. Linuxパーティションまたは論理ボリュームにファイルシステムを作成する方法

  2. Ansibleを使用してLinuxユーザーを作成する方法

  3. コマンドラインを使用してLinuxを再起動する方法

  1. Linuxコマンドのスクリプトを作成する方法

  2. Linuxlnコマンド

  3. コマンドを使用してLinuxでプロセスを強制終了する方法は?

  1. ターミナル/コマンドラインを使用してLinuxでファイルを作成する方法

  2. snapper コマンドを使用して LVM シン ボリュームのスナップショットを作成する方法

  3. 「dd」コマンドを使用して Linux でスパース ファイルを作成する方法