mirror作成 on FreeBSD ZFS
eSATAのディスクとボードを買った。
OSが起動している状態で差し込むと、あっさりad4として認識。ホットスワップも完全なようす。
atapci0: <SiI 3124 SATA300 controller> port 0xd000-0xd00f mem 0xd8094000-0xd8094 07f,0xd8080000-0xd8087fff irq 16 at device 1.0 on pci1 atapci0: [ITHREAD] ata2: <ATA channel 0> on atapci0 ata2: [ITHREAD] ata3: <ATA channel 1> on atapci0 ata3: [ITHREAD] ata4: <ATA channel 2> on atapci0 ata4: [ITHREAD] ata5: <ATA channel 3> on atapci0 ata5: [ITHREAD] (snip) ad4: 476940MB <SAMSUNG HA500LJ CW300-11> at ata2-master SATA150
ということで、内蔵RAIDなんてなんのその、ZFSでmirrorしてみる。
現状
pool: zpool_lo state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool_lo ONLINE 0 0 0 ad0s1e ONLINE 0 0 0
ストレージプールにad4を追加
% sudo zpool add zpool_lo ad4 % zpool status pool: zpool_lo state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool_lo ONLINE 0 0 0 ad0s1e ONLINE 0 0 0 ad4 ONLINE 0 0 0
簡単に追加できた。
が、しかし、一度追加してらもう戻せなくなってしまった…
%sudo zpool remove zpool_lo ad4 cannot remove ad4: only inactive hot spares can be removed
そういえば、追加は簡単にできるがshrinkはできないんだった。orz
send/recv作戦発動
というわけで、sendしてスナップショットを退避させ、作業した後にrecvで戻す作戦を実施
send
% zfs snapshot zpool_lo/home@20070123 % zfs send zpool_lo/home@20080123 | ssh backup.jp "cat > /home/faw/zfs_snapshots/home-20080123.zfssnap" ここでかなり時間がかかる(16Gあるし)ので、その間した作業の差分を再度送る % zfs snapshot zpool_lo/home@20070123-2 % zfs send -i zpool_lo/home@20080123 zpool_lo/home@20070123-2 | ssh backup..jp "cat > /home/faw/zfs_snapshots/home-20080123-2.zfssnap"
ちなみに、zfsがだめだった場合に備えて、単なるtarでもバックアップを取っておいた。
ここで、念のためsingle user modeに落ちる。
% sudo shutdown now
zpoolの破棄/再構築
# zpool destroy zpool_lo <- 破棄 # zpool create zpool_lo mirror ad01e ad4 今度はちゃんとmirrorをつけること
ad4とかしちゃったんだけど、そうすると、
# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT zpool_lo 50G 24.2G 25.8G 48% ONLINE -
ん?500G追加したんだけど、50Gになってる。って、当たり前。mirrorなんだから小さい方に合わせられちゃうよな、ふつー。
というわけで、慌ててfdiskでad4s1を作る。おばかさんですなぁ。
# zpool create zpool_lo mirror ad01e ad4s1 # zpool status pool: zpool_lo state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool_lo ONLINE 0 0 0 mirror ONLINE 0 0 0 ad0s1e ONLINE 0 0 0 ad4s1 ONLINE 0 0 0
スナップショットのrecv
# scp faw@backup.jp:/home/faw/zfs_snapshots/home-20080123.zfssnap . # zfs recv zpool_lo/home < home-20080123.zfssnap # zfs recv zpool_lo/home < home-20080123-2.zfssnap
たぶんsshで送りながらでもできるだろうけど、念のためローカルにコピってからrecv。ちなみに、先にzfs create zpool_lo/homeとかやっておくと怒られる。
ちなみにかかった時間。
- 16.5Gのスナップショットをrecvするのにかかった時間
- 0.01s user 161.85s system 20% cpu 13:11.55 total
- 7.7Gの増分スナップショットをrecvするのにかかった時間
- 0.02s user 91.38s system 16% cpu 9:00.93 total
なんで増分なのにこんなにでかいかというと、tarでバックアップを取ったのを消し忘れてたから。
まとめ
- mirrorじゃないものにzpool addする(容量増設)と戻せないよ
- mirrorすると容量が少ない方に合わさってしまうよ
- send/recvはかなりいけてる。完璧に復元した
- 時間も現実的な時間