Linux環境でも、システムの更新やパッケージの削除を行った際、何らかの理由で不具合が起こる可能性があります。
そんな万が一に備えるために、yumコマンドにはシステムの更新やパッケージの削除などの処理前に、ファイルシステムのスナップショットを取得するプラグイン「yum-plugin-fs-snapshot」があります。
ここでは、CentOS 7のLVM環境を例に「yum-plugin-fs-snapshot」の使い方を紹介します。
目次
yum-plugin-fs-snapshotとは
「yum-plugin-fs-snapshot」は、システムの更新やパッケージの削除などを行う前に、ファイルシステムのスナップショットを作成するyumの拡張機能(プラグイン)です。
このプライグインを利用すると、yumでシステムの更新やパッケージの削除などの処理を実行する前に、自動的にルートファイルシステムのスナップショットを取得してくれるようになり、万が一、不具合が発生した場合、取得されたスナップショットを使ってファイルシステムをカンタンに戻すことができます。
なお、このプラグインを利用するには、ルートファイルシステム が LVMかBtrfsである必要があり、ルートファイルシステムがあるボリュームグループに十分な空きエクステント(未使用の領域)が必要です。
yum-plugin-fs-snapshotのインストール
空きエクステントの確認
プラグインを利用する前の事前確認として、ルートファイルシステムがあるボリュームグループに十分な空きエクステント(未使用の領域)があるかを確認します。
確認するには、次のコマンドを実行します。
# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 40
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size <48.80 GiB
PE Size 4.00 MiB
Total PE 12492
Alloc PE / Size 8653 / 33.80 GiB
Free PE / Size 3839 / <15.00 GiB
VG UUID Uwqv3Q-BGHh-0hQ4-Df2h-xdnL-RMFs-8m4imW
この例では、ボリュームグループは一つ(centos)しかなく、ご覧のように、空きエクステント(下から2行目の「Free PE / Size」の行)が、約15GBあることが確認できます。
なお「Free PE / Size」の行が「0」と表示されている場合は、空きエクステントがないということなので、その場合は、ボリュームグループを拡張するなどして、あらかじめ空きエクステントを増やしておく必要があります。
HDDを増設してLVMのボリュームグループを拡張する方法については、以下の記事で紹介しています。
インストール
「yum-plugin-fs-snapshot」は、以下のコマンドでインストールします。
# yum install yum-plugin-fs-snapshot
設定
設定ファイルは、次のように編集します。
# vi /etc/yum/pluginconf.d/fs-snapshot.conf
…(省略)
[lvm]
enabled = 1 ←「0」を「1」に変更する
# 'lvcreate_size_args' option must specify the snapshot LV size using -L or -l
lvcreate_size_args = -l 15%ORIGIN ←コメントアウトを外す
「lvcreate_size_args」では、スナップショットに割り当てる論理ボリュームのサイズを指定しており、デフォルトでは、ルートファイルシステムの論理ボリューム(複製元)サイズの15%となっています。スナップショットを長期保存しないなら、このサイズを変更する必要性はないと思います。
スナップショットを取得する
yum-plugin-fs-snapshotが正しく設定されていれば、yumコマンドを利用してシステムの更新やパッケージの削除を行うと、以下のように出力行でスナップショットが採られていることが確認できます。
# yum update
…(省略)
Running transaction
fs-snapshot: snapshotting / (/dev/centos/root): root_yum_20190329200125
…(省略)
取得済みスナップショットを確認する
取得したスナップショットの名前、数、サイズなどを確認する場合は、以下のコマンドを実行します。以下の例では、2つスナップショットが採られていることが確認できます。
# yum fssnap list
読み込んだプラグイン:fastestmirror, fs-snapshot
List of 2 snapshosts:
Snapshot 容量 Used Free Origin Tags
centos/root_yum_20190329200125 4.7 G 0.3% 5.7 G root yum_20190329200125
centos/root_yum_20190329200952 4.7 G 0.0% 5.7 G root yum_20190329200952
fssnap list done
パッケージ「lvm2-python-libs」がないとスナップショットが表示できないので、エラーが出た場合は、別途インストールしましょう。
取得済みスナップショットを削除するには
取得したスナップショットは、自動では削除されないため、スナップショットを何個も保存していると、ボリュームグループに空きエクステントがなり、スナップショットが取得できなくなってしまいます。また、スナップショットが取得できなくなると、yumコマンドもエラーで実行できなくなってしまいます。
なので、システムの更新やパッケージの変更後、システムの動作に問題がないことを確認したら、以下のようにコマンドを実行して、スナップショットはこまめに削除しましょう。
# lvremove /dev/centos/root_yum_20190329200952
Do you really want to remove active logical volume centos/root_yum_20190329200952? [y/n]: y
Logical volume "root_yum_20190329200952" successfully removed
スナップショットで変更を元に戻すには
システムに何らかの不具合が発生するなどして、ファイルシステムをスナップショットを使って復元したい場合は、以下のようにコマンドを実行して、スナップショットを複製元(ここではルートファイルシステム)にマージ(結合)します。
# lvconvert --merge /dev/centos/root_yum_20190329200125
Delaying merge since origin is open.
Merging of snapshot centos/root_yum_20190329200125 will occur on next activation of centos/root.
なお、ルートファイルシステムのように閉じることができない複製元へのスナップショットのマージは、システムの再起動後に実行されるので「lvconvert」コマンドを実行したらシステムを再起動します。
再起動すると自動的にマージが行われ、マージが完了すると、マージされたスナップショットは、自動的に削除されます。
あとがき
最近のセキュリティ対策では、サーバー環境などのシステムを最新の状態に保つことが重要だとよく言われますが、安定的に動作しているマシンに変更を加えるのは、ためらわれるものです。
ですが、ここで紹介した機能を利用すれば、システムの更新やパッケージの追加・削除などで、万が一トラブルが発生しても、素早くファイルシステムを復旧できるので、もしもの時に備えて導入しておくのもありではないでしょうか。