格納されるファイルは、大きく以下の種類になる。
- アーカイブファイル本体(各種ファイルのアーカイブ)
- バックアップ/リストアに用いるスクリプト
- バックアップ/リストアに用いる設定ファイル
- ディスク構成情報やLVM構成情報等の構成ファイル
今回は、以下のように設計した。
- /backup/media
- current
- bin
バックアップ/リストアスクリプト - etc
バックアップ/リストア設定ファイル - config
リストアに用いる構成情報ファイル- tune2fs
ファイルシステムのパラメータ情報(取得はするけど参考情報) - blkid
各ファイルシステムのblkidコマンドの結果(リストア時に使用)
- tune2fs
- archive
バックアップファイル本体 - snapshot
バックアップ対象領域を一時的にマウントするマウントポイント
- bin
- YYYYMMDDhhmmss
過去のバックアップ- bin
- etc
- config
- tune2fs
- blkid
- archive
- snapshot
- YYYYMMDDhhmmss
過去のバックアップ- bin
- etc
- config
- tune2fs
- blkid
- archive
- snapshot
- current
ディレクトリ作成時に、既にcurrentディレクトリが存在している場合は、別途バックアップ処理が稼働中か、前回のバックアップ処理が失敗している可能性がある。
その場合はエラーとして処理を中断している。
また、binディレクトリとetcディレクトリは、バックアップ時に使用するディレクトリをそっくりそのままコピーしてしまうことを想定している。
以上のことを踏まえて、スクリプトを作成しよう。ファイル名は 0020_mkdir だ。
(前回と同様、sudo su - を実行して、rootユーザにスイッチしてから実行しよう。)
# cd # cd backup/bin # vi 0020_mkdir--ファイルの中身はココから--
#!/bin/sh
BINDIR=`/usr/bin/dirname $0`
BINDIR=`/usr/bin/realpath ${BINDIR}`
ETCDIR=`/usr/bin/realpath ${BINDIR}/../etc`
. ${ETCDIR}/config
if [ -e ${BACKUPPOINT}/current ]
then
exit 1
fi
/bin/mkdir ${BACKUPPOINT}/current
/bin/mkdir ${BACKUPPOINT}/current/archive
/bin/mkdir ${BACKUPPOINT}/current/config
/bin/mkdir ${BACKUPPOINT}/current/config/tune2fs
/bin/mkdir ${BACKUPPOINT}/current/config/blkid
/bin/mkdir ${BACKUPPOINT}/current/snapshot
/bin/cp -pr ${BINDIR} ${BACKUPPOINT}/current/
/bin/cp -pr ${ETCDIR} ${BACKUPPOINT}/current/
--ココまで--
ファイル内部で使用している変数は、前回と同じだ。そのため、特に解説はしない。
作成できたら、これまた前回と同様、実行パーミッションを付与しておこう。
# chmod +x 0020_mkdirそれではテストしてみよう。
テストは、前回作成した0010と組み合わせて行う。
# ./0010_mount # ./0020_mkdir # echo $? (0と表示されるはず) # ls /media/backup # ls -R /media/backup/current (作成されたディレクトリが表示される)どうだろう、ちゃんと作成できているのが確認できただろうか?
では、既にcurrentディレクトリが存在する状態では?
# ./0020_mkdir # echo $? (1が表示されるかな?)echo $? の結果が異なる(ゼロではない)ことが確認できただろうか?
一通り確認できたら、currentディレクトリを削除して、/media/backup はアンマウントしておこう。
# rm -rf /media/backup/current # umount /media/backupこれで、ディレクトリ作成スクリプトは完成だ。
ここまでは簡単で、次回から少し難しくなる。頑張って進めよう。
というわけで今回は以上。
2016/03/23追記
スクリプト先頭の、${BINDIR}と${ETCDIR}を生成する部分のコマンドを、cdとpwdの組み合わせではなく、realpathコマンドに置き換えた。
こっちの方がソレっぽくてカッコイイ。(意味不明)
0 件のコメント:
コメントを投稿