趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • FreeNASのデータバックアップ

    投稿日 2012年 12月 25日 1つのコメント

    普段、自宅のデータはFreeNAS上に置いてあります。FreeNASのデータ領域は2TBのHDD(しかも敢えて異なるメーカーのものを選定)を2本によるミラーリングにしてあるので、まず心配はいらないと思います。それでも念のためと誤操作による消失対策として外付けのHDDにも月に1回くらいバックアップをとっています。
    これまでは古い2TBのHDDを外付けHDDケースに入れて、Windows7マシンでNTFSフォーマットし、盗難等の対策としてTruecryptによる暗号化ボリュームを設定していました。しかし、このHDDが何やら挙動が怪しくなってきたので、新規にWesternDigitalの外付け2TBを購入してバックアップ用にすることにしました。

    早速、Windows7マシンに接続して、TrueCryptで暗号化ボリュームを作成・・・・していたのですが、なんせ2TBなので、20時間くらいかかりそう・・・・ということで電源を入れたまま放置していました。ところが、あと数時間というところで、Windowsが不意にリブートしたようです。で、調べてみると、WindowsUpdateによる自動再起動とのこと。

    もう一回暗号化ボリュームを最初から作る気力はないので、他の方法を探ることに。
    今回は、『Windowsのバカヤロー』から始まったことなので、Linuxで解決すべく考えてみることにしました。

    1.暗号化ボリュームの作成

    HDDをLinuxMintマシンにつないで、ディスクユーティリティでパーティション開放/作成後、ext4でフォーマットしてみると、「デバイス自体を暗号化」というチェック項目があり、暗号化が可能なことが分かりましたので、それでフォーマットしてみるとTrueCryptのように時間がかかることもなく、すぐにフォーマットが完了しました。

    この時、一体どのような暗号化がされているのか調べておかないと、トラブったときに困りますので、ゴソゴソと調べてみました。

    /dev/mapper $ ls -la
    合計 0
    drwxr-xr-x  2 root root      80 12月 24 12:20 .
    drwxr-xr-x 16 root root    4520 12月 24 12:20 ..
    crw-------  1 root root 10, 236 12月 23 16:32 control
    lrwxrwxrwx  1 root root       7 12月 24 12:20 udisks-luks-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-uid1000 -> ../dm-0
    /dev/mapper $ sudo cryptsetup status udisks-luks-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-uid1000 
    [sudo] password for xxx: 
    /dev/mapper/udisks-luks-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-uid1000 is active and is in use.
      type:    LUKS1
      cipher:  aes-cbc-essiv:sha256
      keysize: 256 bits
      device:  /dev/sdb1
      offset:  4096 sectors
      size:    3907019906 sectors
      mode:    read/write
    /dev/mapper $

    ということで、cryptsetupというツールで暗号化されていて、暗号化方式は AES の CBC の何か(^^;、鍵サイズは256bitであることがわかりました。

    2.データバックアップの方法

    どんなものか概ね見えたところで、本題に戻ります。
    フォーマットが終わると、 /media/(ボリューム名)/ にマウントされて使用可能になりましたので、ここからどうやってバックアップをとるか考えましたが、簡単そうなのはやっと使い慣れてきた rsync だろう、ということで、rsync でバックアップをとることにしました。必要なディレクトリの分だけ、rsyncのスクリプトを並べてシェルスクリプト化しておけば簡単そうです。

    以下で、「192.168.x.x」はFreeNASのIPアドレス、「DATA」はFreeNASのボリューム名、「dir?」はディレクトリ、「WD-USB2TB」は外付けUSBHDDのボリューム名です。

    #/bin/sh
    # FreeNASから外付けUSB2TBにコピーする
    rsync -av --delete username@192.168.x.x:/mnt/DATA/dir1 /media/WD-USB2TB/FreeNAS/
    rsync -av --delete username@192.168.x.x:/mnt/DATA/dir2 /media/WD-USB2TB/FreeNAS/
    rsync -av --delete username@192.168.x.x:/mnt/DATA/dir3 /media/WD-USB2TB/FreeNAS/
    rsync -av --delete /home/username/Dropbox /media/WD-USB2TB/home/username/

    としてスクリプトを作ってみたのですが、1行ごとにパスワードを聞かれるので面倒くさくてたまりません。

    3.sshログインの自動化

    パスワードを聞いているのは、FreeNASにアクセスする際にsshでログインするためです。ですので、これは認証鍵ペアを準備してやればパスワードを聞いてこなくなるはずです。
    ですので、SSHの認証鍵ペアをパスフレーズ無しで生成します。

    ~ $ ssh-keygen -t dsa
    Generating public/private dsa key pair.
    Enter file in which to save the key (/home/xxx/.ssh/id_dsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/xxx/.ssh/id_dsa.
    Your public key has been saved in /home/xxx/.ssh/id_dsa.pub.
    The key fingerprint is:
    9b:31:cc:5b:28:81:b7:41:c2:51:af:74:0b:bb:11:39 xxx@G530-1
    The key's randomart image is:
    +--[ DSA 1024]----+
    |   .ooo          |
    |    .+ o         |
    |    . E o        |
    |     o & o       |
    |      * S .      |
    |       + B       |
    |      . +        |
    |                 |
    |                 |
    +-----------------+
    ~ $

    次にFreeNAS側にホームディレクトリを作成します。標準では /noexistent になっていて、鍵を置くことができません。

    # cd /mnt/DATA
    # mkdir /mnt/DATA/home
    # mkdir /mnt/DATA/home/xxx
    # chown xxx /mnt/DATA/home/xxx
    # chgrp admins /var/home/xxx
    # exit

    として、ホームディレクトリを生成します。
    その後、FreeNAS側で「アカウント」→「ユーザ」→「ユーザ名」を選択すると、ホームディレクトリを設定する場所があるので、作成したホームディレクトリを指定します。さらに、下の方にSSH公開鍵を貼り付ける場所があるので、そこに生成した公開鍵を貼り付けます。
    貼り付けたあと、「OK」を押すと、SSHログインの際に認証鍵ペアが使われるようになります。

    これで先のスクリプトを走らせてやれば、ext4 + cryptsetup のファイルシステムにバックアップがとれるようになります。

     

     



    1 Trackbacks / Pingbacks

    コメントをどうぞ(日本語のみ/Only in Japanese)

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)