2009/05/10

個人レベルのデータバックアップ(Linux編)

 パソコンを使いこなすようになって困ることの一つがデータの消失です。一度でもディスククラッシュ等によるデータ消失を経験するとだいたい皆気を付けるんですけどね。でも忘れた頃に次が来るんです。データのバックアップを日常のこととして、プロのサーバ管理者と同じ気分で毎日実施する、個人ユーザの場合これ以外に対策はないと思った方が良いです。で、市販のバックアップソフトを幾つか見てみますと、やたらと機能が多すぎて何が必要なのか解らなかったり、フルバックアップと差分バックアップを別々に取り、復旧も別々にやるとか、もうサーバ管理者の発想で作られたものばかり、何でタカがバックアップのためにあそこまでしなきゃならないんでしょ?????

 私はバックアップソフトにはビタ一文払わず、Linuxに最初から付いてくるコマンドを使ってバックアップしています。しかもその取り柄はお値段が「タダ」というだけではありません。最初に取れるのはフルバックアップ、同じ媒体を使う2回目以降は差分バックアップ、それが自動的に切り替わるほか、媒体内のデータは常にフルバックアップ状態なので万一の復旧時は何も考えずに丸ごと戻すだけ、と実にモノグサ人間御用達なのです。私にぴったり。バックアップ範囲はディスク一本丸ごとでも、指定した範囲だけでも、さらには指定した範囲だけを除外でも、如何様にも調整できます。下にそのやり方をご紹介しますが、先にWindows編をご理解頂いてからの方が解り易いと思います。

注:Linuxは数々のディストリビューションがあります。ここでは最新の「ubuntu」を前提にお話しますが、基本的なところは多分どれも同じです。


<バックアップディスクの作成>
 Linuxの場合Windows形式(NTFS/FAT32など)でフォーマットされたディスクをそのまま使うことはできません(注)。従って多くのLinux使いがそうしているように元々Windowsで使っていたPC本体や外付けハードディスクをLinux用に「いじって」使う場合、データをバックアップするためにはまずLinuxで読み書きできるディスク領域を作る作業から始まります。

 そのためにディスクフォーマットするためのツールを入手しましょう。ubuntuの場合ならSynaptecパッケージ・マネージャーで「gparted:GNOME Partition Editor」をダウンロード・インストールしてください。成功すると「システム管理」メニューに「パーティション・エディタ」という名前で出ます。これによってフォーマット形式「Ext3」ディスクを作ればそれがLinuxで読み書きできる普通のディスクになります。この「gpaeted」はWindowsなら「パーティションマジック」といった市販ソフトに相当するものだと思いますが、こういったものが無償でダウンロードできてしまうというところからもうLinuxは凄いと感じてしまいます。
注:最新のubuntuはExt3だけでなくNTFSのディスクも読み書きできますから、現時点では必ずしもこのExt3形式によるバックアップディスクを作成する必要はなくなっています。ただし、Ext3ディスクを作る技は無駄にならないと思いますので、この部分は削除しないで残しておきます。2009/05/10
<バックアップディスクのアクセス権設定>
  次にアクセス権の設定が必要です。フォーマットしたばかりのディスクは所有者が「root」でそれ以外の誰も書き込みできません。ここから先はCUIで UNIXコマンドを使います。Windowsと違ってGUIで殆ど済んでしまうというわけに行かないのがLinuxらしいところです。「端末」を起動し、
$ sudo mkdir /media/disk-1/myname
でバックアップ先ディスクにフォルダを作ります。
sudoはSuper Userで「do」しますよ、といった意味らしいです。当然Super Userのパスワードを聞いてきます。
ディスクは/mediaの下に/disk-1の名称で生成されています。
その下に/mynameという名前のバックアップ領域を作ろうとしています。
実際にこの名前は何でも構いません。次に
$ sudo chown myname.myname /media/disk-1/myname
でフォルダmynameの所有者とグループをユーザmynameに変更します。これでmynameさんがこのフォルダの持ち主になれました。
これでバックアップ先ディスクの生成と権限付与は完了です。
この場合、ユーザ名もmynameとして表現していますが、フォルダ名称と同じである必要も勿論ありません。

<自動バックアップ用コマンドシェルの作成>
 まず基本として「rsync」というコマンドに次のオプションを付けて使用します。「rsync」は2つのフォルダの中身を同期化(シンクロ)するといった意味らしいです。

オプション 意味
-a 可能な限りファイルの情報を保持してコピーする
-u 更新されたファイルだけをコピーする
-v 詳しいメッセージを表示する
-z ファイルを圧縮する
--delete 送信元に存在しないファイルを削除する

私が実際に使っているシェルの中身(一部改変)は以下のとおりです。
rsync -auvz --delete /home/myname /media/disk-1/
echo -n "Hit return"
read hitkey


 これでシステムディスク上 /home/myname下にある全てのファイル(サブフォルダを含み)が外付けHDである /media/disk-1/の下に同じ名前で保存されます。ここは勿論実際にバックアップを取りたいデータフォルダ名を指定してください。ここでWindows版にはない注意が必要です。--deleteというオプションを使っているからです。これによりバックアップ元になく、バックアップ先にあるファイルを見つけたら消してしまいます。
 Windows版ではバックアップ元で名前や保存場所を変更するたびにバックアップ先には元のファイルを残したまま新たなファイルとして保存されるため、どうしてもバックアップ先が肥大化します。そのため、バックアップファイルは定期的に全削除していますが、この方式ではそれが必要なくなります。しかし、暗黒面もあります。誤ってバックアップ元のデータを消してしまった場合、その後バックアップを走らせるとバックアップ側のデータも削除されるからです。--deleteを使うべきか否か、設計思想の問題になってきますが、一つの解としては日常は--deleteなしで走らせておき、定期的に--delete付きで走らせるという手もあります。

 さて、このシェルに適当な名前、例えば「bkup.sh」といった名前を付けて保存します。実行する方法はそのbkup.shがあるフォルダで
~$ sh bkup.sh
だけです。端末画面上にコピーされるファイル名称がずらずらと流れ、最後にHit returnを表示して止まりますから結果を確認の上Enterキーを押してください。

<ランチャ登録>
 毎回端末上からコマンド起動するのも面倒ですから、このシェルをランチャに登録しましょう。ランチャとはWindowsで言うところのショートカットだと思ってください。
 如何でしょうか。Windows/Linuxでやることも機能もずいぶん違いますよね。私自身このやり方を作り上げていく過程でなんだかLinux&UNIXというものが少し理解できたような気がしてきました。今般は外付けHDをバックアップ先にしましたので、同じやりかたをされる方はサイクル管理ができない点を十分理解してお使いください。そのあたりの説明はWindows編と全く同じですので割愛します。さあさ皆さん、個人用であろうと仕事用であろうと、OSがWindowsであろうとLinuxであろうと、大事なデータをバックアップすべき事は全く同じです。明日の朝、あなたの命綱データがディスクから読み出せるかどうかはお天道さまのみぞご存じです。お天道さまが気紛れを起こす前に、自分のデータは自分でバックアップしようではありませんか。

Home Pageへ