2014年 11月 16日
SLES12が採用した btrfs, snapper を使った Snap Shot
SLES12 は Btrfs がデフォルトの / (ルート)ファイルシステムとなりました。 btrfs はopenSUSE13.2 からもデフォルトルートのファイルシステムです。
追加ボリュームはデフォルトが XFS です。当然、追加ボリュームに btrfs も利用できます。
ここでメダマとなる、スナップショットの機能を見てみます。
-用意-
こんな感じのパーティションを用意しました。
Btrfs と EXT3の異なるパーティションを作ってマウントします。この作業は全て yast > System > Partitioner で行う事ができます。
初期状態はこんな感じです。
sles12:~ # df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda2 5244928 3115132 1861572 63% /
devtmpfs 500424 8 500416 1% /dev
tmpfs 530780 0 530780 0% /dev/shm
tmpfs 530780 8036 522744 2% /run
tmpfs 530780 0 530780 0% /sys/fs/cgroup
/dev/xvda2 5244928 3115132 1861572 63% /var/spool
/dev/xvda2 5244928 3115132 1861572 63% /var/opt
/dev/xvda2 5244928 3115132 1861572 63% /var/lib/pgsql
/dev/xvda2 5244928 3115132 1861572 63% /var/lib/named
/dev/xvda2 5244928 3115132 1861572 63% /var/crash
/dev/xvda2 5244928 3115132 1861572 63% /srv
/dev/xvda2 5244928 3115132 1861572 63% /var/tmp
/dev/xvda2 5244928 3115132 1861572 63% /home
/dev/xvda2 5244928 3115132 1861572 63% /opt
/dev/xvda2 5244928 3115132 1861572 63% /boot/grub2/x86_64-efi
/dev/xvda2 5244928 3115132 1861572 63% /tmp
/dev/xvda2 5244928 3115132 1861572 63% /boot/grub2/i386-pc
/dev/xvda2 5244928 3115132 1861572 63% /var/log
/dev/xvda2 5244928 3115132 1861572 63% /usr/local
/dev/xvda2 5244928 3115132 1861572 63% /var/lib/mailman
/dev/xvdb1 4193280 16592 3918784 1% /btrfs
/dev/xvdc1 4061888 8252 3843972 1% /ext
sles12:~ #
※ btrfsでは df コマンドでの容量チェックはあまり意味がありません。btrfs のコピーオンライト(COW)の効果を見たかったのですが、snapshot の効果が優先で、 COW の効果はないようです。
-snapper の有効化-
この状態で yast2 > snapper を起動します。
この状態では snapper の初期設定ができていないため、snapper は起動できません。そこで snapper の初期化を行います。
※ コマンドラインから snapper GUI を起動する場合は、X端末のコンソールから
# yast2 snapper &
で起動します。
4.4 Snapper設定の作成と変更
https://www.suse.com/ja-jp/documentation/sles-12/book_sle_admin/data/sec_snapper_config.html
snapper -c config-name create-config /your-mount-point
sles12:~ # snapper -c myconfig create-config /btrfs
設定ファイルは /etc/snapper/configs に作成されます
sles12:~ # ls /etc/snapper/configs/myconfig -l
-rw-r----- 1 root root 934 Nov 28 12:16 /etc/snapper/configs/myconfig
sles12:~ # cat /etc/snapper/configs/myconfig
# subvolume to snapshot
SUBVOLUME="/btrfs"
# filesystem type
FSTYPE="btrfs"
:
: 以下略
:
sles12:~ #
これで yast > snapper を起動することができます。
-snapper のデフォルト設定-
デフォルトでは snapper は一時間ごとにタイムラインのスナップショットを作成します。古いスナップショットは自動的に削除されます。
4.1 デフォルト設定
https://www.suse.com/ja-jp/documentation/sled-12/book_sle_admin/data/sec_snapper_setup.html#snapper_dir-excludes
- snapshot の保存先 -
snapshot は同じ btrfs パーティションの .snapshots ディレクトリに作成されます。他のパーティションやファイルシステムは利用できません。したがってスナップショットを取る実ファイルサイズの倍以上の空き容量が同じパーティションにあることが推奨されています。
第4章 snapper を利用したスナップショット採取と巻き戻し
http://manual.geeko.cpon.org/ja/cha.snapper.html
実際には .snapshots にスナップショットファイルが保存されています。
sles12:/btrfs # ls -l
total 359676
drwxr-x--- 1 root root 8 Nov 28 14:30 .snapshots
-rw-r--r-- 1 root root 122765701 Nov 28 14:33 file-a.txt
-rw-r--r-- 1 root root 122765626 Nov 28 13:35 file-b.txt
-rw-r--r-- 1 root root 122765701 Nov 28 14:34 file-c.txt
sles12:/btrfs # du -h
0 ./.snapshots/1/snapshot/.snapshots
0 ./.snapshots/1/snapshot
4.0K ./.snapshots/1
0 ./.snapshots/2/snapshot/.snapshots
118M ./.snapshots/2/snapshot
118M ./.snapshots/2
0 ./.snapshots/3/snapshot/.snapshots
235M ./.snapshots/3/snapshot
235M ./.snapshots/3
0 ./.snapshots/4/snapshot/.snapshots
235M ./.snapshots/4/snapshot
235M ./.snapshots/4
586M ./.snapshots
937M .
sles12:/btrfs #
-スナップショットからファイルをロールバックする-
snapper から、ロールバックしたいポイントを選んで "Show Changes" を押します。
実際にファイルの変更点が確認できます。
そこで、ロールバックしたいファイルを選び、"Restore Selected" を押すと
ファイルが元にロールバックされます。
-btrfs でのファイルサイズの確認-
実際に df コマンドでは使用しているファイルサイズの確認はできません。そこで
# btrfs filesystem df /your-mount-point
で確認します。
sles12:/btrfs # btrfs filesystem df /btrfs
Data, single: total=840.00MiB, used=702.68MiB
System, single: total=4.00MiB, used=16.00KiB
Metadata, single: total=264.00MiB, used=992.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
sles12:/btrfs #
-削除したファイルの復旧-
スナップショットが取れるという事は、削除ファイルの salvage もできるということです。
sles12:/btrfs # ls
.snapshots file-a.txt file-b.txt file-d.txt
ファイルを消す
sles12:/btrfs # rm file-d.txt
sles12:/btrfs # ls -l
total 239784
drwxr-x--- 1 root root 38 Nov 29 00:30 .snapshots
-rw-r--r-- 1 root root 122765671 Nov 28 16:53 file-a.txt
-rw-r--r-- 1 root root 122765626 Nov 28 13:35 file-b.txt
sles12:/btrfs # 消えた
TimeLine を選び "Show Changes"
消されたファイルを選び "Restore Selected"
ファイルが元に戻ります。
sles12:/btrfs # ls -al
total 239848
drwxr-xr-x 1 root root 80 Nov 29 08:08 .
drwxr-xr-x 1 root root 152 Nov 28 10:43 ..
drwxr-x--- 1 root root 38 Nov 29 00:30 .snapshots
-rw-r--r-- 1 root root 122765671 Nov 28 16:53 file-a.txt
-rw-r--r-- 1 root root 122765626 Nov 28 13:35 file-b.txt
-rw-r--r-- 1 root root 64251 Nov 28 14:49 file-d.txt
sles12:/btrfs #
--
実際に"ファイルのロールバック"という作業はあまりやりたい作業ではありません。おそらく通常の運用では、年に1度やるかやらないかの作業かもしれません。
また、ファイルのロールバックは、下手をすると「誤ったロールバック」という事故もあるわけです。
「ロールバックが簡単にできる」
という事を大きなメリットとして考えるのは誤りです。ロールバックは十分な検証と訓練、マニュアル化が重要です。やはり別メディアへのバックアップは重要です。
また、通常のバックアップでは「スナップショット」をバックアップする事はできません。バックアップの操作は、「今生きているライブなデータ」をバックアップします。(出来るのかもしれないけれど...)スナップショットが万能の萬金丹の様な効果があるわけではない事を心すべきです。
しかし、スナップショットからのロールバックは、短時間でシステムの復旧を行う事ができます。例えばスタティックなウェブサイトの改ざんからの復旧であるとか、ミスオペレーションからの急速復旧など -- もっともミスオペするオペレータが正しくロールバックできるスキルがあるかは別ですが -- には効果があります。
また、XEN の様な基本機能にスナップショットがない仮想化システムでは、システムのロールバックは魅力的な機能です。仮想環境下で、アプリケーションのインストール手順やテストに失敗した場合など、容易にロールバックできるのは魅力的でしょう。
重要なことはスナップショットを理解し、ロールバックの手順をしっかり確認する事です。
そのほかの情報はこちらから
islandcenter.jp
-Keyword-
SUSE Linux Enterprise Server 12 SLES12 btrfs snapshot スナップショット ファイルのロールバック機能 サーバー 仮想化