BDへの安全なバックアップ方法。
ST2000DM001壊れた。
fsckやって修復しないと起動してこないのを3回やらかしてくれたから、交換して仮置き場にでも使うかなぁと再初期化してたら認識しなくなって完全に死亡。
まぁ移行完了までもってよかったですが。
— 殊海夕音 (@yune_kotomi) 2015, 10月 16
というのを契機にしてバックアップ方法を再考してたんですが、堅牢なBD書き出し方法を考えたので書き留めます。
要求
構成
上記の要求を踏まえ、このような構成でディスクを作成することにしました。
- ファイルをEXT4フォーマットのイメージに格納(a)
- イメージはLUKSにて暗号化
- イメージをBDに書き出す際、エラー訂正情報を付与する
依存
- cryptsetup
- dvdisaster
- mdadm
作成手順
EXT4ディスクイメージの作成
cd /tmp dd if=/dev/zero bs=1M count=3500 of=disk.img.0 dd if=/dev/zero bs=1M count=3500 of=disk.img.1 dd if=/dev/zero bs=1M count=3500 of=disk.img.2 dd if=/dev/zero bs=1M count=3500 of=disk.img.3 dd if=/dev/zero bs=1M count=3500 of=disk.img.4 sudo losetup /dev/loop0 disk.img.0 sudo losetup /dev/loop1 disk.img.1 sudo losetup /dev/loop2 disk.img.2 sudo losetup /dev/loop3 disk.img.3 sudo losetup /dev/loop4 disk.img.4 sudo mdadm --create /dev/md/md0 -l linear -n 5 /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4 sudo cryptsetup luksFormat /dev/md/md0 sudo cryptsetup luksOpen /dev/md/md0 disk sudo mkfs.ext4 /dev/mapper/disk mkdir mount sudo mount /dev/mapper/disk mount sudo chown USERNAME mount
単一のrawイメージではなく複数のイメージをRAID0で束ねているのは、ISO9660フォーマットの仕様上4GB以上のファイルを格納できないため。単一イメージにしてしまうとファイル分割の必要がある。
ディスクイメージにファイルを投入
/tmp/mountに書き出したいファイルをコピーする
ISOイメージを作成
sudo umount mount sudo cryptsetup luksClose disk sudo mdadm --stop /dev/md/md0 sudo losetup -d /dev/loop0 sudo losetup -d /dev/loop1 sudo losetup -d /dev/loop2 sudo losetup -d /dev/loop3 sudo losetup -d /dev/loop4 mkisofs -L -R -o disk.iso -V DISKNAME disk.img.* dvdisaster -c -i disk.iso -mRS02 -n BD
上記のパラメータだと、30%ほどの冗長性が確保できる。あとは作成したISOイメージをBD-Rに書き出せばよい。
マウント方法
sudo losetup /dev/loop0 /path/to/disk.img.0 sudo losetup /dev/loop1 /path/to/disk.img.1 sudo losetup /dev/loop1 /path/to/disk.img.2 sudo losetup /dev/loop1 /path/to/disk.img.3 sudo losetup /dev/loop1 /path/to/disk.img.4 sudo mdadm --assemble --force /dev/md/md0 /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4 sudo cryptsetup luksOpen /dev/md/md0 disk mkdir /tmp/mount sudo mount /dev/mapper/disk /tmp/mount