gmirrorでデータを守る
geom(4)はFreeBSDのディスク管理システムで、積み木を重ねるようにデ
バイスを組み合わせて簡単に新しい機能を作り出せる機構のようだ。例えば、
暗号化ファイルシステムのgeliとミラーイングのgmirrorを合せて暗号化された
ミラーが作れたりする。 netgraphの機能をディスクにで実現したようなものと言える。
gmirror(8)はこのgeomフレームワークのものとにミラーを実装する。通勤の電車でこの機能を試してみた。
synopsis
$ man gmirror
$ gmirror label important ad0s1e ad1s1e
$ mount /dev/mirror/important /important
/homeをミラーする
ミラーは普通、複数の物理的ディスクでやらなくては意味無いが、今この作業をしているラップトップには一つしな
ないので、md(4)に二つ目のディスクの代りをしてもらう。後にデスクトップで
実装するときにはmd0をad1s1eなどに置き換えればいい。
$ dd if=/dev/zero of=/usr/var/home-mirror.md bs=1m count=1000
$ sudo mdconfig -a -t vnode -f /usr/var/home-mirror.md -u 0
$ sudo mdconfig -l
乗せ替える。geom用語ではこれらをプロバイダーと呼ぶ。
ad0s1fにあるデータは消されるので、まずバックアップを取っておく。
マウントしたファイルシステムをダンプするときは-Lを使わないと叱られる。
さて、バックアップができたので、ミラーを作る。
$ gmirror load
$ gmirror label home ad0s1f md0
ミラーを作るのは無謀だ。どうやら、ルートでログインするか
シングルユーザモードでやらなければいけないようだ。
$ shutdown
$ gmirror label home ad0s1f md0
これでミラーデバイスの構築が始まる。二つの「プロバイダー」のad0s1fとmd0
がsyncされる。これには少々時間がかかるが、このコマンドでその状況が見れる:
$ gmirror status
$ ls -l /dev/mirror/
crw-r----- 1 root operator 0, 90 Jul 10 17:15 home
$ mount /dev/mirror/home /home
$ cd /home
$ zcat /usr/var/home.dump.gz | restore -r -f -
多分、rc.confに「gmirror_hoge=hoge」とでもすれば、勝手にやってくれる筈。
rc.conf(5)でサポートされている変数を見ると、、gmirrorが無い。
仕方がないのでrc.local(8)で実装。
/etc/rc.local
mdconfig -a -t vnode -f /usr/var/home-mirror.md -u 0
gmirror load
gmirror label home ad0s1f md0
mount /dev/mirror/home /home
gmirror load
gmirror label home ad0s1f md0
mount /dev/mirror/home /home
$ reboot
結論
gmirrorはシステムとよくインテグレートされ、ドキュメントも十分なので、簡単に
使える。以前vinumでやろうとしたときは、ディスクのgeometryなんかを手作業で
設定した記憶があるが、それに比べると本当に簡単に設定できた。他のgeomの機能、例えば
暗号化してくれるgeli(8)なんかと組み合わせて、複合ファイルシステムもやってみたい。
また、gmirrorはルートやスワップもサポートしているので、全パーティッションをミラー化できる。
これからまだ、勉強してみたいシステムだ。