前回はGEOMでミラーリングを作ってみたので、今回はZFSを使ってミラーリングを作ってみた。
作ってみたのだけど、思ってたのと違っていて、2個HDDを増設してそのHDDがZFSでミラーリングされているという状況になった。
とりあえずZFSを試してみるのに一番簡単な方法だとは思うので、載せてみようと思う。
FreeBSDはまた最初から作成したけど、少しづつスクリプトもどきを作っていってるので、たいした労力はない。
ただ時間が結構かかるのでそこがネックかなあ。
たいした事はやってないのでダイジェスト的にいきます。
まずはdmesgで認識状況を確認しました。
% dmesg | grep MB real memory = 2147483648 (2048 MB) avail memory = 2048126976 (1953 MB) da0: 320.000MB/s transfers (160.000MHz, offset 127, 16bit) da0: 20480MB (41943040 512 byte sectors: 255H 63S/T 2610C) da1: 320.000MB/s transfers (160.000MHz, offset 127, 16bit) da1: 20480MB (41943040 512 byte sectors: 255H 63S/T 2610C) real memory = 2147483648 (2048 MB) avail memory = 2052296704 (1957 MB) da0: 320.000MB/s transfers (160.000MHz, offset 127, 16bit) da0: 20480MB (41943040 512 byte sectors: 255H 63S/T 2610C) da1: 320.000MB/s transfers (160.000MHz, offset 127, 16bit) da1: 20480MB (41943040 512 byte sectors: 255H 63S/T 2610C)
da0にFreeBSDが入ってて、da1がスレーブにある状態です。
% zpool create -m /newhdd tank da1
% zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank 19.9G 120K 19.9G 0% 1.00x ONLINE -
% zfs list NAME USED AVAIL REFER MOUNTPOINT tank 102K 19.6G 31K /newhdd
da1でzpoolを作ってます、zfsはマウントを自動で作ってくれるらしい。
gmirrorの時のようなエラーは起こりませぬ。
こいつにはあとからドンドコHDDを追加してzpoolに追加できるらしい。
ストレージのクラウドみたいな。
dfで確認するとこんな感じ。
% df -T Filesystem Type 1K-blocks Used Avail Capacity Mounted on /dev/da0s1a ufs 1012974 323320 608618 35% / devfs devfs 1 1 0 100% /dev /dev/da0s1e ufs 1012974 14 931924 0% /tmp /dev/da0s1f ufs 8173726 1749948 5769880 23% /usr /dev/da0s1d ufs 6070638 192890 5392098 3% /var tank zfs 20514745 31 20514714 0% /newhdd
そしてそのままda0とda1でミラーリングはできるはずないのだけど、やってみた。
% zpool create -m /mirror zmirrorA mirror da0 da1 invalid vdev specification use '-f' to override the following errors: /dev/da1 is part of active pool 'tank'
こいつはtankじゃろうがーって怒られる。ので
destroyで、その幻想をぶち殺す!!
% zpool destroy tank
んでやってみるけど、これももちろん、それ無理と。
% zpool create -m /mirror zmirrorA mirror da0 da1 cannot create 'zmirrorA': one or more devices is currently unavailable
1個でも当然、それ無理と。
% zpool create -m /mirror zmirrorA mirror da1 invalid vdev specification: mirror requires at least 2 devices
HDDを追加した。
da0: 320.000MB/s transfers (160.000MHz, offset 127, 16bit) da0: 20480MB (41943040 512 byte sectors: 255H 63S/T 2610C) da1: 320.000MB/s transfers (160.000MHz, offset 127, 16bit) da1: 20480MB (41943040 512 byte sectors: 255H 63S/T 2610C) da2: 320.000MB/s transfers (160.000MHz, offset 127, 16bit) da2: 20480MB (41943040 512 byte sectors: 255H 63S/T 2610C)
これなら問題ない。
% zpool create -m /mirror zmirrorA mirror da1 da2
% zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT zmirrorA 19.9G 102K 19.9G 0% 1.00x ONLINE -
% zpool status pool: zmirrorA state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM zmirrorA ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 da1 ONLINE 0 0 0 da2 ONLINE 0 0 0 errors: No known data errors
% df -Th Filesystem Type Size Used Avail Capacity Mounted on /dev/da0s1a ufs 989M 315M 594M 35% / devfs devfs 1.0k 1.0k 0B 100% /dev /dev/da0s1e ufs 989M 14k 910M 0% /tmp /dev/da0s1f ufs 7.8G 1.7G 5.5G 23% /usr /dev/da0s1d ufs 5.8G 188M 5.1G 3% /var zmirrorA zfs 19G 31k 19G 0% /mirror
上手くいったよだ。
参考資料
実践FreeBSDサーバ構築・運用ガイド 佐々木 宣文 (著), 後藤 大地 (著), 佐藤 広生 (監修)