スナップショット機能が備わっていない、ごくありきたりのLinux環境を稼動中にバックアップする簡単な方法です。
一般的には、こんなバックアップに価値はないとされます。しかし、場合によって十分役に立ちます。
バックアップしたいマシン上で以下様のコマンドを実行します。
# BZIP2=--best tar cpjfl - / | ssh server-user@file-server \ "dd of=/archive-dir-path/hogehoge.tar.bz2" とか # BZIP2=--best tar --one-file-system -cpjf - / | ssh server-user@file-server \ "dd of=/archive-dir-path/hogehoge.tar.bz2"
上記はクライアント側で圧縮していますが、下記のようにサーバ側で圧縮しても良いです。
# tar cpfl - / | ssh server-user@file-server \ "bzip2 --best > /archive-dir-path/hogehoge.tar.bz2" とか # tar --one-file-system -cpf - / | ssh server-user@file-server \ "bzip2 --best > /archive-dir-path/hogehoge.tar.bz2"
他にもいくらでも例を挙げることはできるでしょう。
(2007-12-29追記) 最近の事情に合わせて--one-file-systemオプションを用いた例を追加しました。そのうちlオプションの例は削除すると思います。それと言うまでもないことですが、圧縮の形式やオプションはあくまでも一例です。上の例は最も処理時間が必要で、且つ多くの場合において最も圧縮率が高くなる例です。
- 稼働中なので疑似ファイルシステムをバックアップ対象から外す為にl(エル)オプションを付けて対象を単一ファイルシステムに限定しています。GNUのツールにはcpやrsyncのように単一ファイルシステムに限定するxオプションを指定できるものがいくつかあります。("xオプションって便利だよ!"っていうのがこのページの隠れた(?)意図です。但しGNUのtarの場合はxオプションは他の意味で使用されるのでlオプションとなります。)
- 言うまでもないことですが、/以下を複数パーティションで構成している場合は上のコマンド一発では済みません。適宜工夫して下さい。
- 圧縮する必要がなければ下のような手法も良いと思います。(実際に私が良く使う手段)
# tar cpfl - / | ssh server-user@file-server \ "dd of=/archive-dir-path/hogehoge.tar"
この方がバックアップ時間が短くて済みます。必要であれば後で圧縮すれば良いのです。
※:余談ですが、日々の差分だけをバックアップしたい場合はtarよりもrsyncの方が高度なことができます。
但しrsyncの場合、tarのように一発でファイルサーバ上に圧縮ファイルを生成することができません。
稼動中のOS環境を丸ごとバックアップすることは一般的には邪道です。普通はやってはいけないこととされています。
以下の2点が本質的に駄目な原因です。
- 一部のファイルに読み出しに対しても排他ロックがかかっていて、読み出しが出来ないことがある。
- トランザクションの概念のあるデータベースの整合性が壊れてしまう。
しかし、
業務でバックアップするのではなく個人用のLinuxのバックアップであれば、その制限を理解していれば、
実は稼動中にバックアップすることも十分可能だというのが本ページの趣旨です。
1.は、Linuxの場合はないと考えても差し支えないです。
2.は、簡単に言えば、該当するDBがもし動作していれば、止めれば済むことです。
また、ログファイル類の整合性が崩れる場合もあります。気になる人はこの方法を使わないで下さい。
また、runlevelが5の状態でのバックアップは出来るだけ避けるべきです。
サイト内関連ページ:リカバリーDVDの作成法
サイト内関連ページ:Debian Linux の OneCD(ライブDVD)化手順 ←(2007-8-4追加) 稼動中Linuxバックアップの一手法