読者です 読者をやめる 読者になる 読者になる

treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

(2/2)ディスクの増設先にddでイメージバックアップ取得

Linux

昨日の記事で増設したディスクにパーティションを作成したところまでが完了しました。
今日は作成したパーティションをフォーマットしてファイルシステムを用意、その後ddでイメージバックアップの取得までをご報告します。

(1/2)ディスクを増設してパーティションを作成する - treedown’s Report
この図の下のHDDのパーティション領域作成までが完了しています。
図:計画の図

f:id:treedown:20160411002743p:plain
下の増設HDD側をフォーマットしてddでイメージバックアップ、というのが目論見です。

追加ディスクをフォーマットしてマウントする操作

次にフォーマットを実行です。「mkfs.ext4」コマンドを実行します。
----------------------------------------------
$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.42.12 (29-Aug-2014)
/dev/sdb1 contains a ext3 file system
        last mounted on /mnt/usbdsk on Sun Apr 10 15:39:48 2016
Proceed anyway? (y,n) y
Creating filesystem with 9056584 4k blocks and 2264752 inodes
Filesystem UUID: afd43e33-f82b-41fe-ac1a-187d02c6a273
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
----------------------------------------------
fdisk -lコマンドで確認したディスク一覧から、使いたいディスクのパーティションを指定して、mkfs.ext4コマンドでext4ファイルシステムでフォーマットするようコマンドを入力します。
ここで間違えてsdaを指定してフォーマットしないよう注意しましょう。

フォーマット完了後

ディスクが使える状態になりました
この状態でディスクが準備万端になったところでマウントポイントを作成しマウント準備をするようにします。
----------------------------------------------
$ sudo mkdir /backup
$ sudo mount /dev/sdb1 /backup
$ sudo blkid
/dev/sdb1: UUID="afd43e33-f82b-41fe-ac1a-187d02c6a273" TYPE="ext4" PARTUUID="cccdcccd-01"
/dev/sda1: UUID="f1000b32-061f-4f1b-beb4-55b11daf0f8b" TYPE="ext4" PARTUUID="66efd019-01"
/dev/sda5: UUID="a351037c-5245-43f3-8911-f92db05c3f25" TYPE="swap" PARTUUID="66efd019-05"
----------------------------------------------
/dev/sdb1を起動時にマウントしたいので、/etc/fstabに/dev/sdb1のUUIDである以下を追記
----------------------------------------------
# Add Backup Device(HDD)
UUID=afd43e33-f82b-41fe-ac1a-187d02c6a273  /backup       ext4     defaults 0 0
----------------------------------------------
可能であればテスト的に再起動してOS起動時に自動でマウントされることを確認しておく方がいいですね。

ddによるイメージバックアップ

ddコマンドを使ってイメージバックアップを取得します。
----------------------------------------------
$ sudo mkdir /backup/imgBackup
$ sudo dd bs=4M if=/dev/sda of=/backup/imgBackup/sda_dd160411.img
4884+1 レコード入力
4884+1 レコード出力
20485785600 バイト (20 GB) コピーされました、 1142.46 秒、 17.9 MB/秒

$ ls -la /backup/imgBackup/
合計 20005664
drwxr-xr-x 2 root root        4096  4月 11 00:14 .
drwxr-xr-x 4 root root        4096  4月 11 00:12 ..
-rw-r--r-- 1 root root 20485785600  4月 11 00:33 sda_dd160411.img

----------------------------------------------
20,485,785,600バイト=20GBのハードディスクイメージが取得できました。

ちなみにddコマンドに「dd bs=4M if=/dev/sda | gzip -c > %出力ファイル名%」という具合にgzipコマンドをパイプで繋げて付加することでgz形式に圧縮された状態のイメージバックアップができるそうな。時間があれば今度試してみたいと思います。
今回はディスク全体を取得してディスク故障時にすべての情報をリストアする目的でddコマンドを使用しましたが、パーティション単位で取得することももちろん可能です。その場合には、「if=/dev/sda」の部分を「if=/dev/sda1」とパーティション指定をし同じようにof=で出力ファイル名を指定してバックアップします。そうすると本機の例で言えばswapに使われている/dev/sda5は収集されないことになり、純粋なOS領域のバックアップとなります。

ddコマンドをcronで仕掛けてみる

ここまでのddイメージバックアップ、これを定期的に実行したいので、
$ sudo crontab -e
で、スケジュールを追加します。
----------------------------------------------
$ sudo crontab -l
(コメント行中略)
#
# m h  dom mon dow   command
05 01 * * 1 dd bs=4M if=/dev/sda of=/backup/imgBackup/sda_dd.img
----------------------------------------------
これで時間が来ればddが動作するようになります。実行後にrootからのcron実行メールが発行されますので実行の可否はメールアラートで確認できます。
図:cron実行結果メールアラート

f:id:treedown:20160411095505p:plain

メール本文に、コンソールで出力されたメッセージと同一のメッセージが記載されています。
ここでは毎週月曜早朝で動作させていますが、土曜日曜あたりの早朝に移そうと思っています。

概ねこんな感じです。

こうして、増設したハードディスクにddコマンドでイメージバックアップの取得を仕掛けました。ミラーリング(RAID1)を仕掛けるより扱いやすいかもしれませんね。ddコマンドは今回指定したファイル名指定をof=%パーティション名%とすることで、ミラーリングのような使い方もすることができます。Windowsにはないちょっと扱いやすいバックアップですね。WindowsでいうところのNTBackupのASRバックアップ(かなりマイナーですが)に近いです。使い勝手は全然ddの方が上ですが。

似たようなソリューションにはMondo RescueとかG4L(Ghost for Linux)などがあります。それぞれに利点がありますが、ひとまずすべての基本はddにあると考えてもいいと思います。G4Lなどはまた別の機会にご紹介したいと思います。