インストール
RHEL7のインストーラではインストール対象としてLVM thinprovisioningが選択できるようになっている。ここを選択して、適当に空きが残るように容量を設定しておく。
状態を確認
操作する前に現在の状態を確認
[root@localhost log]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 16.4G 0 part
├─rhel-swap 253:0 0 2G 0 lvm [SWAP]
├─rhel-pool00_tmeta 253:1 0 12M 0 lvm
│ └─rhel-pool00-tpool 253:3 0 12G 0 lvm
│ ├─rhel-root 253:4 0 12G 0 lvm /
│ └─rhel-pool00 253:5 0 12G 0 lvm
└─rhel-pool00_tdata 253:2 0 12G 0 lvm
└─rhel-pool00-tpool 253:3 0 12G 0 lvm
├─rhel-root 253:4 0 12G 0 lvm /
└─rhel-pool00 253:5 0 12G 0 lvm
sr0 11:0 1 3.6G 0 rom
[root@localhost log]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
pool00 rhel twi-aotz-- 12.00g 9.38 5.18
root rhel Vwi-aotz-- 12.00g pool00 9.38
swap rhel -wi-ao---- 2.00g
lsblkに同じエントリが2回でているのが不安ですが、tmetaの方はメタデータ、tdataの方は実際のデータがはいっています。
12GBのpool00の下に12GBということになっているrootが含まれている状態。
プールの詳細
[root@localhost log]# lvdisplay /dev/rhel/pool00
--- Logical volume ---
LV Name pool00
VG Name rhel
LV UUID vuooGK-VHow-JfAo-cPQb-Egf1-fCk4-qRpLqK
LV Write Access read/write
LV Creation host, time localhost, 2015-05-15 19:15:03 +0900
LV Pool metadata pool00_tmeta
LV Pool data pool00_tdata
LV Status available
# open 2
LV Size 12.00 GiB
Allocated pool data 9.38%
Allocated metadata 5.18%
Current LE 3072
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
これで、lvmにより任意のタイミングでsnapshotをとり放題です。以下のようなコマンドでスナップショットを作成できます。
lvcreate --permission r --snapshot --name snapshot rhel/root
snapper設定の作成
さて、snapshot作り放題、なのはいいですがlvcreateで都度作成するのはしんどいです。というわけでRHEL7には、SUSE出身のsnapperが含まれています。SUSEだとYaSTと連携してGUIまでありますが、RHELだとコマンドラインのみ。しかしとても便利です。
まずは設定を作成します。デフォルトだと “root” という名前の設定で、それ以外だと-c “設定名” みたいなオプションをつけて実行することでどこの操作をしているか指定します。
[root@localhost ~]# snapper create-config -f 'lvm(xfs)' /
このコマンドで /etc/snapper/configs/rootに設定本体が作成され、
さらに設定一覧が /etc/sysconfig/snapper にあるのでここに設定名が追加されます。
さらに設定一覧が /etc/sysconfig/snapper にあるのでここに設定名が追加されます。
今の設定一覧を確認する。”root”設定があるのがわかります。
[root@localhost log]# snapper list-configs
Config | Subvolume
-------+----------
root | /
snapshot作成
ここまで準備をするとスナップショットの作成は簡単。snapper createコマンドだけです。
[root@localhost log]# snapper create
様子を確認します。
[root@localhost log]# snapper list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+---+-------+--------------------------+------+---------+-------------+---------
single | 0 | | | root | | current |
single | 9 | | Mon May 18 18:15:10 2015 | root | | |
[root@localhost log]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
pool00 rhel twi-aotz-- 12.00g 10.00 5.73
root rhel Vwi-aotz-- 12.00g pool00 10.00
root-snapshot9 rhel Vri---tz-k 12.00g pool00 root
swap rhel -wi-ao---- 2.00g
root-snapshot9 という名前のスナップショットが作成されています。
スナップショットのマウント
以下のようにスナップショット番号を指定して、readonlyでmountすることができます。
.snapshotディレクトリ以下に適当にmountされます。
.snapshotディレクトリ以下に適当にmountされます。
[root@localhost ~]# snapper mount 10
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/rhel-root 12571648 1226516 11345132 10% /
devtmpfs 1931348 0 1931348 0% /dev
tmpfs 1941204 0 1941204 0% /dev/shm
tmpfs 1941204 8580 1932624 1% /run
tmpfs 1941204 0 1941204 0% /sys/fs/cgroup
/dev/sda1 508588 168516 340072 34% /boot
/dev/mapper/rhel-root--snapshot10 12571648 1193528 11378120 10% /.snapshots/10/snapshot
snapshot間の差分
snapperではsnapshotを一時的なディレクトリにmountして、差分を取る仕組みがあります。
さらに通常のスナップショットの他に、管理に便利なようにpreとpostというタイプが導入されています。スナップショット自体は同じなのですが、なんらかの作業前にpreスナップショットを取得、作業後にpostスナップショットを取得してペアにしています。
今回は触れませんが、pre,postのスナップショットを各種の作業前後に自動的に作成して、特に差分がなければ自動的に消す仕組みも含まれています。
preスナップショット作成
[root@localhost ~]# snapper create -t pre
適当にファイル変更
[root@localhost ~]# ls
anaconda-ks.cfg hoge lvmdump-localhost.localdomain-20150515103428.tgz
[root@localhost ~]# rm hoge
rm: remove regular empty file ‘hoge’? y
postスナップショット作成
[root@localhost ~]# snapper list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+----+-------+--------------------------+------+---------+-------------+---------
single | 0 | | | root | | current |
single | 9 | | Mon May 18 18:15:10 2015 | root | | |
pre | 10 | | Mon May 18 18:18:32 2015 | root | | |
[root@localhost ~]# snapper create -t post --pre-number=10
[root@localhost ~]# snapper list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+----+-------+--------------------------+------+---------+-------------+---------
single | 0 | | | root | | current |
single | 9 | | Mon May 18 18:15:10 2015 | root | | |
pre | 10 | | Mon May 18 18:18:32 2015 | root | | |
post | 11 | 10 | Mon May 18 18:19:42 2015 | root | | |
差分の確認
[root@localhost ~]# snapper status 10..11
-..... /root/hoge
c..... /var/log/messages
c..... /var/log/snapper.log
差分対象の制限(フィルタ)
hogeファイルが消えているのと、/var/log以下のログが増えていることがわかります。
ログの差分をとってもあまり嬉しくないので、/etc/snapper/filters/ に、log.txtという名前で以下のようなファイルを作成します。このパターンにマッチするものは差分チェックの対象になりません。
差分対象の制限
/var/log/*
差分の確認ふたたび
[root@localhost ~]# snapper status 10..11
-..... /root/hoge
undo
差分がとれるので、patchコマンドの要領でundoができます。
ただこのundoをした時に一貫性があるのか、もろもろ大丈夫なのかなどは特に保証されていませんので注意が必要です。
[root@localhost ~]# snapper undochange 10..11
create:1 modify:0 delete:0
TODO
snapperにはこの他にも定期的にsnapshotをとっておいて、過去数回分を残しておくなどかなり気のきいた機能があります。 裏で古いスナップショットを自動で消したり差分をしらべたりするので勝手に動くのが嫌なひとはオプションしらべてね(丸投げ)!
0 件のコメント:
コメントを投稿