事象の水平線

横を無理やり伸ばしたので、デザインがおかしいけど、気にしない。完璧に時代に取り残されたHTMLをいまさらいじるのがめんどくさい。個人的ブックマーク代わりなメモ書きブログ。

CentOS6.0マシンはNAS的なホームサーバーとして使うので、全自動でバックアップをしてほしい。

ということで、余っている(といっても、以前のWin2kの2号機のシステムディスクMaxtor“6V250F0”250GB)があるので、それを外付けHDDとして使えるように、HDDケースをPCデポで購入。
ものは、玄人志向のGW3.5AA-SUP/MB
内蔵にしてもよかったんだけど、利便性と使っていないときに電源が切れる機能があるということで、このHDDケースを選択。
2011年10月現在で個人的に調べた結果、SATAのHDDで3TiB対応で電源連動機能のあるUSB外付けHDDケースで最安。
USB2.0しか無いけど、妥協しました。
で、PCデポだと近場のお店の店頭価格があまり安くなくても、Webで買って店頭受け取りが出来るらしい。
店頭受け取りを使うと、Web通販の送料がかからないということで、それを使って\1,800でお買い上げ。しかも、価格コムで最安。

話が脱線するけど、このケースに入れてCrystalDiskMarkでベンチを取ってみたら20MB/s位しかでない。
明らかにUSB2.0がボトルネックに・・・理論値では480Mb/sなのでバイト換算だと60MB/s、少なくとも40MB/s位でるかなぁ~と思っていたのに・・・こんなもんか・・・・まぁ、、USB2.0がそれほど速くないってのは何年も前から言われてるので今更だけど。
でも、マシンのM/BがUSB2.0しかないしまぁいいでしょう。
それと、Windowsマシンにぶら下げて1時間くらい使っていたらS.M.A.R.Tで50度になっていた。びっくり。
アルミシェルだけど密閉なので結構熱くなります。触るといい具合にほっかいろ状態。
また、電源連動でHDDの電気が切れてランプも切れてもワットチェッカーで見たら3W位食ってます。
これって、昨今のWDのGreenとか省電力HDDのアイドルと大して変わらないこと無い?だとしたら電源が切れるから買ったのにちょっと残念な感じ・・・

とまぁ、HDDケースの雑感はどうでもいいとして・・・・


データのバックアップソフトとか色々調べてみると、どうやら、ソフトなど使わずとも『rsync』というのがそこそこ使えそうな感じ。
で、『rsync』関連の参考にしたHPが
『Homeserver on Vine Linux』さんの『rsyncで自動バックアップ
『maruko2 Note』さんの『rsync でディレクトリの同期(バックアップ)
『サーバの実験室 Slackware』さんの『rsync-2.6.3
こんなところ。

HPを見てると、同期するような使い方の説明が多いみたい。
個人的に、昔マカー(今マカーって言わないよね・・昔はMac使いは・・・)でバックアップソフト(レトロスペクト懐かしいなぁ)でデータをテープドライブ(Hi8)にバックアップしていた頃は、テープドライブということもアリ、当然更新前のデータも残る訳で、バックアップを取った時点なら好きな時のデータに後からアクセスできる。
インクリメントバックアップ?ていうの?
で、バックアップといったらそれが当然と思い込んでいるので、こんなスクリプトでテストをしてみました。


#!/bin/sh

declare log=/home/backuptest/BackUp.log
declare src=/home/share/
declare dest=/home/backuptest/share/
declare datestr=`date +"%Y-%m-%d_%H%M%S"`

echo "########## BackUp "$datestr" ##########" >>$log

rsync -abv --stats --exclude=exclude --suffix=.$datestr~ $src $dest >>$log

echo "" >>$log


<< 説明 >>
log はログファイル
src はバックアップ元のディレクトリ
dest はバックアップ先のディレクトリ
datestr はログでバックアップが行われた日時を記録するための変数
 『date』コマンドに『+"%Y-%m-%d_%H%M%S"』とすることで、『2011-10-29_102345』2011年10月29日10時23分45秒というフォーマットにしてバッククォート『`』で囲むことで変数として与えられます。
 『覚書』さんの『シェル 日付を シェル変数に格納』を参考にしました。

rsync はオプションで『-abv』とし、bオプションをつけることで、バックアップ元でファイルの更新があった場合、バックアップ先の古いファイルが--suffix=で指定した日付の入ったファイル名に書き換えられます。
実際には、hoge.txtというファイルがバックアップ元とバップアップ先の両方にあって、バックアップ元が更新された後にバックアップを行った場合、
バックアップ先ではhoge.txt.2011-10-29_102345~という名前の古いファイルとhoge.txtという最新のファイルが出来ることになります。
それが、バックアップのたびに行われるのでファイルが更新されると、その都度1つ古いファイルに日付が付いてファイルが増えていきます。
更に、末尾にチルダ『~』を入れているので、CentOSのデスクトップ上からは『隠しファイル』扱いとなって『表示>隠しファイルを表示する』にチェックを入れなければ見えません。

本当は、バックアップを取った日時でなく、その1つ古いファイルの最終更新日がファイルネームに追加できればベストなのですが、まぁ、面倒なのでこれで良しとします。というか、どうやるかいいアイデアが思いつかない orz

また、バックアップしたくないファイルをexcludeディレクトリに入れておけばバックアップされません。


rsyncのオプションの説明 『rsync の man ページ』より抜粋
-v, --verbose 転送情報を詳しく表示
-q, --quiet 転送情報を表示しない
-c, --checksum 常にチェックサムを行う
-a, --archive アーカイブモード(-rlptgoD オプションと同義)
-r, --recursive ディレクトリで再帰的に実行する
-R, --relative 相対パス名を使う
-b, --backup バックアップを作成する (デフォルトで ~ が付く)
--suffix=SUFFIX バックアップのサフィックスを変更

-u, --update アップデートのみ許可 (上書き禁止)
-l, --links ソフトリンクを維持する
-L, --copy-links ファイルのようにソフトリンクを扱う
--copy-unsafe-links 送信側ツリー外のリンクをコピー
--safe-links 受信側ツリー外のリンクを無視
-H, --hard-links ハードリンクを維持する
-p, --perms パーミッションを維持する
-o, --owner オーナーを維持する (root のみ)
-g, --group グループを維持する
-D, --devices デバイスを維持する (root のみ)
-t, --times タイムスタンプを維持する
-S, --sparse 密度の低いファイルを効率的に扱う
-n, --dry-run 実行時の動作だけを表示
-W, --whole-file rsync アルゴリズムを使わない
-x, --one-file-system 再帰的に実行された時にファイルシステムの境界を横断しない
-B, --block-size=SIZE rsync アルゴリズムのチェックサムブロックサイズの制御(default 700)
-e, --rsh=COMMAND rsh の代替を指定
--rsync-path=PATH リモートのマシーンで rsync のコピーへのパスを指定
-C, --cvs-exclude システム間で転送したくない広範囲のファイルを除外(CVSの方法と同じ)
--delete 送信側にないファイルを削除
--delete-excluded 受信側にある exclud ファイルも削除
--partial 転送途中のファイルを保存します
--force ディレクトリが空でなくても削除
--numeric-ids ユーザとグループの id 番号を転送して、転送後にマッピング
--timeout=TIME IO タイムアウトを設定(秒)
-I, --ignore-times タイムスタンプとファイルサイズのチェックをしない
--size-only タイムスタンプのチェックをしないで、ファイルサイズのチェックだけをする
-T --temp-dir=DIR tmp ファイルのディレクトリを指定
--compare-dest=DIR 受信側のファイルと比較するための追加ディレクトリ
-z, --compress 受信ファイルを圧縮compress file data
--exclude=PATTERN パターン一致するファイルを除外
--exclude-from=FILE ファイルに記述されたパターンと一致するファイルを除外
--include=PATTERN パターン一致するファイルを除外しない
--include-from=FILE ファイルに記述されたパターンと一致するファイルを除外しない
--version rsync のバージョンを表示する
--daemon rsync をデーモンとして走らせる
--config=FILE 別の rsyncd.conf ファイルを指定
--port=PORT 別の rsync ポート番号を指定
--stats rsync アルゴリズムの転送効率を表示
--progress 転送中の情報を表示



さて、これで、このスクリプトをcrontabで週1回くらい実行するように設定すればいいかな。
と思うが、24時間稼動でないシステムを想定しているので、普通にバックアップを逃しそうである。
で、1週間前にバックアップが実行されてるかを判断してバックアップを走らせるスクリプトを書こうと思ったら、cron以外にもanacronというものがあるらしい。
なにやら、これがまさしくcronが実行されなかったときに後から遅延で実行をしてくれるというなんとも素敵な仕組みが元から備わってるようで、調べてみるが、なんだかよくわからない orz
ちなみにそのとき参考にしたHP
『Red Hat Linux 9』さんの『Anacron』RedHat公式らしい
『Cyberam Documents Project』さんの『anacron

で更に調べると、どうやらCentOS6というかRedHat6から仕様が変わったようで、crontab -eで設定したものは後から追いかけてanacronでは実行してくれないみたい。たぶん・・

というか『sa-sa-ki.jpのblog』さんの『Scientific Linux 6で自宅サーバー構築 番外編その1 Scientific Linux 6のcronについて』がとても詳しいので役に立ちました。(詳しくはそっち見た方がいい;;)

で、どうやら、crontab -eではなく/etc/cron.weeklyにスクリプトファイルを入れておくと、週に一度どこかで勝手に実行してくれて、また次に電源の入ってるときに1週間たっていると勝手に実行してくれる。ということになるらしい。
時間の指定とか出来ないけど、まぁ、、、、バックアップだしいいかな・・・
ちなみに、その1週間を判断するのに/var/spool/anacron/cron.weeklyに、実行したときの日付が書き出されてそこからの差分で判断してるらしい。
日毎、月毎もweeklydaily monthlyになるだけで、要は同じこと

ちなみに/etc/anacrontabを見てみると

[root@NAS ~]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly


となっていました。
3時~22時の間で、
dailyのものは /var/spool/anacron/cron.dailyから1日経過していれば 5分(0~)45分の遅延で実行
weeklyのものは /var/spool/anacron/cron.weeklyから7日経過していれば 25分(0~)45分の遅延で実行
monthlyのものは /var/spool/anacron/cron.monthlyから一ヶ月経過していれば 45分(0~)45分の遅延で実行
ということになるらしいです。

実際にweeklyで試したところ起動から74分後にバックアップが実行されたログが残っていました。


ちなみに、参考にしたHPのScientific Linuxとはなんぞ?と思って調べてみたら、フェルミ加速器研究所とCERNが作ったパッケージらしい。す、すげー。
→wikipedia:Scientific Linux



最後に個人的結論メモ

[root@NAS ~]# vi /etc/cron.weekly/backup.sh
#!/bin/sh

declare log=/home/backuptest/BackUp.log
declare src=/home/share/
declare dest=/home/backuptest/share/
declare datestr=`date +"%Y-%m-%d_%H%M%S"`

echo "########## BackUp "$datestr" ##########" >>$log

rsync -abv --stats --exclude=exclude --suffix=.$datestr~ $src $dest >>$log

echo "" >>$log



<<追記>>
その2があります。→CentOS6.0 自動バックアップ その2
スポンサーサイト



PageTop

コメント

 ※
 ※
管理者にだけ表示を許可する
  ※ 必須項目です