Linuxコマンド逆引き大全
コマンド集(機能別) | コマンド集(アルファベット順) | コマンド逆引き大全 | シェル・スクリプト・リファンレス

 フロッピ・ディスクにバックアップする
$ tar cvfM /dev/fd0 ~/

 パックアップ先にフロッピ・ディスクを指定すれば,フロッピ・ディスクにバックアップできる。また,オプションに「M」を付加すると,マルチボリューム対応になる(フロッピ・ディスクがいっぱいになったら,次のディスクに連続的に書き込む)。また,「z」,「Z」,「I」オプションを用いて圧縮しながらバックアップすることも可能。ただし,圧縮する場合はマルチボリュームを併用できない。


 応用:tarでフロッピ・ディスクにバックアップしたデータを復元する
$ tar xvfM /dev/fd0

 「フロッピ・ディスクにバックアップする」でバックアップしたデータを復元する。マルチボリュームの場合は,途中で次のディスクへの入れ替えを求められる。また,圧縮した場合はそれぞれのオプションを付けて展開する必要がある。


 応用:CD-Rにバックアップする

 CD-Rに書き込む際には,「cdrecord」が使われることが多い。もし,インストールされていない場合は「CDRecordのWebサイト」から入手して,導入しておく。

 CD-Rにバックアップするには,まずCD-Rに書き込むデータを一時的に納めるためのディレクトリを適当な場所に作成する。ルート権限を持つ状態で行う場合の手順は以下の通り。


# mkdir /root/cd-backup

 その後,必要なデータをこのディレクトリ内にコピーする。もし,「/home/hoge-user/」以下すべてをバックアップするのであれば,以下のようにコピーする。


# cp -a /home/hoge-user/* /root/cd-backup

 次に,CDのイメージを作成する。


# cd /root
# mkisofs -r -J -o cd-image.iso cd-backup/

 イメージが正常に作成されたら,次にCD-Rに書き込む。それにはまず,CD-Rドライブを調べるため,


# cdrecord -scanbus

と入力する。ここで表示されたCD-Rの行の先頭にある数字3文字を覚えておく。ここでは「1,0,0」であったとする。次に書き込みを行うため,


# cdrecord -v dev=1,0,0 speed=12 -multi -data cd-image.iso

と入力する。さきほど覚えておいた数字は,“dev=”の後ろに記述する。もし,書き込みが正常に行われなかった場合は,書き込み速度を指定する「speed=」を落としてみる(小さな数字を指定する)とよい。また,BURN-Proof対応の CD-Rドライブの場合は,BURN-Proof機能を使うにはオプションとして「driveropts=burnproof」を付加する必要がある。

 書き込みが正常に終了したら,CD-Rをマウントしてみてファイルが正常かどうか確かめる。


# mount /mnt/cdrom
# ls -l /mnt.cdrom/
# umount /mnt/cdrom

 最後に,CD-R作成のための一時ファイルを削除する。


# rm -rf /root/cdrom /root/cd-image.iso


 応用:テープに定期的にバックアップする

 バックアップは定期的に行うのが有効である。人手でバックアップしていたのでは,手間と時間がかかるため,定期実行しづらい。そこで,テープ・メディアに定期的に自動バックアップする簡単な方法を紹介する(詳しくは日経Linux2000年2月号の特集2を参照)。

 テープ・ドライブの接続方法の説明は省略する。

 まず,バックアップをとるためのスクリプト・ファイルをテキスト・エディタで作成する。ここでは,ファイル名を「/root/backup/backup」とする。スクリプトを以下に示した。


#! /bin/sh
DIR=/root/backup
LOG=${DIR}/backup.log
#
cd /home
case $1 in

# Help ########################################
-h | -help )
        echo usage backup \[ -f \| -i \]
        echo "option -f ....Processed Full Backup"
        echo "option -i ....Processed Incremental Backup"
        ;;

# Full Backup under "/home" ###################
-f )
        echo "Full Backup....Start!!" >> ${LOG}
        date >> ${LOG}
        OUTDEV=/dev/st0
        tar cf ${OUTDEV} . >> ${LOG} 2>&1
        touch ${DIR}/DataFlag
        date >> ${LOG}
        echo "Full Backup....End!!" >> ${LOG}
        echo "" >> ${LOG}
        ;;

# Incremental Backup for Newer Files ##########
-i )
        echo "Incremental Backup....Start!!" >> ${LOG}
        date >> ${LOG}
        OUTDEV=/dev/nst0
        find . \( -type f -a -cnewer ${DIR}/DataFlag \) -print > \
        ${DIR}/newer_list.tmp
        echo '#!/bin/sh' > ${DIR}/incre_backup.sh
        echo "tar cf ${OUTDEV} \\" >> ${DIR}/incre_backup.sh
        awk 'BIGIN{}{print "\"" $0 "\"" "\\";}END{print ">> '"${LOG}"' 2>&1"} \
        ${DIR}/newer_list.tmp >> ${DIR}/incre_backup.sh
        chmod +x ${DIR}/incre_backup.sh
        ${DIR}/incre_backup.sh && touch ${DIR}/DataFlag
        date >> ${LOG}
        echo "Incremental Backup....End!!" >> ${LOG}
        echo "" >> ${LOG}
        ;;
esac

 このスクリプトでは,オプションに「-f」を付けることでフルバックアップを,「-i」を付けることで差分バックアップを行う。また,フルバックアップではテープを巻き戻すのに対し,差分バックアップではテープを巻き戻さない。

 バックアップ対象ディレクトリは,/home以下である。もし他の場所をバックアップするのなら,5行目の「cd /home」を変更すればよい。

 定期的なバックアップにはcrontabを用いることになる。ルート権限を得て,


# crontab -e

により,crontab の編集を行う。

 ここでは,「1週間に1回フルバックアップする」,「1日1回フルバックアップする」,「日曜日に1回フルバックアップ,平日は差分バックアップする」の3つの方法の設定を紹介する。いずれも,バックアップの開始時間は午前3時とする。それぞれ,以下のようにcrontabに追加すればよい。


1週間に1回フルバックアップする
0 3 * * 0   /root/backup/backup -f

1日1回フルバックアップする
0 3 * * 1-6 /root/backup/backup -f

日曜日に1回フルバックアップ,平日は差分バックアップする
0 3 * * 0   /root/backup/backup -f
0 3 * * 1-6 /root/backup/backup -i

 これで,指定時間が来るとバックアップが始まる。ただし,「日曜日に1回フルバックアップ,平日は差分バックアップする」の場合は,土曜と日曜のバックアップ後(翌日のバックアップが始まる前まで)に,フルバックアップ用テープと差分バックアップ用テープを入れ替える必要がある。