backup challenge 20040903

Making backupdata challenge by SHIBATA Akira
作成 2004/09/03

はじめに

コンピュータにはさまざまな情報が保存されており、その情報は一次情報だったりさらに複製がないとなると永遠に失われることになる。 こういう事態には複製を作っておいて、滅失に備えることができるようになる。 しかも近年ネットワーク技術と広帯域化の発達にともなって地理的に離れたコンピュータの情報の複製を作ることが容易になった。 うれしいことにテープ装置よりもハードディスクの低廉化も著しくハードディスクにバックアップを取ることも現実的な解となってきたのでランダムアクセス性などにも優れるようになっている。

また、コンピュータはその用途に応じてさまざまな設定がなされており、その設定を失うと再び同じような動作をさせるためには大変な労力が必要であり、場合によっては二度と同じことができない恐れがある。 しかし、その設定を保存しておくことで、故障が生じても別にコンピュータを建て直し、保存してあった設定を投入することで同じ機能を復活させることと迅速な復活が期待できる。 そこで、なるべく新しい設定を物理的に別の場所に複製を作成し、万が一の時にはそれを参照して復活を期することができよう。

今回の場合はバックアップを cron で自動で毎日とっているので最悪は昨日の分までで確認できるだろう。 過去何日かはとってあるようにしているつもり。

用意するもの

  1. データをバックアップしたいコンピュータ(要 ssh root ログイン)
  2. データバックアップして保管するコンピュータ
  3. 相互のデータコネクション

構想

  1. 基本的には物理的に離れたところへデータの複製を作成する
  2. 方法としては rync と scp と expect を使う
  3. 毎日バックアップをとりたいので cron で定時にバックアップ取得プログラムを運転開始

手順(元データ側)

今回も Debian GNU/Linux Woody で構築したのでパッケージインストールはラクをしてる。
  1. 必要なパッケージをインストール
  2. $ sudo apt-get install rsync ssh
    
  3. ssh でリモートから root でログインすることを許可する→ /etc/ssh/sshd_config の下記の項目を書き換える
  4. PermitRootLogin yes
    
  5. root のパスワードを設定しよう(できるだけ長くするのがよいだろう当方は万が一手入力しなくちゃならないことを考えて 32 文字としている)

手順(データコピー先)

  1. 必要なパッケージをインストール
  2. $ sudo apt-get install rsync ssh expect
    
  3. ためしに元データの装置に root でログインできるか確認してみよう。 初めてのときはなんかいろいろ聞かれたりするが二回目からはログインプロンプトだけになるだろう。
  4. $ ssh -l root www.example.com
    
  5. コピースクリプトを書く、下のような感じでコピー部分のスクリプトとする
  6. shibata@dolphin:~$ sudo cat /root/script/cp.www-example-com.expect
    #!/usr/bin/expect
    
    spawn rsync -auz --delete -e ssh pop.example.com:/etc/ /home/admin/backup/www.example.com/etc/
    set timeout 20
    expect "root@pop.example.com's password: "
    sleep 1
    send "**********password***************\n"
    wait
    
    spawn rsync -auz --delete -e ssh pop.example.com:/boot/ /home/admin/backup/www.example.com/boot/
    set timeout 20
    expect "root@pop.example.com's password: "
    sleep 1
    send "**********password***************\n"
    wait
    
    spawn rsync -auz --delete -e ssh pop.example.com:/usr/ /home/admin/backup/www.example.com/usr/
    set timeout 20
    expect "root@pop.example.com's password: "
    sleep 1
    send "**********password***************\n"
    wait
    
    spawn scp -rpqC root@pop.example.com:/home /home/admin/backup/www.example.com/
    expect "root@pop.example.com's password: "
    sleep 1
    send "**********password***************\n"
    wait
    
    close
  7. bash で全体的な統合を図る
  8. hibata@dolphin:~$ sudo cat /root/script/backup.www-example-com.sh
    #!/bin/sh
    COPYSCRIPT=/root/script/cp.www-example-com.expect
    WORKDIR=/home/admin/backup/www.example.com
    TARGETDIR=$WORKDIR/$(/bin/date +%Y%m%d)
    OLDBACKUP=$WORKDIR/$(/bin/ls -1 $WORKDIR | /usr/bin/head -n 1)
    LOGFILE=$TARGETDIR/backuplog
    
    /bin/mkdir -p $TARGETDIR
    /bin/echo starting backup ====== $(/bin/date +%Y%m%d%H%M%S) > $LOGFILE
    
    /bin/echo -- making copies -- >> $LOGFILE
    $COPYSCRIPT
    
    /bin/mv -f $WORKDIR/boot $TARGETDIR/
    /bin/mv -f $WORKDIR/etc $TARGETDIR/
    /bin/mv -f $WORKDIR/usr $TARGETDIR/
    /bin/mv -f $WORKDIR/home $TARGETDIR/
    /bin/echo finishing backup ===== $(/bin/date +%Y%m%d%H%M%S) >> $LOGFILE
    
    /bin/echo -- removing old copies -- >> $LOGFILE
    /bin/rm -rf $OLDBACKUP
    
    /bin/echo The end of backup ==== $(/bin/date +%Y%m%d%H%M%S) >> $LOGFILE
    
  9. ためしに /root/script/backup.www-example-com.sh を実行してキチンと動くか確認しよう。
  10. きちんと動いたら corn に突っ込んで毎日実行しよう。
  11. shibata@dolphin:~$ sudo cat /etc/cron.d/backup
    0 15 * * *      root    if [ -x /bin/sh ] && [ -x /usr/bin/expect ] && [ -x /root/script/backup.all ] ; then /root/script/backup.all 2>&1 ; fi
    
  12. 現在はこんな感じになっている
  13. shibata@dolphin:~$ ls -l /home/admin/backup/www.example.com/
    total 20
    drwxr-xr-x    6 root     root         4096 Sep  6 22:44 20040906
    drwxr-xr-x    6 root     root         4096 Sep  7 22:48 20040907
    drwxr-xr-x    6 root     root         4096 Sep  8 22:55 20040908
    drwxr-xr-x    6 root     root         4096 Sep  9 22:55 20040909
    drwxr-xr-x    6 root     root         4096 Sep 10 22:56 20040910
    shibata@dolphin:~$ ls -l /home/admin/backup/www.example.com/20040910/
    total 40
    -rw-r--r--    1 root     root          160 Sep 11 00:14 backuplog
    drwxr-xr-x    3 root     root         4096 Dec  3  2003 boot
    drwxr-xr-x   49 root     root         4096 Sep 10 16:33 etc
    drwxr-xr-x  1376 root     root        24576 Sep 10 09:42 home
    drwxr-xr-x   15 root     root         4096 Apr 26  2003 usr
    
  14. むろん将来バックアップエリアを増強してマウントした先にバックアップをとることはまったく問題ない。いざというときにはバックアップデータからリカバリしよう。できれば永遠に見ないですみたいものだが…
  15. shibata@dolphin:~$ df
    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hda3              9614148     59484   9066288   1% /
    /dev/hda1                93309      5992     82500   7% /boot
    /dev/hda5              9614116    112820   9012924   2% /usr
    /dev/hda6              9614116    124756   9000988   2% /var
    /dev/hda7             47018596  25701428  18928708  58% /home
    /dev/hdb1             76920416  42844000  30169008  59% /home/admin/backup/www.hanno.jp
    
    

Memorandum about Linux and Network | ほかのジャンルを見てみる | サイトマップ

免責

beacon

当方(SHIBATA Akira)は, 本サイトをご利用の際に起きるかもしれない不利益に対し, 一切責任を負いません.