エラー時の備えその2(snapshot / data backup)

dataのバックアップを行うsnapshot機能です

# 条件
- storage type: tokyocabinet

# 手順
## コマンド
```bash
$ cpdb ${port No.}
```
- 全てのインスタンスでsnapshotを取りたい場合は、各インスタンス毎にcpdbを実行してください

## 例
### data directory確認(snapshot前)
```bash
$ ls -l localhost_10001/roma/
total 204900
-rw-r--r-- 1 root root 20975936 Dec 15 01:15 0.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:15 1.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 2.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 3.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 4.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 5.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 6.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 7.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:17 8.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:17 9.tc
-rw-r--r-- 1 root root        0 Dec 15 01:15 lock
-rw-r--r-- 1 root root        0 Dec 14 01:15 status.log.1
```

### snap shot実行
```rb
$ cpdb 10001
waiting for storages[roma][0] == safecopy_flushed .
copy file : /usr/local/roma/app/localhost_10001/roma/0.tc
waiting for storages[roma][0] == normal .
.
.
.
waiting for storages[roma][9] == safecopy_flushed .
copy file : /usr/local/roma/app/localhost_10001/roma/9.tc
waiting for storages[roma][9] == normal .
finished
```

### data directory確認(snapshot後)
```bash
$ ls -l localhost_10001/roma/
total 409764
-rw-r--r-- 1 root root 20975936 Dec 15 01:15 0.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:15 0.tc.20151215011546 # snapshotファイル
-rw-r--r-- 1 root root 20975936 Dec 15 01:15 1.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:15 1.tc.20151215011556 # snapshotファイル
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 2.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 2.tc.20151215011606 # snapshotファイル
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 3.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 3.tc.20151215011616 # snapshotファイル
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 4.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 4.tc.20151215011627 # snapshotファイル
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 5.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 5.tc.20151215011637 # snapshotファイル
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 6.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 6.tc.20151215011647 # snapshotファイル
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 7.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:16 7.tc.20151215011657 # snapshotファイル
-rw-r--r-- 1 root root 20975936 Dec 15 01:17 8.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:17 8.tc.20151215011707 # snapshotファイル
-rw-r--r-- 1 root root 20975936 Dec 15 01:17 9.tc
-rw-r--r-- 1 root root 20975936 Dec 15 01:17 9.tc.20151215011717 # snapshotファイル
-rw-r--r-- 1 root root        0 Dec 15 01:15 lock
-rw-r--r-- 1 root root     1714 Dec 15 01:17 status.log.1 # snapshot statusファイル
```
- snapshotファイルはファイル名の末尾に実行日時がappendされています
- status.logは、snapshotの実行ログです

# ロジック
snapshotの処理は4つのステータスに分けられます
- :normal
- :flushing
- :flushed
- :cache cleaning

### 1. Status :normal
![1_normal.jpg](https://qiita-image-store.s3.amazonaws.com/0/103558/e434eb46-1a88-bb85-4405-06a316c4e3f6.jpeg)

### 2. Status :flushing
![2_flushing.jpg](https://qiita-image-store.s3.amazonaws.com/0/103558/a6ed0f8c-b454-8ecd-5980-45ab41a0468e.jpeg)

### 3. Status :flushed
![3_flushed.jpg](https://qiita-image-store.s3.amazonaws.com/0/103558/618e7daf-bab5-b7f9-27c0-5e0a71c483b7.jpeg)

### 4. Status :Cache Cleaning
![4_chach_cleaning.jpg](https://qiita-image-store.s3.amazonaws.com/0/103558/ecd73ba2-4dab-364b-727d-bf5012abd2f9.jpeg)