[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:29157] Re: バックアップについて



おきのと申します。

バックアップの問題はけっこう悩みますよね。
わたしは色々試行錯誤して今は dump/restore を使ってやってます。

バックアップ専用の IDE-HDD を用意しておき、毎晩定期的に
差分ダンプをとっております。
で、気がむいたらフルバックアップをとって CD-RW に焼いております。


At Wed, 11 Jul 2001 15:13:23 +0900,
Hideki -Henrich- Yamane wrote:

>  ・どのディレクトリのバックアップを取るのが良いのか、
>   またそれはどういう理由なのからなのか?
>   #Debian流、というのがありますか?

dump だとファイルシステムまるごとですので、
悩む必要はありません (^^;

パーティションを切りまくってる人は逆に不便かもしれませんが。


>  ・どんなツールを使うのか、利点と欠点は何か?
>   #rsyncくらいしか考えつかない…(^^;

利点は差分ダンプが簡単にできます。
詳しくは "Linux: dump and restore mini-HOWTO" が JF にありますので、
そちらを参照してみてください。

欠点は、rescue ディスクにデフォルトで入ってないってことでしょうか?
たしか cpio は入ってたと思います。

ちなみに、rsync と言っておられるということは、
ネットワーク経由のバックアップを想定されているんでしょうか?
dump/restore もネットワーク経由で動作させることが可能ですが、
あまりおすすめできません。
# ルートでリモートシェルが実行できるよう設定する必要がある。


適当なんではずかしいのですが、
参考までにわたしが使っているスクリプトをのせておきます。cron で

  00 3 * * *   root    dumper.sh /dev/sda1

などと設定すれば毎日差分ダンプをとってくれます。
フルバックアップするには shutdown して single user mode になってから

  # dumper.sh /dev/sda1 0

とすればOKです。CD-R へのバックアップを念頭に置いているので、
dump されたファイルは 640KB のマルチボリュームとなるようにしてます。



========== dumper.sh ==========
#!/bin/sh

function help () {
    echo
    echo "dumper.sh filesystem [dumplevel]"
    exit 0
}

# args check
if [ $# -eq 0 -o $# -gt 2 ]; then
    help
fi

if ! [ -b $1 ]; then
    echo "$ is not BlockDevice"
    help
fi

if [ $# -eq 2 ]; then
    if [ `expr "$2" : "[0-9]$"` = '0' ] ; then
	echo "dump level must be 0-9"
	help
    fi
    FORCELEVEL='1'
    DUMPLEVEL=$2
fi

# macros
DUMPMOUNT=/mnt/dump
DEVNAME="`basename $1`"
LOGFILE=$DUMPMOUNT/${DEVNAME}.log
COUNTER=$DUMPMOUNT/${DEVNAME}.count
MAXLOGSIZE=100
HANOI=(1 3 2 5 4 7 6 9 8)

# main
## mount
if ! [ -n "`df | grep /mnt/dump`" ]; then
    mount $DUMPMOUNT
fi

if [ -z "$FORCELEVEL" ]; then
    ## check & set counter
    if ! [ -f $COUNTER ]; then
	echo '0' > $COUNTER
    fi

    read IDX < $COUNTER

    if [ `expr "$IDX" : "[0-8]$"` = '0' ] ; then
	echo '0' > $COUNTER
	IDX=0
    fi

    DUMPLEVEL=${HANOI[$IDX]}
fi
OUTPUT=$DUMPMOUNT/${DEVNAME}_${DUMPLEVEL}_

## check logfile size
touch $LOGFILE
if [ `du -k "$LOGFILE" | awk '{print $1}'` -gt $MAXLOGSIZE ]; then
    echo "=== logfile size has reached $MAXLOGSIZE kB..." >> $LOGFILE
    mv $LOGFILE $LOGFILE.bak
fi

## print header
echo "+++ Level <<$DUMPLEVEL>> DUMP --" `date` >> $LOGFILE

## remove old dump file
rm -f ${OUTPUT}* >> $LOGFILE

## dump
dump -$DUMPLEVEL -uM -B 655360 -f $OUTPUT $1 >> $LOGFILE 2>&1
sync; sync; sync;

## increment counter
if [ -z "$FORCELEVEL" ]; then
    IDX=`expr "$IDX" + 1`
    if [ `expr "$IDX" \> 8` != '0' ]; then
	IDX=0
    fi
    echo $IDX > $COUNTER
fi

## reset counter if $DUMPLEVEL = 0
if [ $DUMPLEVEL -eq 0 ]; then
    echo '0' > $COUNTER
fi
##
umount $DUMPMOUNT
exit 0
========== ここまで ==========


--
Hirotake Okino (沖野 裕丈)
Email-to: hokino@xxxxxxxxx
PGP Finger Print: 34 BC A2 B3 77 E8 A1 A3  C6 51 BB C7 9E 3C 8F 64
PGP Public Key:
        http://piezo.kuee.kyoto-u.ac.jp/~hokino/hokino.pubkey.asc