スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

自動バックアップ(rsync)

**概要
データのバックアップを自動化するための方法について。
*nix/windows 両方対応。
1個目の参考URLに殆ど書いてあるので、あんま細かく書きません。
ここではそれぞれの内容について注意点や説明を紹介。



**参考URL
* rsyncとsshで別のマシンにバックアップ
* はじめてrsyncを使う方が知っておきたい6つのルール
* 【 crontab 】 プログラムを定期的に実行するcrondの設定ファイルを編集する
* タスク・スケジューラとWSHで定例処理を実現する



**利用ツール
rsync、ssh、cronを使う。

rsync は、サイズがすぐ大きくなるファイルの転送に適したオープンソースのユーティリティです。
一回目のバックアップ以降はデータに変更があったものだけ(差分)を取ってきます。
通信には、デフォルトでsshを使います。
ssh は、暗号の技術を利用して、安全にリモートコンピュータと通信するためのユーティリティです。※1
cron は、 *nix系OSで使われるタスクの自動実行をするためのデーモンです。※2

※1 正確にはプロトコルだが、ここではOpenSSH辺りをさしていると思えば良い。
※2 windowsでは、タスクスケジューラで代用する。

[ *nixの場合 ]
大抵は ports,apt,yum などパッケージで入手可。

  • rsync
  • ssh
  • cron

[ windowsの場合 ]

cwRsyncという、cygwinの最小機能を同梱したものを利用できます。
これの良いところは、cygwinのインストールをしないでその機能が利用出来る点です。

  •  cwRsync
  •  タスクスケジューラ(スタート > プログラム > アクセサリ > システムツール > タスク)

    cwRsyncのインストーラがココから手に入ります。
    インストールしたら、Windowsの環境変数に C:\Program Files\cwRsync\bin\ を追加する。

rsyncとsshはバックアップ元とバックアップ先の両方にインストールされている必要がある。特に接続先となるPCにはサーバプログラムの sshd が立ち上がっている必要がある。




**sshによる自動ログイン

リモートのPC(sshdを立ち上げている事が前提)で、ssh-keygen コマンドでパスフレーズの無い鍵を生成する。
パスフレーズが無いだけで、鍵が同一になることは無い。
デフォルトでは、1024bitのRSAキーの秘密鍵(id_rsa)、公開鍵(id_rsa.pub)のペアが~/.sshに生成される。
生成された公開鍵(id_rsa.pub)は、デフォルトでは~/.sshにあるため、これを authorized_keys に追記する。

  cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  chmod 700 ~/.ssh/*
  sudo /etc/rc.d/sshd restart 


また、秘密鍵(id_rsa)はもう一方のPCの.ssh以下辺りにコピーしておく。
これらのファイルは実行時にOwner権限が必要なのでchmod 700を忘れないこと。



**rsyncによるデータ転送
rsyncの基本的な構文は以下のようになる。

  rsync [オプション] コピー元 コピー先


コピー元とコピー先をひっくり返せば、そのままバックアップからリストア(復元)のコマンドにすることが出来る。
実際使うときはこんな感じ

  $rsync -avr --progress -e "ssh -i ~/.ssh/id_rsa" user@192.168.0.1:~/serverdata ~/backups


手前がリモート、後ろがローカル(バックアップ先)。
この方式では、データを外から引っ張ってくる感じになる。

なお、この例で指定したオプションは
-a : パーミッションなどのデータの状態をそのまま保持して転送する、通称アーカイブモード。
-v --progress : 転送状態を表示する
-r : 再帰的にディレクトリを取り出す
-e "シェル名 シェルオプション" : sshをオプション付きで実行。

ssh -i で、指定したrsa秘密鍵を使用する。
ここでさらに、--deleteオプションを指定すれば、バックアップ元で消滅したファイルがあれば、バックアップ先のファイルも消滅する、完全同期が可能となる。
ただし、ホームディレクトリなどでうっかりやると他のデータが飛ぶので注意が必要。

・・・自分は、危うくシステムデータ吹き飛ばしかけた。



**バッチファイル/シェルスクリプト
先のコマンドを、何かのシェルスクリプト/バッチファイルに書いておいて保存しておきます。
後で、このスクリプトをタスクスケジューラやらcronやらに自動実行させれば良いです。
ここでは、[年月日付]という名前のディレクトリにバックアップを取るスクリプトを紹介します。

[ *nixの場合 ]
backup.sh

  #/bin/sh
  DAY=`date "+%y%m%d"`
  $rsync -avr --progress --delete -e "ssh -i ~/.ssh/id_rsa" user@192.168.0.1:~/serverdata ~/backups/$DAY


特にdateコマンドの周辺はバッククオート「`」ですよシングルクォーテーション「'」じゃないですよ。
特にdateコマンドの周辺はバッククオート「`」ですよシングルクォーテーション「'」じゃないですよ。
特にdateコマンドの周辺はバッククオート「`」ですよシングルクォーテーション「'」じゃないですよ。

大事な事なので3回太字で書きました。
過去にこの違いに気づかなくて、うん時間もうなっていた事がありましたので。(阿呆

[ windowsの場合 ]
backup.bat

  SET DAY=%date:~-8,2%%date:~-5,2%%date:~-2,2%
  $rsync -avr --progress --delete -e "ssh -i ~/.ssh/id_rsa" user@192.168.0.1:~/serverdata ~/backups/%DAY%



指定したパスに存在しないディレクトリは、ローカルだろうがリモートだろうが勝手に生成してくれます。
それにしても、winのバッチファイルの書きづらさは最悪さ・・・日付出力のオプションが無いため、後ろから出力された文字列を削ったのを3回連結してるんです。
区切り文字に変更不可の / を入れるの考えたの誰だよ。



**タスクの自動化
windowsならタスクスケジューラに、*nixならcronにスケジュールを登録するのが妥当。

[ *nixの場合 ]
sudo crontab -e コマンドで、vi が起動してcrontabを編集出来る。
sudo したのは、root権限でなければデータ転送に支障がでるから。
cronの構文がよくわからなければ、これを使うと早い。
基本構文は [ 分 時 日 月 曜日 コマンド ] でワイルドカード指定など可能。

  0 0-23/12 * * * ~/backup.sh # 12時間毎
  0 0 * * * ~~/backup.sh #24時間毎



[ windowsの場合 ]
タスクスケジューラに登録しませう。(投




個人的な方針として、バックアップを取っていることを悟られないようにするために、日付毎のプル型バックアップを紹介しました。
リストアはバックアップ元と先を入れ替えるだけです。
本文では便宜上バックアップと書きましたが、気持ち的にはデータの同期を取る感じです。

大雑把に書いたので、不備があったらごめんなさい。
スポンサーサイト

カウンター

プロフィール

Hatabon

Author:Hatabon
日々精進。
基本的に管理人はゆるやかな人です。
コメントへの返信もゆるやかです。

Twitter on FC2

最新記事

最新コメント

月別アーカイブ

カテゴリ

検索フォーム

全記事表示リンク

RSSリンクの表示

リンク

  • pagetop
Copyright © Hatabon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。