rsyncでバックアップいろいろ

サイト作成の注文を受け、発注書に「別サーバーにバックアップを取る事」との記載があったためバックアップ方法を考えた。
まぁ一番手っ取り早いのはrsyncだろうということでrsyncでバックアップを取ろうとした。

rsync -avz -e ssh 192.168.1.1:/home/ /home/backup/

↑単純にこれだけだと、

root@192.168.1.1's password:

と出てしまい、rsyncする度にパスワードを入力しなければならない。
毎回パスワードを入力するのでもいいけど、バックアップくらいcronで自動化して夜中にやらせたい。

そこで出てくるのが公開鍵と非公開鍵という意味不明のシロモノ。
とりあえずこいつらをどうにかこうにかするとパスワード無しでSSH接続ができるようになるらしい。
そいつぁ便利。よし、やってみよう。

今回は以下サイトを参考にしてみました。多謝。
http://www.unix-power.net/linux/rsync.html
http://prototype-beta.com/server/entry/14_rsync%E3%81%A8cron%E3%81%A7%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97

rsyncを調べている時によく出てきた言葉が「バックアップサーバー」と「バックアップクライアント」の2つ。
正直僕くらいの初心者には何のことかよく分からない。
そこで分かりやすく下記の様にしてみた。

バックアップを取りたいサーバー(本番サーバー)⇒192.168.1.1
バックアップを保存したいサーバー(バックアップサーバー)⇒192.168.1.2

こんな感じ。
大体の流れは下記の通り。

~sshでの接続手順~

[root@192.168.1.2 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):[空でEnter]
Enter passphrase (empty for no passphrase):[空でEnter]
Enter same passphrase again:[空でEnter]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
9f:9f:9f:9f:9f:9f:9f:9f:9f:9f:9f:9f:9f:9f:9f:9f root@192.168.1.2
The key's randomart image is:
[鍵のイメージが表示される]

/root/.ssh/id_rsa.pubに保存されるのが公開鍵(.pubはpublisherってことかな?)で
/root/.ssh/id_rsaに保存されるのが非公開鍵
と言うらしい。
これらの中で公開鍵を192.168.1.1に保存します。
やり方はどうでもいいと思います。
catで表示させてコピペでもいい(ハズ)
が、いろんなとこに書いてあったやり方はscpらしいのでそれで…。

[root@192.168.1.2 ~]# scp /root/.ssh/id_rsa.pub user@192.168.1.1:/home/user/
user@192.168.1.1's password:[ここで192.168.1.1のuserのパスワードを入力]
id_rsa.pub             100%  404     0.4KB/s   00:00

※ユーザー名userはそれぞれの環境で変更

これで192.168.1.1の/home/user/を見てみるとid_rsa.pubがやってきています。
これを/root/.ssh/authorized_keysに書いてやります。
書くと言ってもviやvimで記述しようと思ってもダメです。
答えを先に言ってしまうと/root/.ssh/authorized_keysをlessしてみるとこんな感じだからです。

[root@192.168.1.1 ~]# less /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yssssscss2EAAA2bKKbfLXRpkSjh8YU5y8sqL3FQ3+H/6Qux[中略]u9u6xvv7kt8qIc/J5qxKoo10jXG9rNkzVjZiNP2Q== root@192.168.1.2

多分暗号化されてるんでやんすよ。
なのでここはcatコマンドさんの出番です。

[root@192.168.1.1 ~]# cat id_rsa.pub >> /root/.ssh/authorized_keys
[root@192.168.1.1 ~]# chmod 600 /root/.ssh/authorized_keys

authorized_keysファイルに読み書きの権限を与えてあげる必要があるようで、最後にchmod 600しています。

次に(これが大事なのですが)192.168.1.2から192.168.1.1にrootでsshログインをするため、その設定を192.168.1.1にしなければなりません。

[root@192.168.1.1 ~]# vi /etc/ssh/sshd_config
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

上記の3か所を上記の通りに変更。
とくに弄っていなければコメントアウトを外すだけでOKだと思います。
設定を変更したらsshdを再起動。

[root@192.168.1.1 ~]# service sshd restart
sshd を停止中:                     [  OK  ]
sshd を起動中:                     [  OK  ]

設定を変更できたら192.168.1.2からSSH接続をしてみます。

[root@192.168.1.2 ~]# ssh root@192.168.1.1
Last login: Fri Aug 15 15:15:15 2014 from 192.168.1.2

パスワードを要求されなければOK。

~rsyncの実行~

ここまで来たらもう終わったようなもんです。
192.168.1.2の方でrsyncを試してみます。

[root@192.168.1.2 ~]# rsync -avz -e ssh 192.168.1.1:/home/ /home/backup/
receiving incremental file list
[初回はバックアップするファイルのリストがズラーっと出ます]
sent *** bytes  received *** bytes  *** bytes/sec
total size is ***  speedup is 1.66

「rsync error:」という嫌な文字列が出なければ成功です。
後はこいつをcronに書いてやれば決まった時間に自動でバックアップを取ってくれます。

rsyncのオプションは下記のものがあります

-v
–verbose
バックアップ時にバックアップしているファイル名を表示する
-r
–recursive
指定したディレクトリ以下の各ディレクトリも再帰的にバックアップ
-l
–links
シンボリックリンクをそのままバックアップ
(シンボリックリンク先の内容をコピーせずにリンクのままコピー)
-H
–hard-links
ハードリンクをそのままバックアップ
-p
–perms
パーミッション属性を保存したままバックアップ
-g
–group
グループ属性を保存したままバックアップ
-o
–owner
所有者属性を保存したままバックアップ(rootのみ)
-D
–devices
デバイスファイルを保存したままバックアップ(rootのみ)
-t
–times
タイムスタンプを保存したままバックアップ
-z
–compress
データを圧縮して転送する
-u
–update
追加されたファイルだけバックアップ
–delete バックアップ元で削除されているファイルはバックアップ先でも削除する
-e ssh SSHを使用
–password-file パスワードファイルを指定
-c
–checksum
バックアップ元とバックアップ先でファイルのチェックサムが確認され、バックアップ先で既に存在する同じチェックサムとサイズを持つ同じ名前のファイルはスキップされる。
-a
–archive
上記のオプションのうち r,l,p,t,g,o,D を指定したのと同じ効果

とりあえずオプションaを入れておけば問題ないのかな、と思います。
僕はサーバーの師匠に-avzと教わったのでそれを使用していますが、人や用途によって-avrだったり-a –deleteだったりするみたいです。

~cronの設定~

192.168.1.2にバックアップのためのシェルスクリプトを書きます。

[root@192.168.1.2 ~]# vi backup.sh
#!/bin/sh
rsync -avz -e ssh 192.168.1.1:/home/ /home/backup/

後はこいつをcrontab、若しくはcron.dailyなどで実行させるだけです。

[root@192.168.1.2 ~]# chmod 700 backup.sh
[root@192.168.1.2 ~]# crontab -e
0 1 * * * /root/backup.sh

上記はAM1時に実行する例です。chmod 700で実行権限を付与するのを忘れずに!(僕はよく忘れます。)
crontabの書き方は以下サイトが分かりやすいです。

crontabの書き方


サーバーをやっているとバックアップの重要性が身に染みてよく分かります。欲を言えばリアルタイムでバックアップを取ってくれると尚良しですね。

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)