さくらの VPS + rsync でお手軽バックアップサーバーを作る
前書き
自宅で Linux サーバーを複数台運用していると、個人で運用しているとはいえハードウェア故障に備えてバックアップが必要になってきます。
Linux サーバーで高度なことはやっていないのですが、Bash や Python スクリプトを書いて cron で定期的に動かしてウェブスクレイピングでデータ取得しています。
スクリプトはちょこちょこ更新しているので、バックアップを取らないと故障した時のダメージが大きいのでバックアップの仕組みを作っていくことにした。
rsync コマンドは tcp ポート番号 873 を使うが、内部的に ssh を使用するらしくサーバー側 (データがコピーされる側) で tcp 22 に接続ができれば良い。このため、サーバー側の tcp 873 がブロックされていても良い。
バックアップのやり方
バックアップサーバーはさくらの VPS 上の Ubuntu
rsync を使ってバックアップしたいディレクトリーを、さくらの VPS 上のサーバー (Ubuntu) にコピーする形を取ります。
このためバックアップサーバーがさくらの VPS のサーバーとなりますが、バックアップする場所は /data ディレクトリにします。
$ df -h Filesystem Size Used Avail Use% Mounted on udev 445M 0 445M 0% /dev tmpfs 98M 700K 97M 1% /run /dev/vda3 46G 26G 18G 60% / tmpfs 489M 0 489M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/vda4 49G 84M 47G 1% /data tmpfs 98M 0 98M 0% /run/user/1001 $
さくらの VPS は、石狩データセンターにあるサーバーでプランとしては月額 807 円のものです。(ただし、12 ヶ月分を一括で支払う必要があったと思う) で、この 807 円のプランは SSD 容量が 50 GB ですが、追加で 50 GB を頂くことができるものでこの追加した 50 GB が /data ディレクトリになっています。
普段使っていないディレクトリなのでバックアップ用途に使ってしまおうというわけです。
バックアップサーバーとして、さくらの VPS を使う理由はバックアップサーバーを自分で運用したくないからです。肝心なときにバックアップサーバーが壊れたりしたらマズイですよね。
このためこのような重要なサーバー管理は、さくらの VPS にまかせてしまいたいわけです。というわけでバックアップサーバーは、さくらの VPS を使うことにしました。
サーバーごとにバックアップ先ディレクトリを作る
バックアップしたいと考えているサーバーは 4 台あります。バックアップサーバーのディレクトリが /data なので、/data に各サーバーのホスト名ディレクトリを作り、そこにバックアップ対象のディレクトリーをコピーする形にします。
各サーバーのホスト名は以下の通り。
- home
- cube
- interface
- tiny
このため、たとえばホスト名 tiny のデータは /data/tiny 配下に保存する形になります。
僕はすべてのサーバーで同じ名前のユーザーを使っていて、バックアップ対象のデータは bash なら bash ディレクトリ、python なら python ディレクトリを $HOME ディレクトリーに作っていて、これは一様です。
このため、
- /home/hogeuser/bash ディレクトリーをバックアップする
- /home/hogeuser/python ディレクトリーをバックアップする
という形になります。
実際の rsync コマンド
rsync コマンドは、さくらの VPS のバックアップサーバー側で実行するのではなく、バックアップをしたいデーターを持っている側で実行します。
たとえば tiny サーバーにある bash ディレクトリー配下を丸ごとバックアップしたい場合は、tiny サーバーで以下のコマンドを実行します。
rsync -a /home/hogeuser/bash/ sakura1:/data/tiny/home/hogeuser/bash
tiny サーバーにある /home/hogeuser/bash ディレクトリ配下の全ファイルを、sakura1 の /data/tiny/home/hogeuser/bash ディレクトリにコピーする形になります。
sakura1 はさくらの VPS にある Ubuntu ですが、ssh のコンフィグファイルに定義してあります。
$ pwd /home/hogeuser/.ssh $ ls -l config -rw-rw-r-- 1 hogeuser hogeuser 404 Feb 26 16:50 config $ cat config Host sakura1 HostName ik2-527-42024.vs.sakura.ne.jp User hogeuser IdentityFile ~/.ssh/sakura1 $
つまり sakura1 は hogeuser@ik2-527-42024.vs.sakura.ne.jp に置き替えられて以下のコマンドが実行されることになります。
rsync -a /home/hogeuser/bash/ hogeuser@ik2-527-42024.vs.sakura.ne.jp:/data/tiny/home/hogeuser/bash
ここまでが tiny サーバー側での操作です。
rsync 実行後の状態をバックアップサーバー側で確認したのが下記です。
$ ls -l /data/tiny/home/hogeuser/bash/
total 28
drwxrwxr-x 4 hogeuser hogeuser 4096 Jan 1 00:05 log
-rwxr--r-- 1 hogeuser hogeuser 2478 Oct 23 18:15 make_daily_result.bash
drwxrwxr-x 2 hogeuser hogeuser 4096 Feb 17 16:03 old
drwxrwxr-x 5 hogeuser hogeuser 4096 Feb 26 01:00 result
-rwx------ 1 hogeuser hogeuser 745 Nov 3 20:21 send_tweet.py
-rwxr--r-- 1 hogeuser hogeuser 298 Oct 2 14:54 speedtest.bash
-rwxr--r-- 1 hogeuser hogeuser 713 Dec 11 17:23 tweet_hourly_result.bash
$
無事にバックアップされたことが確認できました。
scp でコピーする方法についても書いておく
我が家で運用している複数の Linux で rsync によるコピーを実行しようとしたらうまく行かないものもあった。
いろいろ調べたがわからなかったので scp コマンドでコピーする方法についても書いておきたい。
コピーしたいデータがある側で、以下 scp コマンドを実行する。
sudo scp -i ./publickeyfile -r /home/user/ hoge@ik2-527-42024.vs.sakura.ne.jp:/data/ubuntu/home/
このコマンドでは、-i オプションで ssh プロトコルで使用する公開鍵ファイルを指定している。
またコピーするデーターは /home/user ディレクトリにあるが、これを転送先サーバーにコピーするに当たって /data/ubuntu/home/ と指定している点に注意してほしい。
- /data/ubuntu/home/ と指定することで、転送先サーバーの /data/ubuntu/home/user ディレクトリにコピーされる。
- /data/ubuntu/home/user/ と指定してしまうと、転送先サーバーの /data/ubuntu/home/user/user ディレクトリにコピーされてしまう。
ややこしいがデータのコピーが終わった後に意図したディレクトリに保存されていればオーケーだ。
後日談
この投稿は中途半端な内容となったこともあって別記事として書き直しました。今 (2023 年 7 月時点) は下記投稿の内容でバックアップしています。