宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
LVMを使って460GBほどの領域を確保して/backupにマウントした所までやったので、その続き。
バックアップ対象は色々あるんだけど、大まかに言って3種類ある。
これらのバックアップ対象を、日付の名前を付けたディレクトリの中に(圧縮して)コピーすると同時に1ヶ月以上前のバックアップは自動で削除する(=30世代のバックアップを取る)、というシェルスクリプトを1日1回自動で走らせる、というのが最終目標です。Googleであちこち検索して回って、コマンドの使用例をコピペしまくった。
作業用ディレクトリとその日のバックアップディレクトリの作成はこんな風に書いた。
#!/bin/sh
destparentdir=/backup
destdir=${destparentdir}/`date +%Y-%m-%d`
mkdir $destdir
ファイル(ディレクトリ)のバックアップはtarコマンドを使う。「j」オプションでbzip2形式を指定して圧縮してみる。
tar cjf $destdir/svn/hooks.tar.bz2 /var/svn/repos/hooks
データベースのダンプは、Subversionならこんな感じになった。
ダンプを吐く端から圧縮するというやり方が分からなかったので、一度作業ファイルを出力してから圧縮してみた。svnadmin dump /var/svn/repos/ > $workdir/dump
tar cfj $destdir/svn/dump.tar.bz2 $workdir/dump
rm $workdir/dump
svnadmin dump /var/svn/repos/ | bzip2 > $destdir/svn/dump.bz2
bzip2をパイプで繋げて、ダンプが吐かれるそばから圧縮。MySQLのデータベースの場合はsvnadminではなくmysqldumpコマンドを使う。
cronの設定の出力は、こう。
crontab -u tdiary -l > $destdir/crontab-tdiary
会社サイトのブログ部分の自動出力はtdiaryという名前のユーザの自動処理になっているので、こうなる。
最後、30日以上前のバックアップを消す処理はこう書いた。
BACKUP_DAYS=30
...(略)...
find ${destparentdir}/ -ctime +$BACKUP_DAYS -type d -maxdepth 1 -print0 | xargs -0 rm -r -f
...(略)...
これで、日付が30日より前のバックアップディレクトリは自動削除されるようだ。(※この処理は新しいバックアップを作る処理よりも前に書くのが望ましい。そうでないと、ディスクがいっぱいになってしまう場合があり得るから。まぁ、それも根本的な対策にはなってないんだけど……)
-maxdepth 1
を付けないと、下層のファイルから削除されるせいで上位ディレクトリの更新日が新しくなってしまい、削除されるべき古いバックアップが消えなくなってしまう。これに気付くのにだいぶかかってしまった。あと、ここでは-print0
でNULL文字区切りで検索結果をパイプに出力して、xargs -0 rm -r -f
で受け取って一度にファイルを削除するようにしてある。
このファイル(今の置き場所は /backup/backup.sh )のシンボリックリンクを/etc/cron.daily/以下に作成(sudo ln -s /backup/backup.sh /etc/cron.daily/baskup)した。これで、root権限でこのスクリプトが1日1回自動的に実行されるはずなんだけど……とりあえず明日どうなってるかまた見てみよう。
追記。どうやらタスク自体は実行されてるようなんだけど、実行されてる時刻が設定と違うような…… /etc/crontab に書かれた /etc/cron.daily/ 以下のタスクの実行時刻は22時なのに実際には翌日7時から動いてるみたい。9時間差ってことはUTCとJSTのずれっぽいんだけど、どこをどうすれば直るのか分からない。まあ今の所特に支障があるわけでもないようだし別にいいか……(←ひどい)
2009年1月5日追記。正月明けて見てみたら古いバックアップが自動削除されてなかった……しょうもないミスでした。/backup/ 以下を検索しないといけないのに、/backup/最新のバックアップディレクトリ/ の中を検索してた。そりゃ古いファイルが見つかるわけがないです……
2009年3月19日追記。スクリプトを/backup以下に置いてcronにはシンボリックリンクを……という風にしてたせいで、スクリプトの編集から30日後のタイミングで古いバックアップと一緒にバックアップ用スクリプト自体まで消えてしまってました(ぉぃ)。アホス。これは置き場所を変更して解決しました。
>ダンプを吐く端から圧縮するというやり方が分からなかった
svnadmin dump /var/svn/repos/ | bzip2 > $workdir/dump.bz2
これで如何でしょう。
因みに、tar自体はアーカイバであって圧縮自体は行わないのでこの場合は特に必要ないかなと思います。
それと、tarの-fオプションの引数に作成ファイルを指定する仕様だと思っているのですが
tar cjf hoge.tar.bz2 ... でないとエラーになりませんか?
ダンプを直接圧縮する操作と、tarいらんのじゃね?については会社の人にも同じ指摘を受けましたorz
という事で本文を修正。
tarについては、cfjの順でオプションを書いていても特に問題なく動作していましたが、こちらも念のためfを最後にするようにしておきました。
piro さん、なんだかよくわからない指示を受けてますね。私も backup は頻繁に取っていますが、以下の piro さんへの指示が理解できません。
・LVM を使わなければならない ( バックアップ容量の増大を見込んでのこと? )
・sbackup を使ったらだめなの?
> sbackup を使ったらだめなの?
コマンドライン以外でやると社長がブチギレてしまうので……(ぉ
たまたま今作業してるマシンはデスクトップ環境が入ってたため自分はSSH経由でnautilusとかgeditとか使いまくってしまいましたが、デスクトップ環境が使えないマシンも弊社にはありまくるので、本当ならvim使えよと思われてる気がします。
てかsbackup初めて知りました。こんな便利なツールがあったとは……!
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0004
個人でサーバ立てる事がもしあったら迷わずこれ使う事にしますorz
Piroさんがバックアップの自動化に挑戦しているようです。僕も自分なりにバックアップを自動化したので、ここでまとめて紹介してみます。 darでバックアップをとるシェルスクリプト DARというバックアップコマンドで、homeディレクトリ以下を差分バックアップするシェルスク
気になっていたので調べました。環境は Ubutnu 8.10 です。
Sbackup そのものは simple-backup-config というPythonスクリプトがその正体でした。
仕組みとしては以下の通りです。
1.simple-backup-config で /etc/sbackup.conf というファイルを作成する。
2.sbackupd --config=/etc/sbackup.conf を起動し、simple-backup-config を終了
つまり sbackup.conf の記述ルールさえ解かれば sbackupd をインストールすることで CUI 上で、GUI 上の Sbackup とまったく同じことが可能ということです。
ちなみに私の sbackup.conf の内容は以下のものでした ( user 名等は臥せています )。
------------------------------------------------
[exclude]
regex = \.tmp,/home/[^/]+?/\.thumbnails/,/home/[^/]+?/\.Trash,/home/[^/]+?/\..+/[cC]ache,\.iso
maxsize = -1
[places]
prefix = /usr
[dirconfig]
/proc/ = 0
/usr/sbin/freemind = 1 ←私が作成したシンボリックリンク
/sys/ = 0
/usr/sbin/firefox = 1 ←私が作成したシンボリックリンク
/opt/ = 1 ←smple-backup-config で指定したディレクトリ
/var/cache/ = 0
/tmp/ = 0
/etc/freemind/ = 1 ←smple-backup-config で指定したディレクトリ
/dev/ = 0
/var/tmp/ = 0
/home/username/ = 1 ←smple-backup-config では /home を指定
/usr/sbin/sqlitebrowser = 1 ←smple-backup-config で指定したディレクトリ
[general]
stop_if_no_target = 0
target = /media/disk ←←smple-backup-config で指定したUSB HDD
format = 1
purge = 0
maxincrement = 21
lockfile = /var/lock/sbackup.lock
------------------------------------------------
こんな感じです。
の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2008-11-19_backup.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。
writeback message: Ready to post a comment.