BLOGTIMES
2017/03/18

ZFS を使ってリモートのサーバにお手軽バックアップをとる

  Tips zfs  sh  omnios 
このエントリーをはてなブックマークに追加

僕がファイルサーバに ZFS を使っているのは、ネットワーク越しにスナップショット転送ができるからと言っても過言ではありません。
しかも差分転送に対応しているので、ファイルが膨大に入っていても rsync などのように重くなるということがありません。

問題はこのスナップショットを定期的に作成したり、転送するためのジョブをいちいち書く必要があること。
これまではサーバを立てる度にスクリプトを手作りしていたのですが、いい加減面倒になってきたので、汎用的なものを作成してみました。

このスクリプトを使えばいちいちスナップショットの名前を調べたりする必要なくリモートにボリュームのコピーが作れるようになります。

設定方法

このスクリプトを送信元、受信先それぞれのサーバの適当な場所に仕込みます。

各スクリプトの先頭にある REMOTE_HOST, REMOTE_TANK, LOCAL_TANK や main() 内にあるボリューム名(スクリプト内では hoge )の部分については環境に合わせて書き換える必要があります。また、受信先 -> 送信元の間は ssh の公開鍵認証の設定を行って、パスワードなしでログインできるようにしておいてください。

送信元では以下の2つのタスクを cron などで定期的に実行してやります。

  • createsnap.sh で定期的にスナップショットの作成を行う
  • oldsnapdelete.shで古いスナップショットの削除を行う

受信先では以下の3つのタスクを実行します(cron で定期実行する必要があるのは下の2つ)

  • (初回のみ)fullrecv.sh でスナップショットの受信を行う
  • (2回目以降) inclrecv.sh で差分のスナップショットの受信を行う
  • oldsnapdelete.shで古いスナップショットの削除を行う

実行例

以下が inclrecv.sh の実行例になります。

# ./inclrecv.sh 2017-03-18 22:25:12 [22404] ===== START: inclrecv ===== 2017-03-18 22:25:12 [22404] [INFO] Common snapshot found : snap-20170317-030004 2017-03-18 22:25:12 [22404] [INFO] Starting INCREMENTAL snapshot transfer: snap-20170317-030004 -> snap-20170318-030005 2017-03-18 22:25:13 [22404] receiving incremental stream of tank/hoge@snap-20170318-030005 into tank/hoge@snap-20170318-030005 2017-03-18 22:30:34 [22404] received 7.21GB stream in 321 seconds (23.0MB/sec) 2017-03-18 22:30:34 [22404] ===== END: inclrecv =====

送信元と受信先のスナップショット名を調べて、共通するスナップショット(snap-20170317-030004)を検出し、それよりも新しいスナップショット(snap-20170318-030005)を転送しています。差分転送できない場合には "No common snapshot found" というエラーが表示されるようにしてありますので、この場合には fullrecv.sh を使ってください。また、転送すべきスナップショットがない場合には "Local volume is up-to-date" というメッセージを出して終了するようにしてあります。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9219
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン