Home > Latest topics

Latest topics > バックアップの自動化の続き

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

バックアップの自動化の続き - Nov 19, 2008

LVMを使って460GBほどの領域を確保して/backupにマウントした所までやったので、その続き。

バックアップ対象は色々あるんだけど、大まかに言って3種類ある。

  • ファイル(ディレクトリ)丸ごと
  • データベースのダンプファイル
  • cronの設定

これらのバックアップ対象を、日付の名前を付けたディレクトリの中に(圧縮して)コピーすると同時に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日後のタイミングで古いバックアップと一緒にバックアップ用スクリプト自体まで消えてしまってました(ぉぃ)。アホス。これは置き場所を変更して解決しました。

分類:システム再構築, , 時刻:15:07 | Comments/Trackbacks (6) | Edit

Comments/Trackbacks

標準入力を圧縮

>ダンプを吐く端から圧縮するというやり方が分からなかった
svnadmin dump /var/svn/repos/ | bzip2 > $workdir/dump.bz2
これで如何でしょう。
因みに、tar自体はアーカイバであって圧縮自体は行わないのでこの場合は特に必要ないかなと思います。

それと、tarの-fオプションの引数に作成ファイルを指定する仕様だと思っているのですが
tar cjf hoge.tar.bz2 ... でないとエラーになりませんか?

Commented by teramako at 2008/11/19 (Wed) 15:36:29

ご指摘ありがとうございます

ダンプを直接圧縮する操作と、tarいらんのじゃね?については会社の人にも同じ指摘を受けましたorz
という事で本文を修正。

tarについては、cfjの順でオプションを書いていても特に問題なく動作していましたが、こちらも念のためfを最後にするようにしておきました。

Commented by Piro at 2008/11/19 (Wed) 16:16:42

Ubuntsu 使いとしての素朴な疑問

 piro さん、なんだかよくわからない指示を受けてますね。私も backup は頻繁に取っていますが、以下の piro さんへの指示が理解できません。

・LVM を使わなければならない ( バックアップ容量の増大を見込んでのこと? )
・sbackup を使ったらだめなの?

Commented by avidya at 2008/11/19 (Wed) 17:17:36

情報ありがとうございます

> sbackup を使ったらだめなの?

コマンドライン以外でやると社長がブチギレてしまうので……(ぉ
たまたま今作業してるマシンはデスクトップ環境が入ってたため自分はSSH経由でnautilusとかgeditとか使いまくってしまいましたが、デスクトップ環境が使えないマシンも弊社にはありまくるので、本当ならvim使えよと思われてる気がします。

てかsbackup初めて知りました。こんな便利なツールがあったとは……!
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0004
個人でサーバ立てる事がもしあったら迷わずこれ使う事にしますorz

Commented by Piro at 2008/11/19 (Wed) 17:34:50

[bash]Piroさんのバックアップ作業に反応して、自作バックアップツールを紹介する

Piroさんがバックアップの自動化に挑戦しているようです。僕も自分なりにバックアップを自動化したので、ここでまとめて紹介してみます。 darでバックアップをとるシェルスクリプト DARというバックアップコマンドで、homeディレクトリ以下を差分バックアップするシェルスク

Trackback from ess sup at 2008/11/25 (Tue) 02:05:37

sbackupd が Sbackup の正体だったようです。

 気になっていたので調べました。環境は 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
------------------------------------------------
 こんな感じです。

Commented by avidya at 2008/11/28 (Fri) 19:43:30

TrackBack ping me at


の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2008-11-19_backup.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2020年11月30日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき