いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.154 / 読者数:1317名

こんばんは、うすだです。

たいへんご無沙汰いたしておりました。
1ヶ月のお休みをいただいたことで、切羽詰まったお仕事がなんとか無事に解決し、 満を持して今回をお送りできることになりました。

…と言いたいところでしたが、いえ、お仕事はなんとか順調に進んでいるのですが、 3月末で終わらず、次々と新たな課題が FIFO に積まれているような状態です。

そのわりには、さっきまで、半額で買ってきたエビを揚げていたりして、 間違った優先順位で、目の前のやるべきことを、 やったりやらなかったりしております。
(関係ありませんが、いま、部屋がすごくエビ臭くなってしまってます。 みなさんも、エビを揚げるときは、ご注意ください。)

というわけで、特にオチはありませんが、 逃避行動(エビを揚げた)に満足したところで、今回もはりきって参りたいと思います。

今回のお題 - rdiff-backup でリモートバックアップする

前回(といっても1ヶ月前ですけれど…)、 リモートバックアップの方法をいくつかご紹介しました。

Vol.153 - リモートバックアップについて考えてみる
http://www.usupi.org/sysad/153.html

コマンドを組み合わせたり、バージョン管理ツールを流用したりすることで、 リモートバックアップをなんとか実現しました。
けれどもやはり、リモートバックアップを主目的とするツールが、 最強のように思います。(当り前ですね…)

というわけで唐突ですが、今回は、 rdiff-backup というリモートバックアップツールを、ご紹介したいと思います。


rdiff-backup は、Python で記述されたバックアップツールです。
ディレクトリ以下をまるっと、(ローカルなマシン上の)別のディレクトリや、 リモートなマシン上にバックアップすることができます。

rdiff-backup
http://www.nongnu.org/rdiff-backup/

最大の特徴は、簡単に使える、ということだと思います。
ですので、今回は、なにはともあれ、 バックアップと復元の簡単な手順をご紹介したいと思います。


まずは、rdiff-backup をインストールしましょう。

今どきのディストリビューションには、rdiff-backup パッケージがあるようですので、 それを使うと楽にインストールができます。

たとえば、Fedora の場合ですと、 以下のように yum コマンドを実行するだけで済みます。 (はい、お察しの通り、root 権限が必要です。)

  # yum install rdiff-backup

Debian や Ubuntu の場合は、以下のように apt-get してください。

  # apt-get install rdiff-backup

あ、Ubuntu の方など、root でログインできない場合は、 sudo コマンド経由で実行してください。

  $ sudo apt-get install rdiff-backup

Vine や CentOS には、残念ながらパッケージがないようです。
しかし、rdiff-backup のソースコードには spec ファイルが含まれますので、 自力で RPM パッケージを作ることができます。
ただし、rdiff-backup の作成には、python-devel と librsync-devel が必要で、 librsync-devel のパッケージもなかったりします。
ですので、librsync-devel パッケージの作成からしないといけません。

念のため、以下に、rdiff-backup パッケージの作成方法を羅列します。
興味のある方、あるいは切羽詰まった方だけ、ご覧くださいませ。

  $ tar xvfz librsync-0.9.7.tar.gz librsync-0.9.7/librsync.spec
  $ mv librsync-0.9.7/librsync.spec ~/rpm/SPECS/
  $ mv librsync-0.9.7.tar.gz ~/rpm/SOURCES/
  $ rmdir librsync-0.9.7
  $ rpmbuild -bb rpm/SPECS/librsync.spec
  $ sudo rpm -i rpm/RPMS/i386/librsync*
  $ tar xvfz rdiff-backup-1.2.6.tar.gz \
  rdiff-backup-1.2.6/rdiff-backup.spec
  $ mv rdiff-backup-1.2.6/rdiff-backup.spec ~/rpm/SPECS/
  $ mv rdiff-backup-1.2.6.tar.gz ~/rpm/SOURCES/
  $ rmdir rdiff-backup-1.2.6
  $ rpmbuild -bb rpm/SPECS/rdiff-backup.spec
  $ sudo rpm -i rpm/RPMS/i386/rdiff-backup*

spec ファイルを抜き出して rpmbuild で作成しているだけですね。
おっと、librsync-0.9.7.tar.gz は、以下から入手できます。

librsync -- network-delta library
http://sourceforge.net/projects/librsync


rdiff-backup のインストールができたら、早速使ってみましょう。
まずは、ローカルマシンだけで試してみましょう。

とりあえず、以下のように、 ホームディレクトリの直下に daiji というディレクトリを作成し、 これをバックアップ対象にしたいと思います。
ただ、空のディレクトリではつまらないので、 test という名のファイルもダミーで作っておきます。

  $ mkdir ~/daiji
  $ echo test > ~/daiji/test

そして、daiji-backup というディレクトリに、バックアップを作成してみましょう。 rdiff-backup コマンドを以下のように実行します。

  $ rdiff-backup ~/daiji ~/daiji-backup

作成されたかどうか、daiji-backup 以下を見てみましょう。

  $ ls ~/daiji-backup
  rdiff-backup-data/  test

test ファイルと、管理用の rdiff-backup-data ディレクトリが、 問題なく作成されているようです。
次に、~/daiji-backup/test がどんなものか、元と比較してみましょう。

  $ ls -l ~/daiji/test ~/daiji-backup/test
  -rw-r--r-- 1 usu adm 5  3月29日 17:12 /home/usu/daiji/test
  -rw-r--r-- 1 usu adm 5  3月29日 17:12 /home/usu/daiji-backup/test
  $ cat ~/daiji/test
  test
  $ cat ~/daiji-backup/test
  test

どうやら同じモノのようですね。

 

では次に、daiji の中身を更新してみましょう。
以下では、dir というディレクトリと、test2 というファイルを作成しています。

  $ mkdir ~/daiji/dir
  $ echo test2 > ~/daiji/dir/test2

そして、rdiff-backup コマンドを使って、先ほどと同様にバックアップをとります。

  $ rdiff-backup ~/daiji ~/daiji-backup

すると、~/daiji-backup 以下にも、作成したファイルができます。

  $ ls ~/daiji-backup
  dir/  rdiff-backup-data/  test
  $ ls ~/daiji-backup/dir/
  test2

ちなみに、バックアップの履歴は、バックアップ先に記録されています。
rdiff-backup コマンドに -l オプションをつけて実行しますと、 履歴を確認することができます。

  $ rdiff-backup -l ~/daiji-backup
  Found 1 increments:
    increments.2009-03-29T17:13:04+09:00.dir  Sun Mar 29 17:13:04 2009
  Current mirror: Sun Mar 29 17:15:50 2009

ローカルのバックアップ手順がわかったところで、次は、 リモートに挑戦してみたいと思います。

リモートマシンへのアクセスは、ssh を利用して行います。
ですので、リモートマシンに対して、 ssh でログイン等ができるようになっている必要があります。 以降は、そういう環境でお試しください。

たとえば、先ほどの daiji を、 リモートマシン remote の daiji-backup にバックアップするには、 以下のように実行します。

  $ rdiff-backup ~/daiji remote::daiji-backup
  usu@remote's password: (パスワードを入力)

リモートマシンのユーザ名が、ローカルマシンと異なる場合は、 リモートマシンの名前の指定の前に、ユーザ名@ をつけてください。
たとえば、リモートマシンのユーザ名が steve だったら、 先ほどと同様にバックアップするには、以下のように実行します。

  $ rdiff-backup ~/daiji steve@remote::daiji-backup
  usu@remote's password: (パスワードを入力)

もちろん、逆も可能です。 (リモートマシンの ~/daiji をローカルマシンの ~/daiji-backup にバックアップ …もできます。)

  $ rdiff-backup remote::daiji ~/daiji-backup
  usu@remote's password: (パスワードを入力)

それから、リモートマシンに対して、-l オプションも使えます。

  $ rdiff-backup -l remote::daiji-backup
  usu@remote's password: (パスワードを入力)
  Found 0 increments:
  Current mirror: Sun Mar 29 20:24:31 2009

 

ちなみに、リモートマシンにも rdiff-backup が必要です。
そして、rdiff-backup のバージョンが双方で違いすぎると、 動作しないことがあるようです。
たとえば、バージョンが 1.2.6 と 1.1.5 (あるいは 1.1.16)とで試してみたところ、 以下のように叱られてしまいました。

  $ rdiff-backup ~/daiji remote::daiji-backup
  usu@remote's password: (パスワードを入力)
  Warning: Local version 1.2.6 does not match remote version 1.1.5.
  Exception '
  Warning Security Violation!
  Bad request for function: rpath.make_file_dict
  with arguments: ['/home/usu/daiji']
  ' raised of class 'rdiff_backup.Security.Violation':
  ...後略...

様々なディストリビューションが混在する環境での運用を検討されている貴兄は、 ご注意くださいまし。


さて、バックアップばかりとっていてもいけませんので、 そろそろ復元をしてみましょう。

バックアップを復元するには、-r オプションを使用します。
rdiff-backup は、最新だけでなく、過去の状態も記録されています。
ですので、-r オプションには、その時刻を指定する必要があります。
とりあえず、最新の状態を復元するには、now と指定してください。
たとえば、~/daiji-restore に復元するには、以下のように実行します。

  $ rdiff-backup -r now ~/daiji ~/daiji-restore

すると、~/daiji-restore 以下に復元されます。

  $ ls -R ~/daiji-restore
  /home/usu/daiji-restore:
  dir/  test

  /home/usu/daiji-restore/dir:
  test2

最新でない状態に戻したい場合は、その時刻を明記します。
たとえば、-l オプションをつけて実行した結果が以下の場合、

  $ rdiff-backup -l ~/daiji-backup
  Found 1 increments:
    increments.2009-03-29T17:13:04+09:00.dir  Sun Mar 29 17:13:04 2009
  Current mirror: Sun Mar 29 17:15:50 2009

ひとつ前の状態の時刻は 2009-03-29T17:13:04+09:00 ですので、 now の代わりにこれを指定します。

  $ rdiff-backup -r 2009-03-29T17:13:04+09:00 ~/daiji ~/daiji-restore2

すると、~/daiji-restore2 以下には、ひとつ前の状態が復元されます。

  $ ls -R ~/daiji-backup2
  /home/usu/daiji-restore2:
  test

以上、rdiff-backup によるバックアップと復元のとりあえず的方法を、 ご紹介しました。

ほんとに簡単に使えますので、ぜひあちこちにインストールして、 試してみてくださいませ。
また、上記以外の使い方もいろいろあります。オンラインマニュアルなどを参照して、 いろいろ試すと面白いと思います。

 

ところで、前回、 tar と ssh を使ってリモートバックアップっぽいことを行いました。
これに関して、読者のかたから、 ローカルマシンにアーカイブファイルを残さずに済む方法を、 教えていただきました。
せっかくですので、ここでご紹介させていただきます。

前回では、tar コマンドで、以下のようにアーカイブファイルを作成し、

  $ tar cfj /var/backup/apache2-`date +%Y%m%d%H`.tar.bz2 \
  -C /usr/local/apache2 .

これを ssh コマンドでコピーしていました。

  $ scp -p /var/backup/apache2-`date +%Y%m%d%H`.tar.bz2 \
  remote:/var/backup/client1/

これらを、以下のように、パイプを使って、一行で一気に行えます。

  $ tar cjC /usr/local/apache2 . | ssh remote \
  "cat > /var/backup/client1/apache2-`date +%Y%m%d%H`.tar.bz2"

これを教えていただくまで、パイプで ssh に渡して処理できることを、 まったく知りませんでした。(お恥ずかしい限りです…)

他にも、いろいろな使いかたが考えられそうですね。
ネタがたまりましたら、ここで一気にご紹介したいと思っております。

というわけで、とってもありがとうございました。> 吉岡さん

宿題の答え

前回の宿題は、

  各アーカイブファイルのサイズや処理時間などを調べてみましょう。

でした。

というわけで、以下の条件で、淡々と計測してみました。
計測環境は、以下の通りです。

[計測環境]
H/W: ThinkPad x24 (PentiumIII 1066MHz)
OS: Vine Linux 4.2 (linux-2.6.16)
[使用したアーカイバ]
tar 1.15.1 (gzip 1.3.5, bzip2 1.0.3)
zip 2.3
lha 1.14i
[対象となるファイル]
1. 606個のテキストファイル, 合計 14,692,266 バイト 2. 301個の実行ファイル, 合計 41,452,095 バイト 3. 293個のJPEG画像ファイル, 合計 73,063,051 バイト

4年前に中古で買った ThinkPad に、 1年位前にアップグレードした Vine という微妙な組合せですが、 やることに意義があるのだ! ということで、さらりと流していただけますと幸いです。

さて、各コマンドによるアーカイブの作成方法は、以下の通りです。

[tar+gzip]
$ tar cfz foo.tgz foo/
[tar+bzip2]
$ tar cfj foo.tar.bz2 foo/
[zip]
$ zip -rq foo.zip foo/
[lha]
$ lha aq2 foo.lzh foo/

そして、結果は以下の通りです。

[1. テキストファイル]
    種別     かかった時間アーカイブファイルのサイズ圧縮率
tar+gzip3秒4,550,795 バイト31.0%
tar+bzip29秒3,630,606 バイト24.7%
zip4秒4,857,233 バイト33.1%
lha6秒5,139,850 バイト35.0%
[2. 実行ファイル]
    種別     かかった時間アーカイブファイルのサイズ圧縮率
tar+gzip12秒20,104,053 バイト48.5%
tar+bzip229秒18,008,202 バイト43.4%
zip12秒20,293,225 バイト49.0%
lha19秒20,743,273 バイト50.0%
[3. 画像ファイル]
    種別     かかった時間アーカイブファイルのサイズ圧縮率
tar+gzip19秒71,162,975 バイト97.4%
tar+bzip284秒70,675,652 バイト96.7%
zip14秒71,237,120 バイト97.5%
lha37秒71,269,185 バイト97.5%

圧縮率だけですと bzip2 の圧勝といった感じですが、 gzip が意外と健闘していることに、個人的にはプチ驚きでした。

ところで、最近リリースされた tar の xz圧縮だとどうなのかな? という疑問が一瞬わきましたので、こちらもえいやーで試してみました。

[1. テキストファイル]
    種別     かかった時間アーカイブファイルのサイズ圧縮率
tar+xz41秒3,215,328 バイト21.9%
[2. 実行ファイル]
    種別     かかった時間アーカイブファイルのサイズ圧縮率
tar+xz81秒6,357,704 バイト15.3%
[3. 画像ファイル]
    種別     かかった時間アーカイブファイルのサイズ圧縮率
tar+xz131秒70,709,488 バイト96.8%

圧縮率のよさ、特に実行ファイルの圧縮率がすごいですね。
しかし、それにもましてすごいのが、実行時間です。
まあ、最近の速いマシンだと、もっと短時間で済むのかもしれません。

なにはともあれ、用途にあわせて使い分けていただければと思います。

今回の宿題

今回の宿題は、

  rdiff-backup でバックアップした内容を、-r オプションを使わずに、
  最新の状態に復元してみましょう。

です。

rdiff-backup のページにも例が載っていますので、わかりますよね。
あと、リモートの場合も考えていただけますと、よろしいのではないかと思います。

あとがき

いまやっているお仕事では、実装がほぼ終わりましたので、 いろいろ計測を行って結果を表やグラフにする、という作業を行っています。

いままで、Linux のポーティングやドライバの開発がメインでしたので、 計測して結果を評価する、ということをあまりしてきませんでした。

ですので、えいやーで何も考えずにやってしまいますと、必要なデータが抜けたり、 わかりにくい見せ方をしてしまって、せっかく計測したデータを有効に使いこなせない、 という失敗をやらかしてしまいます。

案の定、上司などからツッコミをいただき、以下の本を紹介されました。

ビジュアライジング・データ − Processing による情報視覚化手法 http://www.amazon.co.jp/exec/obidos/ASIN/4873113784/usupiorg06-22

Processing というプログラミング環境を使用して、 データの収集・解析から視覚化するまでの手法を、わかりやすく説明した本です。

実際の例をもとに、Processing を使って説明してくれますので、自分で実際に試して、 結果を目の当たりにできます。
Processing 自体、簡単に記述できるよう設計された言語で、 結果を画像ファイルや PDF, Applet などに変換できるようにもなっています。
いろいろと創作意欲(?)をかきたてられる、いいモノだと思います。

実はまだ読んでいる最中ですので、お仕事に反映するには至っていないのですが、 ぜひ、最後まで読んで、お仕事に使ってみたいと思っています。

 

今回も、ここまで読んでいただき、ありがとうございました。
次回は、4月19日(日) 頃に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−定額給付金を使って某イベントに出るべきか悩んでいます。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本