Dec 18, 2005
rsyncによるバックアップのメモ
今度、回線が増強されるようで、そのためにサーバのデータバックアップを復習しておくことにする。メモしておかないと忘れてしまうので。
バックアップはrsyncが究極の手段だと思う。
2台のLinuxマシンが前提である。片方がサーバ、片方がデスクトップを兼ねたクライアントで通常使っているとする。このクライアントが次のサーバになるわけである。
動的ファイル、BBSのログなどが、ユーザ自身がオーナーならば、「.netrc」ファイルを作りその中にマクロを書いてサーバからクライアントに転送するように、クライアント側からコマンドを実行すればいいので、それがいちばん簡単だと思う。
しかし、セキュリティのためもあるし、動的ファイルもapacheやwww-dataがオーナーであるようにblogなどはなっている。それにrsyncは変更部分だけをダウンロードしたり、サーバベース認証ならばパスワードがいらないので、シェルスクリプトを書いてcronに登録しやすい。ただし以下のメモは「public_html」をそのままバックアップするので、オーナーがapacheやwww-dataのファイルがある場合には、整合性をとる必要がある。
rsyncによるバックアップ
A 前作業
サーバ側 /etc/ssh/sshd_configをサーバベース認証に変更し再起動(マシンを再起動するわけでなく、sshdを再起動。Linuxを再起動する必要があることはサーバではほとんどない)
クライアント側 /etc/ssh/ssh_configをサーバベース認証に変更
B 1
暗号化パスワード認証には、最新のSSH2を使う。rsaには2種類の認証があるが、現在一般的にはrsa2を使う。「ssh-keygen」コマンドのrsaといえばrsa2のことである。rsa1の場合は「rsa1」のコマンドを使う。
◯クライアント側で、公開鍵と秘密鍵を作成する。
$ssh-keygen -t rsa
すると、
~/.ssh
というディレクトリができ、そのなかに、
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
というファイルができる。
B 2
サーバ側に公開鍵を転送する。
まず、サーバに
~/.ssh
というディレクトリを作り、アクセスモードを700にする。
id_rsa.pubをこのディレクトリに転送して、名前を、
authorized_keys
に変更して、アクセスモードを600にする。
B 3
サーバのホームディレクトリに、
「.shosts」
というファイルをつくる。アクセスモードは644。
内容は次の1行。
192.168.0.8 shimirin
これはクライアント側のLAN内IPアドレスとユーザである。
クライアント側にも、「.shosts」として、
192.168.0.5 shimirin
という1行を書いたファイルをつくる。これはサーバのIPアドレスとユーザである。
B 4
サーバ側からクライアントにsshでアクセスする。
$ssh 192.168.0.8
すると、サーバ側の「.ssh」ディレクトリに「known_hosts」というファイルが、
192.168.0.8 (以下暗号省略)
という内容でできるので、これの頭に、
i.love.belle.cxm
などの「/etc/hosts」で「192.168.0.8 i.love.belle.cxm」というふうに書いてある名前を、
i.love.belle.cxm,192.168.0.8 (以下暗号省略)
のようにカンマを最後にいれて書き換えてセーブする。
C
これでクライアントから、サーバにパスワードなしにアクセスできるはずなので、
クライアント側から、
$ssh 192.168.0.5
としてアクセスしてみる。パスワードを要求されなければ成功。
以下の行を入れたファイルを「backup.sh」としてセーブ。アクセスモードは700。
rsync -av [email protected]:/home/shimirin/public_html/ /home/shimirin/public_html
前はスラッシュあり、後はなしでないとまずい。
D
cronジョブにユーザ権限でこのファイルの実行を登録(たとえば毎日午前4時に実行など)。