バックアップ

ZFSでは,スナップショット単位でバックアップとリストアができる.

データセットとスナップショット単位で可能なため,構成が異なるプールにリストアすることも可能である.

Oracle Solaris ZFS 管理ガイド "データを送信および受信する"

http://docs.oracle.com/cd/E19253-01/819-6260/gbchx/index.html

スナップショット全体

バックアップ

zfs send コマンドにより,スナップショットを標準出力に吐くことができる.

標準出力にリダイレクトを使って,ファイルに保存するなり,SSHで転送し,他のマシンのzfs recvに引き渡すなり,好みの方法でバックアップを扱うことができるのである.

$ sudo zfs send pool0/hoge@first > first.bin

リストア

zfs recv コマンドにより,標準入力からスナップショットをリストアすることができる.

例として,上記で保存したファイルから別のデータセットにリストアしてみる.

$ sudo zfs recv pool0/fuga < first.bin

このコマンドにより,新たに pool0/fuga データセットとスナップショットが作成され,ファイルがリストアされていることが確認できる.

$ sudo zfs list -t snapshot -r pool0/fuga
NAME               USED  AVAIL  REFER  MOUNTPOINT
pool0/fuga@first      0      -  49.1K  -
$ cat /pool0/fuga/hello.txt 
Hello World

差分バックアップ

例示のために,さらに2つほどスナップショットを作ってある状態とする.

$ echo "Second Snapshot" > /pool0/hoge/hello.txt 
$ sudo zfs snapshot pool0/hoge@second
$ echo "Third Snapshot" >  /pool0/hoge/hello.txt 
$ sudo zfs snapshot pool0/hoge@third

バックアップ

zfs send-iまたは,-Iオプションを指定することで,特定のスナップショットから,特定のスナップショットまでの差分を送信することができる.これにより,転送量の削減をすることができる.

-iオプションの場合には,途中のスナップショットを含まず,-Iオプションの場合には,途中のスナップショットを含んでバックアップする.

$ sudo zfs send -I pool0/hoge@first pool0/hoge@third > first-to-third.bin

リストア

差分バックアップをリストアするときもzfs recvコマンドを利用する.差分リストアの場合には,入力されるバックアップデータの始点となっているスナップショットと,リストア先のが同一の状態になっていることが要求される.

$ sudo zfs rollback pool0/fuga@first

始点となるスナップショットから変更点がある場合には次のようなエラーが発生する.

cannot receive incremental stream: destination pool0/fuga has been modified
since most recent snapshot

このような場合には,前述のロールバックを行ってからリストアする必要がある.

$ sudo zfs rollback pool0/fuga@first
$ sudo zfs recv pool0/fuga < first-to-third.bin

SSHを使った他のマシンへのバックアップ

$ sudo zfs send pool0/hoge@first | ssh 192.168.1.10 sudo zfs recv pool1/hoge

のように,SSHをパイプでつなぐことによって,リモートホストの別のプールに送信することができる.

さくらのBASE StorageやAmazon S3へのアップロード

筆者が開発中の cloudbackup コマンドを利用すると,標準入力から受け取ったストリームをさくらのBase Storageや,Amazon S3などのクラウドストレージへアップロードできる.

本題とは外れるので,このようなこともできるという例のひとつとして,セットアップと実行例のみを記載する.

また,このコマンドは開発中のため,動作の保証はできない.

インストールと設定ファイルの作成

$ sudo apt-get install python3-pip
$ sudo pip3 install cloudbackup

設定ファイルを ~/.cloudbackup.json に作成する.

{
  "s3":{
    "token":"token",
    "secret":"secret",
    "host":"https://example.b.storage.sakura.ad.jp/"
  }
}

スナップショットの転送

$ sudo zfs send pool0/hoge@first | \
  cloudbackup send --output=s3:sakurabk/pool0/hoge/first1

results matching ""

    No results matching ""