ホーム > タグ > バックアップ
バックアップ
rsyncでディスク容量を節約しながら擬似的にフルバックアップをとる
基本的にバックアップはDARで取っていますが、とあるサーバーで、個々のファイルサイズは小さいが、ディレクトリ・ファイル数がかなり多く、全体の容量もかなりあるものをDARで圧縮すると、ファイルサイズが倍以上に増えてしまう・時間が異常に掛かるので、cronでファイルをフェッチするまでにアーカイブが終わらないという問題が。
仕方ないのでrsyncでそのまま転送することにしましたが、さすがに毎回すべてを転送していては容量の無駄。そこで、実際は更新されたファイルだけ転送し、変更のないファイルはハードリンクにすることで、擬似フルバックアップをとることに。
まず初回は普通にrsyncで対象データをすべて転送、2度目以降は以下のコマンドを実行。
# rsync -az –delete –link-dest=../fullbackupdir root@192.168.x.x:/datadir /path/to/incrementalbackupdir
-a ファイル情報を保持
-z データを圧縮して転送
–delete 削除されているファイルを転送先でも削除する
–link-dest 変更のないファイルは指定ディレクトリ内データのハードリンクに置き換える
古いrsyncでは–link-destオプションがなかったので、代わりにcp -alでハードリンクを作成後に同期を行う方法がとられていたようですが、このオプションができたおかげで1コマンドで処理できるようになったとのこと。
注意事項としては、–link-destで指定するフルバックアップのパスは、新規転送先ディレクトリからの相対パスでなければいけないらしい(フルパスがダメかどうか自信なし)。また、/があるとディレクトリ以下のファイルすべてを転送しますが、/なしの場合はディレクトリごと転送するという違いがあるので、指定する際には気をつける必要があります。
転送終了後、新規差分ディレクトリ内の変更のないファイルがあるディレクトリでls -liを実行してiノード数が増えていたら、ちゃんとハードリンクになっています。同じファイルなのにiノードの指しているブロックが異なっていた
ら、更新されたファイルか、そうでなければパス指定が間違っていると思われますので確認を。
※尚、当然ながらディレクトリはハードリンクされません。
- Comments: 0
- Trackbacks: 0
ストレージ容量アップ&価格ダウン加速中
最近仕事ではルーチンや雑務が多いので新ネタがないので、若干サーバーから話は逸れますが。
ITmedia:ついにここまで(涙)――1TバイトHDDがまさかの1万円割れ
ウチのPCは自作で、そこらのメーカー品と較べると基本的に鬼スペックなのですが、HDDをメチャ食うような作業はあまりしないので(せいぜいレコーディングの時とかで数GB~数十GBくらい?)、250GBのRAID1構成+余りの250GB単体、という構成で不便しておりません。まあ同じ回転速度でもプラッタ枚数が少なくて容量大きい≒記録密度が高いほうが高速ではありますが、そこまで劇的に変わるものでもなし。
現時点で気になる点といえば、サーバー用HDDの容量と、Flash SSDの容量くらいですかね…。前者はまあ、バックアップなどの話も書いてきたのでひしひしと感じるところなのですが、たとえばセキュリティ関係の審査とか、顧客のロールバック要求とかで旧いデータが必要になることが時々あるので、ある程度の期間のバックアップデータが必要になってくるんですね。ですが、割と毎日バックアップを保管していくと容量を食う。
ウチではあまりないですが、特に画像や映像系コンテンツを大量に扱われているような所では、元々圧縮されていることが多いのでほとんど圧縮効果がないといいます。それからテキストデータのくせに案外鬱陶しいというか、サーバーの使われ方によっては一番大きなデータである可能性があるのがログファイル。圧縮しやすいのは救いですが、それでも何十GB単位といったオーダーで、しかも凄い勢いで新たなログがたまっていきます。こちらは問題が発生したときの原因をさかのぼって調べたい場合や、事件や不正アクセスなどの際に警察からログの提出を要求されたりした場合などに必要となってきます。
まあ、サーバー屋としてはバックアップストレージの容量は結構頭の痛い問題ではあります。最近は重複ファイルだけでなく、重複ログをチェックし、二重保存されないようにすることで数割単位で容量を節約するソリューションもあるくらいです。
あと、後者のFlash SSDですが…こちらは個人的な趣味というか…w モバイルPCや音楽プレイヤーなどの容量がやはりHDDベースのものと比較するとまだまだ少ないし高価なんですよね。但し駆動部がないので故障がしにくい・音が静かなどといった利点がありますし、電気的にアクセスできるので高速であるなどといった利点があります。60GB~120GBくらいのが安くなってきたら、SSDベースのPCに乗り換えてもいいんだけどなぁ(iPodもHDD式じゃない小型のに乗り換えられるし)。またiPod系にするとは限りませんが、とりあえず現行のTouchが32GBモデルまで販売中なので、時期(容量UP)モデルが出る頃のプレイヤーに期待。
蛇足ですが、ワケあって(というほどでもないが)先日携帯のmicroSDを購入。元のが256MBだったのですが、ネット通販を見たら8GBのmicroSDが4,000円台で売られていらっしゃる。個人的にはmicroSDは無くしそうだし扱いにくいのでminiSDくらいで止めておいてほしかった…という愚痴はさておき、記録密度は凄いことになってますね。
そんなワケでサーバー用ストレージと、個人的にソリッドメモリ系に期待中なのでした。
ついでに思い出したので小ネタを。バックアップ時に重複ファイルを削除したい場合に便利なソフトウェアとしてFreeDUPというものがあります。これは同じファイルがあった場合に片方をハードリンクに置き換えてくれるもので、あまり変更はないけど頻繁にバックアップをとるような場合に使える場合もあるかも。
たとえば自宅サーバーに外付けHDDをマウントしてバックアップしている場合などに、HDD容量を節約するのに役立ってくれます。
- Comments: 0
- Trackbacks: 0
バックアップアーカイブをNASへ転送
tarとDAR、DARのよくあるエラーと対処法でも触れたバックアップの話題ですが、実際にできたアーカイブを外部のストレージなりメディアなりに保存しないと意味がありません。今回はマウントする類の話ではなく、NASやストレージサーバーに転送する話。
よく使われるのがscpやsftpだと思いますので、今回はscpを使います。scpは基本的にSSHベースなので、既にSSHでクライアントから操作している場合は、特に何の設定もなく利用することができるのが利点でしょうか。個人的にはGB単位のデータを転送してみたりしましたが、ローカルネットワークを使うならば特に遅いなどとは感じませんでしたので、余程ファイルサイズが巨大といったことがなければscpを利用するのが良いかと思います。ちなみにscpとはSecure CoPyの略。
んではまずscpをシェルで利用する場合。基本的な使い方をする分にはcpと似たようなもんなのでさほど困ることはないかと思います。
# scp report.tex username@hostname.com:filename
ハイ。scp コピーするファイル コピー先 と、cpと変わりません。これがリモートサーバからローカルへ、という場合は引数の順序が逆になるだけです。ディレクトリをコピーする場合は、scp -r としてやればOK。簡単ですね。
ではスクリプトに埋め込む場合ですが、以前も書いたように、セキュリティの観点からは、シェルスクリプトでexpectを使うのは良い方法とは言えません(ローカルからしか参照できない・しない、とかなら別ですが)。いろいろ方法はあると思いますが(パスワードなし鍵認証にするとか)、自分の場合はPerlモジュールにあるNet::SCPやNet::SCP::Expectを用います。Net::SCPは鍵認証用で対話機能がないので、ユーザー名・パスワードを利用して認証をしている場合の対話処理はNet::SCP::Expectを用います。とりあえずこれらが入っていない場合は
# perl -MCPAN -e shell ←初回起動の場合は設定に入ります。標準的な構成であれば、基本的にEnter(デフォルト)で問題ありません
↓ こうなるので
cpan> install Net::SCP ←install 必要なモジュール名 を。
…とやると、簡単にCPANからモジュールがインストールできます。(※ちなみに先ほどCentOS5.2でやったら、perl -MCPAN -e shellではなくcpanだけでも起動しました…んー?)
サーバーにあわせて必要なモジュールをどっちかまたは両方導入したら、Perlスクリプトで use Net::SCP::Expectなど利用するモジュールを書いときます。んで簡単なスクリプトとしましては
#!/usr/bin/perl
$usr = ‘root’;
$pwd = ‘xxxxxxxx’;use Net::SCP::Expect
my $scpe = Net::SCP::Expect->new(user=>”$usr”,password=>”$pwd”);
$scpe->scp(’192.168.0.2:/dir/filename’,”/dir/filename”);
これがリモートサーバーからローカルサーバーに落とす場合です。詳しい記述法は各モジュールの配布元などをごらんください。
ちなみにファイル単位ではなく、ディレクトリごと落としたい場合はコレだとエラーになるので、上の「my $scpe =…」の行を
my $scpe = Net::SCP::Expect->new(user=>”$usr”,password=>”$pwd”,recursive=>’1′);
とrecursiveオプションを追加して1にします。
- Comments: 0
- Trackbacks: 0
DARのよくあるインストール時エラーと対処法
tarとDARでも紹介した、なかなか高速で多機能なアーカイバのDAR(Disk ARchive)ですが、仕事で大量のサーバー機にインストールしていたら、ふたつほどよくあるconfigureとコンパイルエラーがあったので紹介しておきたいと思います。
先にインストール方法をざっと。DAR公式サイトから最新版がダウンロードできます。んで
# ./configure
して、展開したディレクトリに入ってスーパーユーザーで
# make
# make install-strip
するだけです。これでインストールは完了。darと入力してEnterを押し、英語で「引数が足りません」的なことが表示されたらOKです。
よくあるエラー。まず、RHEL系ではconfigure時に
“g++: /lib/libattr.a: No such file or directory”
というエラーを吐くことがあります(参考)。これは
# ln -s /usr/lib/libattr.a /lib/libattr.a
として、DARが指定するディレクトリにシンボリックリンクをはってやればOKです。
もうひとつはインストール後に気づくことが多いので多少厄介ですが(DARは速いけど、DAR自体のコンパイルは割と掛かるので…)、インストール後にdarを実行したときに、引数リストではなく
dar: error while loading shared libraries: libdar.so.4: cannot open shared object file: No such file or directory.
と表示されることがあります。これもupdatedb→locateとかやってみると、ファイル自体は存在してるので、あるいはln -sで解決するのかも知れませんが、とりあえず
# make distclean
して、以下のオプションをつけてconfigureしなおすと問題なく動くようです。
# ./configure –disable-shared
こちらのエラーは英語の資料漁ってどっか(ソース紛失)で見つけたので、一応エラー集としておいときます。日本語の資料がまだまだ少ないようなので、参考までに。
参考:
◆DARで賢くバックアップ
◆DARでシステムのバックアップ
- Comments: 0
- Trackbacks: 0
tarとDAR
tarはgzipと一緒にtar.gzなんていう名前でよく配布されているので、Linuxを普段使うような人はまず見たことがあるかと思います。簡単なバックアップにも使われたりしていますが、書庫が壊れた場合に中身を取り出せないらしいんですよね、経験したことはまだないですけど。
んなワケでより堅牢なバックアップ方法を探していましたが、そのひとつがBacula、もうひとつがDAR。Baculaはオープンソースのバックアップソリューション、DARはDisk Archiveの略だそうで、tar+gzipより高速かつ差分バックアップもとれるなど、簡単なバックアップならこなせてしまいます。
当初はBaculaを利用しようと思っていたのですが、500台くらいまで管理できるという高性能ソリューションで割と設定項目なども多く、ぺーぺーの自分には動くけど細かい使い方がイマイチ。とりあえず現在tarで行っているバックアップの置き換えということで、DARを導入することにしました。
DARは若干コマンドが長いですが、バックアップはスクリプトに組み込んじゃうのであんまり関係ありません。むしろ圧縮の有無や差分・増分バックアップ、処理速度、元々圧縮されているファイルを圧縮対象から外すなど、詳細な指定が可能となっています。また、長くなりがちなコマンドも/etc/darrcやホームディレクトリの.darrcに記述してしまうことができるので、一度バックアップポリシーを設定してしまえば後はラクです。
とりあえずはPerlで(bash苦手w)バックアップスクリプトを作成。引数で完全・差分を選択できるようにし、cronで実行間隔と引数をそれぞれ指定。まだ一部気になる部分が残っているので実装はできてませんが…。
簡単にインストールできるので、自宅サーバーを運営されている程度であれば、DARを使ってみるのもいいかも知れません。
- Comments: 0
- Trackbacks: 2
Home > Tags > バックアップ
