Cephの管理・運用について、その瞬間のデータを保持する場合はスナップショットの取得が有効だ。
スナップショットを取得しておくことで、後からそのオブジェクトのデータを再取得することが出来る。

Cephでのスナップショットの取得には、radosコマンドを用いる。

1.スナップショット取得前の状態を確認する

まず、スナップショットを作成する前に、対象とするプールを確認しよう。
プールの一覧は、以下のコマンドで取得出来る。

rados lspools
[root@BS-PUB-CEPHADM ~]# rados lspools
rbd
.rgw.root
.rgw.control
.rgw
.rgw.gc
.log
.users.uid
.users
.rgw.buckets.index
.rgw.buckets

さて、上記プール一覧はCeph + RadosGatewayの構成でデフォルトの状態なのだが、RadosGatewayで主に利用しているのは「.rgw」というプールだ。オブジェクトの中身については「.rgw.buckets」プールに保存されている。
とりあえず、プールの中身を見てみよう。プールの中を一覧で取得する場合は、以下のコマンドを実行する。

rados -p プール名 ls
[root@BS-PUB-CEPHADM ~]# rados -p .rgw ls
my-new-bucket
.bucket.meta.my-new-bucket:default.14132.1

今回はスナップショットのテストなので、RBDで用いられるプール「rbd」に適当なファイルをアップして、スナップショット取得後にそのファイルを更新、前のバージョンのファイルを取得出来ることを確認してみよう。
プールにファイルをアップする場合は、以下のようにコマンドを実行する。

rados -p プール名 put オブジェクト名 ローカルのファイルPATH
[root@BS-PUB-CEPHADM ~]# cat /tmp/test.txt
test snopshot before
[root@BS-PUB-CEPHADM ~]# rados -p rbd ls
[root@BS-PUB-CEPHADM ~]# rados -p rbd put test.txt /tmp/test.txt
[root@BS-PUB-CEPHADM ~]# rados -p rbd ls
test.txt

現時点では、このファイルの中身は「test snopshot before」となっている。

[root@BS-PUB-CEPHADM ~]# rados -p rbd get test.txt ./test.txt
[root@BS-PUB-CEPHADM ~]# cat ./test.txt
test snopshot before

2.スナップショットの取得

さて、それではプールのスナップショットを取得してみよう。
以下のコマンドで、指定したpoolのスナップショットが取得可能となる。

rados -p Pool名 mksnap スナップショット名
[root@BS-PUB-CEPHADM ~]# rados -p rbd mksnap test-snapshot
created pool rbd snap test-snapshot

無事スナップショットが取れたかどうか、以下のコマンドで確認する。

rados -p Pool名 lssnap
[root@BS-PUB-CEPHADM ~]# rados -p rbd lssnap
1       test-snapshot   2016.03.10 00:06:41
1 snaps

確かに、スナップショットが取れている事が確認できる。
スナップショットの中にあるオブジェクト一覧を取得したり、ファイルを取得する場合は、「-s」で対象のスナップショットを選択してやれば良い。

[root@BS-PUB-CEPHADM ~]# rados -p rbd -s test-snapshot ls
selected snap 1 'test-snapshot'
test.txt

3.ファイルの更新・スナップショットから前のファイルを取得

さて、それではファイルを更新してCephにアップしてみよう。

[root@BS-PUB-CEPHADM ~]# cat /tmp/test.txt
test snopshot before
test snopshot after
[root@BS-PUB-CEPHADM ~]# rados -p rbd put test.txt /tmp/test.txt
[root@BS-PUB-CEPHADM ~]# rados -p rbd get test.txt ./test.txt
[root@BS-PUB-CEPHADM ~]# cat ./test.txt
test snopshot before
test snopshot after

確かに、ファイルが更新されてしまった状態になっている。
この状態から、スナップショットからファイルを取得すると…

[root@BS-PUB-CEPHADM ~]# rados -p rbd -s test-snapshot get test.txt ./test.txt
selected snap 1 'test-snapshot'
[root@BS-PUB-CEPHADM ~]# cat ./test.txt
test snopshot before

確かに、前の状態のファイルを取得することができた。