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

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


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

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

今週は、お客様のところへお伺いしてLinuxをインストールする、 という機会を、ひっさびさに得ました。

Linux のインストールなんて楽勝だぜ、てな具合で余裕をかましながらの作業… になるはずでしたが、思わぬところに落し穴がありました。

というのも、インストールメディアとして DVD を用意して行ったのですが、 なんと、インストールする PC に DVD ドライブがありません。
USB 接続の DVD ドライブをなんとか探してきていただき、ことなきを得た… かと思いきや、今度は、DVD ドライブからブートしてくれません。

さんざん Linux のインストールを経験されている貴兄なら、 USB メモリからのブートなど、他の選択肢が即座に浮かぶことと思います。

しかし、ここ数年は、 普通の PC か仮想環境にしか Linux を入れたことがありません。 USB メモリなどからブートできる PC と戯れたこともないわたくしは、 しばし途方に暮れてしまいました。

幸い、何度か試していたら、なぜか DVD からブートしましたので、 作業を進めることができました。
(またしても、ぎりぎりの神さまに助けていただいたようです。)

「実践」とかえらそーなことを言いながら、己は「実践」を怠っていたということに、 いまさらですが気づかされました。
そんなの簡単だぜ、と思う前に、実際にやってみないといかんですね。
USB メモリからのブートくらいは、近日中に経験しておこうと思います。

長いわりには何も言ってませんが、今回もはりきってまいりますよ!

今回のお題 - rdiff-backup をもう少し使いこなす

前回は、rdiff-backup の簡単な使いかたをご紹介しました。

Vol.154 - rdiff-backup でリモートバックアップする
http://www.usupi.org/sysad/154.html

簡単な使いかたがわかっても、実際にどういう使いかたをすればいいのかわからん、 とおっしゃる貴兄もいらっしゃるのではないかと思います。
ですので、今回は、実際に使うことを想定して、もう少し詳しい使いかたなどを、 ご紹介していきたいと思います。


まず、即座に思い浮かぶのが、バックアップの自動化です。よね。
ここでは、リモートマシンへのバックアップの自動化を目指します。

さて、自動化と言えば cron です。
cron 様にお願いして、自動的に rdiff-backup を実行してもらえばよいのですが、 そのままですと、毎回 SSH のパスフレーズの入力を行う必要があります。

これでは、まったくもって自動化とは言えません。
ですので、パスフレーズなしで SSH が使えるようにしたいと思います。
方法は、太古の昔にご紹介済ですので、下記を見て設定してください。

Vol.009 - 別のマシン上にあるディレクトリと同期をとる
http://www.usupi.org/sysad/009.html

制限をかけて使い分けることを想定して、 いちいち -i オプションを使用していますが、面倒だという貴兄は、 以下のように id_dsa という名前に変更してしまってください。

  $ mv -i ~/.ssh/synckey ~/.ssh/id_dsa

 

では、前回同様、daiji という名のディレクトリ以下を、 リモートマシン remote の daiji-backup というディレクトリに、 rdiff-backup を使ってバックアップしていきたいと思います。

バックアップは、初回も2回目以降も、手順は以下の通りでした。

  $ rdiff-backup daiji remote::daiji-backup

ようするに、これが定期的に実行されるよう、 cron で設定してしまえばよいわけですね。
ただ、上記のままですと SSH のパスフレーズを聞かれますので、以下のように、 パスフレーズなしの秘密鍵を使うようにします。

  $ rdiff-backup --remote-schema \
  'ssh -i $HOME/.ssh/synckey -C %s rdiff-backup --server' \
  $HOME/daiji remote::daiji-backup
これを実行して、何も聞かれずに問題なく実行できましたら、 後は cron に設定するだけです。
…あ、やっぱり、ちょっとながったらしいので、 シェルスクリプトにしてしまいましょう。
以下の内容のファイルを、エディタかなにかを使って作成してください。

  #!/bin/sh
  rdiff-backup --remote-schema \
  'ssh -i $HOME/.ssh/synckey -C %s rdiff-backup --server' \
  $HOME/daiji remote::daiji-backup

これを、$HOME/bin/backup-daiji.sh という名で保存し、 chmod コマンドを用いて実行可能な状態にしておきます。

  $ chmod +x ~/bin/backup-daiji.sh

そうしましたら、今度こそ cron に設定します。

  $ crontab -e

と実行して、なにやらエディタが実行されました暁には、下記を追加して保存し、 エディタを終了してください。
ちなみに、下記の場合、月〜金曜日の午前7時に実行されます。

  0 7 * * 1-5 $HOME/bin/backup-daiji.sh

cron の設定の詳細につきましては、これまた太古の昔にご紹介してますので、 以下をご覧くださいませ。

Vol.002 - 簡易バックアップ リローデッド
http://www.usupi.org/sysad/002.html


基本的には、以上で目的を達してしまったことになります。

ただ、古いデータもずっと保存されていますので、daiji 以下を更新していきますと、 バックアップがどんどん肥大化していってしまいます。

ですので、一定期間経過したデータは、定期的に消してしまいましょう。
古いデータを消すには、--remove-older-than オプションを使用します。
このオプションと時刻を指定しますと、指定した時刻より古いデータが、 ごっそり消されます。
たとえば、2009年4月10日16時30分より前のデータをきれいさっぱり消すには、 以下のように実行します。

  $ rdiff-backup --remove-older-than 2009-04-10T16:30:00+09:00 \
  remote::daiji-backup
  Deleting increment at time:
  Fri Apr 10 10:40:57 2009

上記の例では、4月10日10時40分57秒のデータが消されたようです。

 

では、これを、先ほどのスクリプトに組み込んでみましょう。
時刻を明示的に指定するわけにはいきませんので、ここでは、 最新も含む10個分のデータを残すようにしてみました。

  #!/bin/sh
  REMOTE_SCHEMA='ssh -i $HOME/.ssh/synckey -C %s rdiff-backup --server'
  RDIFF_SRC="$HOME/daiji"
  RDIFF_DST="remote::daiji-backup"
  RDIFF_THRESHOLD="9B"
  echo "# Backup $RDIFF_SRC to $RDIFF_DST:"
  rdiff-backup --remote-schema "$REMOTE_SCHEMA" $RDIFF_SRC $RDIFF_DST
  if [ $? -eq 0 ]; then
      echo "# Remove old data:"
      rdiff-backup --remote-schema "$REMOTE_SCHEMA" \
          --remove-older-than $RDIFF_THRESHOLD $RDIFF_DST
  fi

これを実行しますと、たとえば以下のような出力が得られます。

  $ ~/bin/backup-daiji.sh
  # Backup /home/usu/daiji to remote::daiji-backup
  # Remove old data:
  Deleting increment at time:
  Sun Apr 12 13:16:10 2009

cron に設定している場合、 上記のようなメッセージがメールで送られてくるようになります。 それがいやなら、/dev/null へリダイレクトするとよいと思います。
(crontab -e で以下のように書き換えてくださいませ。)

  0 7 * * 1-5 $HOME/bin/backup-daiji.sh > /dev/null 2>&1

ところで、rdiff-backup のオプションには、時刻を指定する必要のあるものが、 いくつかありますよね。
オンラインマニュアルにも書いてありますが、rdiff-backup では、 以下のように時刻を表現できます。

  1. now は、現在時刻を表します。
  2. 整数値 は、1970年1月1日からの経過秒を表します。
    ちなみに、現在時刻は、date '+%s' などでわかります。
  3. 2009-04-10T16:30:00+09:00 のように表される文字列は、直接時刻を表します。
  4. 3D1h30m など、数値と s, m, h, D などの文字とともに表される文字列は、 現在時刻からのインターバルを表します。
    (たとえば、3D は 3日、1h30m は 1時間半 です。)
  5. 2009/04/192009-04-19, 04-19-2009 は、年月日を表します。
  6. 数値B は、バックアップされている状態を直接指定します。
    たとえば、最新の状態は 0B, ひとつ前の状態が 1B です。

先ほど、10個分のデータを残すため、スクリプトでは以下のように時刻を指定しました。

  RDIFF_THRESHOLD="9B"

これを、2週間以内のデータを残すようにしたければ、以下のように変更してください。

  RDIFF_THRESHOLD="2W"

もう十分に長くなってしまいましたが、最後にひとつだけ、 確認のためのオプションをご紹介します。

それは、--verify オプションです。
rdiff-backup-data 以下に記録されている SHA1 ハッシュ値を使用して、 バックアップデータの整合性を確認します。

  $ rdiff-backup --verify daiji-backup
  Every file verified successfully.

通常は、問題なく一致するはずですよね。
ですが、バックアップデータがおかしくなっていたりしますと、 ハッシュ値が一致しなくなる…というわけです。

ハッシュ値は rdiff-backup-data/mirror_metadata.時刻.snapshot.gz に記録されています。これを一時的に書き換えてみますと、

  $ rdiff-backup --verify daiji-backup
  Warning: Computed SHA1 digest of test.jpg
     e289505cad03e31eaa37c1efbc92955293a282c8
  doesn't match recorded digest of
     e289505cad03e31eaa37c1efbc92955293a282c7
  Your backup repository may be corrupted!

このように、違うよと言ってくれます。
(お察しの通り、ハッシュ値の最後の1文字だけを書き換えました。)

先ほどのスクリプトの最後で、 rdiff-backup --verify を実行しておくとよいかもしれませんね。


以上、rdiff-backup の使いかたを、もうちょっとご紹介しました。

今回はご紹介しきれませんでしたが、他にも、状態を確認するオプションなど、 いろいろあります。オンラインマニュアルを見つつ、 試行錯誤していただければと思います。

ちなみに、個人的には、バージョン管理ツールとの違いが、 ますますよくわからなくなってきております。
(わからないなりに、rdiff-backup を使い続けてみようと思います…。)

宿題の答え

前回の宿題は、

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

でした。

…誤解を招く文章ですみません。
「-r オプションを使わずに」ではなく、 「rdiff-backup を使わずに」と書くべきでした。上記の文章は、 そのように解釈してくださいませ。

さて、rdiff-backup でバックアップした先には、同じ内容が、 そっくりそのままありますので、まるっとコピーしてしまえばよいですよね。
(以下では、カレントディレクトリに、 rdiff-backup でバックアップした内容が daiji-backup にあり、 daiji に復元しようとしています。)

  $ [ -d daiji ] && rm -rf daiji/* || mkdir daiji
  $ cp -a daiji-backup/* daiji/

ただ、この方法ですと、 管理用のディレクトリである rdiff-backup-data までコピーされてしまいます。
では、tar コマンドの --exclude オプションで、 rdiff-backup-data 以外をコピーしてしまえばよいでしょうか。以下のような感じです。

  $ rm -rf daiji/*
  $ tar cC daiji-backup --exclude rdiff-backup-data . | tar xv \
  -C daiji

ただ、rdiff-backup-data という名前のファイルやディレクトリはみな、 コピーされないという副作用があります。
実用上はほぼ問題ないと思いますが、いちおう頭の片隅に記憶しておいてくださいませ。

リモートの場合は、rsync コマンドでいけそうですね。
(remote というマシンのホームディレクトリの直下に、 rdiff-backup でバックアップした daiji-backup がある場合の例です。)

  $ rm -rf daiji/*
  $ rsync -a remote:daiji-backup/\* daiji/

おっと、rdiff-backup-data を外すには、 同様に --exclude オプションを使用すればよさそうです。

  $ rm -rf daiji/*
  $ rsync -a --exclude rdiff-backup-data remote:daiji-backup/\* \
  daiji/

ちなみに、rsync コマンドは、ローカルでも使えますので、 先ほどの tar コマンドによる復元と同様のことが、rsync コマンドでもできます。

  $ rm -rf daiji/*
  $ rsync -a --exclude rdiff-backup-data daiji-backup/* daiji/

まずは、うっかり消してしまっても問題ないデータを捏造して、 いろいろ試してみてくださいまし。

今回の宿題

今回の宿題は、

  rdiff-backup の、バックアップ対象と管理用データのサイズの関連を
  調べてみましょう。

です。

最新以外のデータは、rdiff-backup-data 以下に保存されると思います。
どんどん更新していきますと、rdiff-backup-data 以下がどの程度増えていくのだろう? という疑問を持ってしまいました。

状況によって異なると思いますが、ファイル数の増減や、 ファイルの長さの増減でどう変化するのかを、簡単に調べてみたいと思います。
…いえ、調べてみてください。

あとがき

1ヶ月は長いなあと思っていましたが、2週間は短いですね。(^ε^;;
気を引き締めて、2週間後に備えたいと思います。

わが息子が中学生になったということもあり、今までどおり、 のほほんとしているのもいかがなものかと思って、 それっぽい本を読んでおります。
(ちなみに、のほほんとしているのは、わたしの方です。)

カリスマ教師の心づくり塾
http://www.amazon.co.jp/exec/obidos/ASIN/4532260094/usupiorg06-22

荒れていた中学を立て直し、陸上部を日本一に導いた、原田先生の教育塾のお話です。

まず「心のコップ」を上向きにして、意味づけと動機づけで「やる気」を引出し、 自主的に行動する力を身に着けさせる方法が、理論的かつ情熱的に書かれています。

読んでいて、のほほんとしていた自分が恥ずかしくなりました。
子どもをどうこうしようなんていうのはおこがましく、まず親である自分が、 理念や情熱を持っていないとダメだ、ということを再認識しました。

紹介されていた方法で、自分がどうなりたいのか、 そのために毎日をどう過ごせばいいのか、これから掘り下げていきたいと思います。

 

さて、次回は黄金週間にさしかかってしまいますが、 ゆるゆるな己の心にカツを入れるためにも、 変わらず2週間後に発行したいと思います。
(ちなみに、ネタはまだ決まっておりません。どうしよう…。)

 

今回も、ここまで読んでいただき、ありがとうございました。
次回は、黄金週間まっただなか! 5月3日(日) 頃に、お会いしましょう!

 

「いますぐ実践! 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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本