2009年6月13日土曜日

Linuxにおけるバックアップ用HDD増設~バックアップ実行まで

久しぶりにLinuxネタです。データバックアップは以前となりのPCに半分手動でコピーしていたのですが流石に面倒になってしまったこと、それに容量的な問題があったのでいっそのこと構成を変えてしまえという大胆な発想に。

1,増設

当然ですがまずは箱を開けてから、次に内蔵のHDDを増設です。ここは面倒なので省略します。

2,パーティションテーブルの作成

一言で言えばfdiskを実行します。一応dmesgでデバイス名を確認して[仮に増設したHDDの名前をsdbとします]から実行しましょう。最近のLinuxではHDDの名前はsda, sdb, sdc, ...となるので取り付けた順番から判断できます(今までHDDが一つしかなくて増設したならば新しいハードディスクは"sdb"です)が、万が一のことを考えるとちゃんと確認してからの方がいいです。失敗したら取り返しの付かないことになりかねません。

ターミナルで

su -

を実行してrootユーザになってから

fdisk /dev/sdb

を実行するか、または特権があるならいきなり

sudo fdisk /dev/sdb

でもいいです。個人的にはsu -のほうが好み。

fdiskを実行するとへんてこりんなメッセージ(シリンダ数がどうのこうのという句)が出ますが、適当にやり過ごします。

次にコマンド

p

で既存の領域タイプのリストの表示を行います。まさか新品なので既存の領域はあるはずもありませんが、念のためです。今までのハードディスクを指定していたのであればここで間違いに気づけます。

たしかに領域が存在せず、新しいHDDであるのならば続いて領域の作成を行います。

n

でパーティションの作成ですが、ここで基本領域か拡張か聞かれます。第一のパーティションは基本でいいはずなので

p

続いてさらに領域番号(1-4)の指定をします。第一のパーティションなので当然ですが

1

を選びます。すると領域の最初のシリンダから最終のシリンダを選ぶことになります。私は全領域を一つとして扱うことにするので共に標準値(default値)を選びます(というか空白のままEnterで大丈夫)

最後に

w



領域テーブルは交換されました!

というメッセージが確認されたら領域の確保は問題なし。

3,フォーマット

これもまたroot権限が必要なので先述のどちらの方法でも構いません。

su -

mkfs.ext3 /dev/sdb1



sudo mkfs.ext3 /dev/sdb1

とすればいいのです。

*重要* 先日まで"/dev/sdb1"とするべきところを"/dev/sdb"としていました。動作はしますが好ましくないので避けるべきでしょう。

4,マウント

su -

mount /dev/sdb1 /(directory_path)

または

sudo mount /dev/sdb1 /(directory_path)

によって"/dev/sdb1"というデバイス(新しいハードディスク)が"/(directory_path)"にマウントされます。 directory_pathは各自好きなディレクトリの位置を指定してください(指定する前にmkdirでディレクトリを作ってください)。

毎回マウントするためには"/etc/fstab"に記述されているデバイスとマウント先のマッピングを書き換えてやればいいのです。

*重要* 先日まで"/dev/sdb1"とするべきところを"/dev/sdb"としていました。動作はしますが好ましくないので避けるべきでしょう。

5,バックアップ(rsync)

超簡単。バックアップ元を"/data1"とし、バックアップ先を"/data2"とします。この時に要求されるコマンドは次の通り。

rsync -a /data1/ /data2/

完全同期の場合はdeleteオプションを付加して

rsync -a --delete /data1/ /data2/

とすればいいのです。ということで復元する際は

rsync -a /data2/ /data1/

ですから、もう簡単。ちなみにこの"-a"というオプションはファイルへのパーミッションなど諸々をそのままにコピー(バックアップ)するオプション。他にもオプションはありますが、必要に応じて使えばいいと思います。

以上ですので兎に角、非常に簡単です。これをスクリプトにまとめてしまうのも手。そうすれば毎日無人バックアップなんて便利な使い方もできます。

スクリプトの流れは「マウント→同期(rsync)→アンマウント」を中心に、日付で動作するように設定すればいいはずです(具体的にはroot ユーザのcrontabにコマンドかスクリプトを毎日動作するよう指定)。実行ログを出力させるようにでもしておけば異常時に対応が容易になります。

0 件のコメント: