ファイルのバックアップ

サーバーを立ち上げていると、誰しもが頭を悩ますもの。それがバックアップじゃないかと思います。RAIDも普及してきましたが

DVDからサイト構築まで

カテゴリー

おすすめサイト

RSS

ファイルのバックアップ

2007/03/15 22:51

先日、とうとう取り返しのつかないミスをしてしまいました・・・。
そう、誤った操作のせいで3~4日かけて作成したPHPの掲示板を含む、とあるサイトのファイルを削除してしまったのです。
故意に削除したのではなく、バックアップをとろうとエクスプローラーで別のHDDへファイルをコピーしていたら、「すでに○○というフォルダは存在します。」とか「○○というフォルダを削除できません。フォルダの中身が空でありません」というようなおかしな?エラーが出るのです。
別にファイルやフォルダを削除したつもりはないし、むしろバックアップをとっているので、出てはいけないエラーでもあります。

もう少しこのときの状況を説明すると、このときはサーバーマシン上から操作したのではなく、別のWindowsマシン上から操作しました。
私の場合、サーバーマシン上で、SAMBAを立ち上げているので、エクスプローラーを使ってあたかもWindowsマシン上のファイルとしてサーバー上のファイルを操作することが出来ます。
このときも、Windowsのフォルダをバックアップするかのように、Webで公開しているフォルダ全部を、別のHDDへマウスを使ってコピーしました。
大量にファイルがあるため、時間がかかるだろうと思い、そのまま放置。
しばらくすると、Windowsマシンからエラー音が。
何だろうと思ってのぞいてみると、上のようなエラーが表示されていました。

おかしな事もあるものだな。と、気にせず、もう一度実行してみました。
今度は別のフォルダをコピーしようとしたときに、同じようにエラーが表示されます。
このままではにっちもさっちもいかないので、結局はサーバーにSSHで接続し、「cpコマンド」を使用してコピーしました。

最初から「cpコマンド」を使っていればよかったのですが、普段コマンドを駆使しているもののあまり使わないようなコマンドは、どうも使うのにおっくうになってしまう。

ようやくコピーが終わり、先日完成したサイトをブラウザで表示させてみると、404エラーを返す。
ちょうどWindowsを再インストールしたばかりだったので、このときはWindowsの問題かと思ってたのですが・・・。
私の顔が青ざめるのにもそれほど時間がかかりませんでした。

そう、サイト内のファイルが存在しないのです。
で、はっと気がつきました。そういえば、「○○のフォルダ」は、確かこのサイトの公開フォルダだった・・・。

バックアップの必要性

バックアップの必要性は、誰しもがわかっちゃいるものの、ほとんどの人が実行していないというのが本音じゃないでしょうか。
そういう意味では、Windowsの「システムの復元」は、非常に画期的なシステムだなぁ。と。
ま、システムの復元では削除してしまったファイルは元に戻せませんが、たいていの深刻なエラーからは復帰できます。

私も今回実感しました。
しかも私の場合は、バックアップを実行したらこんな結果になってしまったわけで・・・。
しばらくは立ち直れませんでした。
ただし、
1.まだ公開してほとんど日にちがたっていないサイトだったので、ページ自体が少なかったこと。
2.ページのキャッシュがgoogleにキャッシュされていたこと。(最新ページは保存されてませんでしたが・・)
事が救いといえば救いだったかもしれません。
が、3~4日かけて作成した掲示板は、全くバックアップをとっておかなかったので、ものの見事に幻と化しましたが。

自宅サーバーを運営してしまうと、レンタルサーバーのようにFTPを使ってアップロードしなければならないようなシステムには戻れません。
まるで自分のWindowsに保存する感覚で、サーバーに保存できます。
そもそもアップロードという概念自体がありません。
今回は、このことが仇となりました。
アップロードするような手続きを経ていれば、ローカル側とサーバー側で同じファイルが存在します。

まぁ、今更何を言っても無駄ですね。
いちおうはまだ頭の中に掲示板プログラムの仕様がかすかに残っているので、それを頼りにまた作り直すしかなさそうです。

バックアップ

さて、肝心のバックアップですが、最近はHDDの大容量化とマザーボードのRAID対応化により、RAIDシステムがかなり浸透した気配があります。
が、まだまだマニアックな人たちの一部で組まれているにすぎないでしょう。
実際に私の周りで、RAIDを組んでいる人なんていませんし。

なぜ普及しないのかというと、やはり値段の問題もあると思います。
大容量化したとはいえ、まだまだHDDは5,000~15,000円ほどします。
また、小容量のものを二つ買うよりは、大容量のHDDを1つ買った方がオトクのような気もしますし。
さらに、先ほどのバックアップの例ではありませんが、誰しもバックアップの必要性はわかってはいるものの、まさか自分が・・・と思いこんでしまっているためでしょう。

そして次の理由として、RAIDシステムを組むには技術的にまだ難しいという面があるんじゃないでしょうか。
私もRAIDを組んだことがないので、実際どうやってやるのか。また、Vine Linuxでもできるのか。など、わからない面が多くあります。

RAIDのメリット

RAIDのメリットといえば、なんと言っても信頼性の高さでしょうか。
他のバックアップシステムは、
1.バックアップをとる作業が必要
2.復元させる作業が必要
という2段階のステップが必ずあります。
ところがRAIDの場合は、リアルタイムに2つ以上のHDDに記録するため、こうした作業を全く意識する必要はありません。
そういった意味での信頼性の高さは、このRAIDに勝るものはありません。

ところが、実際にどちらかのHDDがいかれてしまった場合、本当にきちんとそのまま運営し続けてくれるかどうかと言うのは、神のみぞ知るといったところかもしれません。

そういう面からすると、RAIDで組んでいたとしても、バックアップという作業は必要なんじゃないかな。と。

cpコマンド

そこで私がおすすめするLinuxにおける、バックアップがこの「cpコマンド」によるバックアップです。
まず、RAIDでもそうですが、なるべくトラブルがあったときに損害が大きくならないような構成は必要だと思います。
私の場合は、公開しているWebページが非常に膨大なのと、PHPを使って動的にデータを更新している事が非常に多いので、システムがインストールされているHDDとWeb公開ファイルが格納されているHDDを完全に切り分けてしまっています。

おそらく、24時間立ち上げているとはいえ、システムが詰まっているHDDはそれほどファイルを読み込んだりしないであろうため、寿命も長いでしょう。
逆に、頻繁にファイルにアクセスしたり、ファイルを書き換えたりしているHDDは、寿命が短いだろうと。

また、プログラムを書けるレベルの方ならわかると思うのですが、ファイルにアクセスしたりする処理というのは非常に時間がかかります。
なので、なるべくならシステムとWebコンテンツは別々のHDDに納めておいた方がいいんじゃないだろうかと。

で、肝心な「cpコマンド」ですが・・・。
この「cpコマンド」色々なオプションをつけることが出来、「-u」オプションをつけると、コピー先がコピーもとと同じタイムスタンプかコピー先の方が新しい場合、そのファイルに関してはコピーが行われません。
ただ単にコピーが行われないだけではなく、このオプションをつけることによって1度バックアップしてしまえば、あとは高速に終わります。

今回、10万ページほどのファイルが詰まったファイルで実験してみました。
以下は、「 /home/httpd/html 」以下のファイルやディレクトリを「 /home/backup 」以下にファイル属性(ファイルの更新日やパーミッション、所有者情報)はそのままにコピーします。
実行すると「 /home/backup/html 」というディレクトリが作成作成されその下にファイルがコピーされます。

# cp -au /home/httpd/html /home/backup
#

ファイル数にもよりますが、10万ページ程度あるとさすがに初回のバックアップに5~10分ほどかかります。
で、次に、全く同じコマンド

# cp -au /home/httpd/html /home/backup

を実行します。
もし、全くファイルの更新がなければ、コンマウン秒で処理が終わるはずです。
つまり、初回のバックアップは非常に時間がかかりますが、更新されていないファイルが少なければ少ないほど、2回目以降はあっという間に処理が終わってしまうのです。

これなら1日に1回、いや、1時間に1回でも十分サーバー運営に負担のないバックアップが出来ると思います。
cronあたりで登録しておけば、RAIDに匹敵するシステムが簡単に構築できるかもしれません。

上書きするか確認してこないようにする

ところが実際にこの「cpコマンド」を実行してみると、更新ファイルがあるといちいち「○○というファイルを上書きしてもよろしいですか。」というようなことを訪ねてくると思います。
「cpコマンド」の「-f」オプションは、強制的に上書きさせるコマンドですが、このオプションをつけても毎回尋ねてきます。

Linuxは、コマンドを独自なものに変更することが出来ます。
詳しくは「オリジナルコマンドの作成 .bashrc」を参考にしてもらうとして、じつはこの「cpコマンド」も変更が加えられています。
この「.bashrc」ファイルは、各ユーザーのディレクトリに納められています。
たとえば、「root」であれば「 /root/.bashrc 」になります。