FreeBSDでzfsを試してみた その4
jailの構築が終わったのでjail内でzfsを試してみる。
jailの設定
まず、jailでマウントが出来るようにする。
# sysctl security.jail.mount_allowed=1
これだと、再起動した時にもう一回やらないといけないので、/etc/sysctl.confに書いておく
# echo'sysctl security.jail.mount_allowed=1' >> /etc/sysctl.conf
次にjail内でzfsコマンドを使用できるようにする。
# vim /usr/local/etc/ezjail/sample01 - export jail_sample01_devfs_ruleset="devfsrules_jail" + export jail_sample01_devfs_ruleset="zfsenable"
前回ezjailをインストールした時に/usr/local/etc/ezjail.confに以下の様に書いておけば上のはいらなかったぽい。
# vim /usr/local/etc/ezjail.conf ezjail_devfs_enable="YES" ezjail_devfs_ruleset="zfsenable"
ezjail.confがezjail-adminでjail作るときにしか意味がないのに気づかずにしばらくここで苦戦した><
zfsの設定
次はzfsのファイルシステムをjailで操作できるように設定する。
# zfs create zpool0/jail # jls JID IP Address Hostname Path 1 192.168.0.82 sample01 /usr/local/jails/sample01 # zfs jail 1 zpool0/jail # zfs set jailed=on zpool0/jail
これでjail内でzfsが使用できるようになったはず。
検証
動いているか確認をする。
# jexec 1 /bin/tcsh sample01# zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 513M 1.44G 20K /zdevel zpool0/jail 18K 1.44G 18K /zdevel/jail sample01# ls /zdevel jail
zfs createコマンドを試してみる。
sample01# zfs create zpool0/jail/sample01 sample01# zfs create zpool0/sample01 cannot create 'zpool0/sample01': permission denied
ちゃんとjailの設定がされているzpool0/jailにはzfsのボリュームを作れて、設定がされてないzpool0には作られない。
速度比較
sample01# dd if=/dev/urandom of=/zdevel/jail/random.dat count=131072 bs=1024 131072+0 records in 131072+0 records out 134217728 bytes transferred in 12.411375 secs (10814090 bytes/sec) # dd if=/dev/urandom of=/zdevel/random.dat count=131072 bs=1024 131072+0 records in 131072+0 records out 134217728 bytes transferred in 12.342206 secs (10874695 bytes/sec)
普通にファイルの作成とかも出来るし、速度もjail内と外で大差ない。
まとめ
これで大体FreeBSDで出来ることは終わりかな?
USBメモリを2本挿すだけで簡単にテストできるのは嬉しかった。ただ、やっぱりUSBメモリなのでちゃんとしたHDDで速度とかのテストをしたいところ。
FreeBSDでiSCSIが利用可能になるのはいつになるんだろう……
zfsで圧縮機能を試してみる
とりあえずこんな感じで3つほどファイルシステム作成して試してみた。
# zpool create -m /zdevel zpool0 da0s1 da0s2 da1s1 da1s2 # zfs create zpool0/hamaco # zfs create zpool0/jack # zfs create zpool0/rucifer
圧縮を有効にする
zfs setコマンドを使って圧縮機能を有効にする。
# zfs set compress=on zpool0/jack # zfs set compress=gzip zpool0/rucifer
compressには
5.5Mのファイルをコピーしてみる。
# cd /zdevel shana# time cp /usr/local/www/public/sample.bmp hamaco/ 0.006u 0.012s 0:00.01 100.0% 48+1892k 0+0io 0pf+0w shana# time cp /usr/local/www/public/sample.bmp jack/ 0.000u 0.016s 0:00.02 50.0% 32+1696k 0+0io 0pf+0w shana# time cp /usr/local/www/public/sample.bmp rucifer/ 0.005u 0.011s 0:00.01 100.0% 48+1892k 0+0io 0pf+0w
この程度だと圧縮してても速度は殆ど大差がない。
ディスク使用量を見てみる。
# zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 9.82M 1.93G 22K /zdevel zpool0/hamaco 5.52M 1.93G 5.52M /zdevel/hamaco zpool0/jack 2.51M 1.93G 2.51M /zdevel/jack zpool0/rucifer 1.65M 1.93G 1.65M /zdevel/rucifer shana# zfs get compressratio NAME PROPERTY VALUE SOURCE zpool0 compressratio 1.71x - zpool0/hamaco compressratio 1.00x - zpool0/jack compressratio 2.21x - zpool0/rucifer compressratio 3.37x -
ちゃんと圧縮されて保存されているみたい。compressratioで圧縮率が分かる。
速度比較
/dev/urandomを使って128MBのファイルを作成する。
shana# dd if=/dev/urandom of=hamaco/random.dat count=131072 bs=1024 131072+0 records in 131072+0 records out 134217728 bytes transferred in 10.760321 secs (12473394 bytes/sec) shana# dd if=/dev/urandom of=jack/random.dat count=131072 bs=1024 131072+0 records in 131072+0 records out 134217728 bytes transferred in 12.353089 secs (10865115 bytes/sec) shana# dd if=/dev/urandom of=rucifer/random.dat count=131072 bs=1024 131072+0 records in 131072+0 records out 134217728 bytes transferred in 23.177062 secs (5790972 bytes/sec)
圧縮率がよくなるにつれて、速度が低下しているのが分かる。
/dev/zeroで128MBのファイルを作ると、逆に圧縮しているほうが速くなる。
shana# dd if=/dev/zero of=hamaco/zero.dat count=131072 bs=1024 131072+0 records in 131072+0 records out 134217728 bytes transferred in 8.296105 secs (16178403 bytes/sec) shana# dd if=/dev/zero of=jack/zero.dat count=131072 bs=1024 131072+0 records in 131072+0 records out 134217728 bytes transferred in 4.481962 secs (29946200 bytes/sec) shana# dd if=/dev/zero of=rucifer/zero.dat count=131072 bs=1024 131072+0 records in 131072+0 records out 134217728 bytes transferred in 4.336304 secs (30952103 bytes/sec)
sharenfsも
#zfs set sharenfs=on {pool_name}
だけだと、動かないし……
時間のある時にでもOpenSolaris入れて試してみるか~
FreeBSDでzfsを試してみた その4
今回はスナップショットのクローン作成とかその辺。前回の続きなので今はこんな構成。
# zpool status pool: zpool0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 errors: No known data errors # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 64.2M 912M 20K /zdevel zpool0/hamaco 64.0M 912M 64.0M /zdevel/hamaco
全部スナップショットを削除してしまったので作る。
# zfs snapshot zpool0/hamaco@first
スナップショットのクローン
さっき作ったスナップショットのクローンを作成してみる。
# zfs clone zpool0/hamaco@first zpool0/hmc_first # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 64.2M 912M 21K /zdevel zpool0/hamaco 64.0M 912M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - zpool0/hmc_first 0 912M 64.0M /zdevel/hmc_first
クローンもスナップショットと同様作成しただけではディスクを消費しない。
クローンにファイルを追加したりするとその分だけディスクを消費する。
# mkfile 32M /zdevel/hmc_first/fugafuga # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 96.2M 880M 21K /zdevel zpool0/hamaco 64.0M 880M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - zpool0/hmc_first 32.0M 880M 96.0M /zdevel/hmc_first
クローンに対してzfs promoteコマンドを使うと、元データとの関係を逆転させることが出来る。
# zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 96.2M 880M 21K /zdevel zpool0/hamaco 64.0M 880M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - zpool0/hmc_first 32.0M 880M 96.0M /zdevel/hmc_first # zfs promote zpool0/hmc_first # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 96.2M 880M 21K /zdevel zpool0/hamaco 0 880M 64.0M /zdevel/hamaco zpool0/hmc_first 96.1M 880M 96.0M /zdevel/hmc_first zpool0/hmc_first@first 17K - 64.0M -
スナップショットのバックアップ
zfs sendコマンドを使うと、スナップショットのデータが標準出力に書き出される。
# zfs send zpool0/hmc_first@first > snapshot # ls -lh snapshot -rw-r--r-- 1 root wheel 64M Apr 18 18:11 snapshot
定期的にバックアップをとる時などは、-iオプションを付けると差分だけとれるので便利。
# zfs snapshot zpool0/hmc_first@second # zfs send -i zpool0/hmc_first@first zpool0/hmc_first@second > snapshot2 # ls -lh snapshot2 -rw-r--r-- 1 root wheel 32M Apr 18 18:11 snapshot2
zfs receiveコマンドでスナップショットのバックアップファイルから復元出来る。
# zfs send zpool0/hmc_first@second > snapshot zfs receive zpool0/hmc_second < snapshot # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 192M 784M 22K /zdevel zpool0/hamaco 0 784M 64.0M /zdevel/hamaco zpool0/hmc_first 96.1M 784M 96.0M /zdevel/hmc_first zpool0/hmc_first@first 17K - 64.0M - zpool0/hmc_first@second 0 - 96.0M - zpool0/hmc_second 96.0M 784M 96.0M /zdevel/hmc_second zpool0/hmc_second@second 0 - 96.0M -
sendとreceiveをパイプラインで組み合わせると、こんなことも出来る。(ごちゃごちゃしてたので、最初の状態に戻してある)
# zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 64.2M 912M 20K /zdevel zpool0/hamaco 64.0M 912M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - # zfs send zpool0/hamaco@first | zfs receive zpool0/hamaco_bk # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 128M 848M 21K /zdevel zpool0/hamaco 64.0M 848M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - zpool0/hamaco_bk 64.0M 848M 64.0M /zdevel/hamaco_bk zpool0/hamaco_bk@first 0 - 64.0M -
# mkfile 32M /zdevel/hamaco/fugafuga # zfs snapshot zpool0/hamaco@second # zfs send -i zpool0/hamaco@first zpool0/hamaco@second | zfs receive zpool0/hamaco_bk # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 192M 784M 21K /zdevel zpool0/hamaco 96.1M 784M 96.0M /zdevel/hamaco zpool0/hamaco@first 17K - 64.0M - zpool0/hamaco@second 0 - 96.0M - zpool0/hamaco_bk 96.1M 784M 96.0M /zdevel/hamaco_bk zpool0/hamaco_bk@first 17K - 64.0M - zpool0/hamaco_bk@second 0 - 96.0M -
標準出力に書き出されているので、sshコマンドを使って外部に送ることも出来る。
# zfs send zpool0/hamaco@second | ssh localhost zfs receive zpool0/remote Password: # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 385M 591M 23K /zdevel zpool0/hamaco 96.1M 591M 96.0M /zdevel/hamaco zpool0/hamaco@first 17K - 64.0M - zpool0/hamaco@second 0 - 96.0M - zpool0/hamaco_bk 96.1M 591M 96.0M /zdevel/hamaco_bk zpool0/hamaco_bk@first 17K - 64.0M - zpool0/hamaco_bk@second 0 - 96.0M - zpool0/remote 96.0M 591M 96.0M /zdevel/remote zpool0/remote@second 0 - 96.0M -
ただ、FreeBSDの一般ユーザ権限でzfsを動作させる方法が分からないので、PermitRootLoginを有効にして試してみた。
まとめ
とりあえず基本的な所は大体終わりかな?
次はiSCSIとかjailとかをやってみる予定。
FreeBSDでzfsを試してみた その3
今回はスナップショットを使ってみる。
とりあえず普通にストレージプールとディレクトリの作成。
# zpool create -m /zdevel zpool0 da0s1 da1s1 # zfs create zpool0/hamaco
スナップショット作成
zfs snapshotコマンドでスナップショットを作成できる。適当にファイルを作ってスナップショットを作成してみる。
# mkfile 64M /zdevel/hamaco/hogehoge # zfs snapshot zpool0/hamaco@first
ストレージプール名@スナップショット名という形で指定する。出来上がったスナップショットの中身を見る場合は、以下の様にスナップショットを作成したディレクトリの下にあるzfsディレクトリを見れば良い。
# ls /zdevel/hamaco/.zfs/snapshot/first
hogehoge
スナップショットを作成しても、ストレージプールの使用量に変化はない。もちろんスナップショットなのでファイルの追加とかの操作は一切出来ない。
# zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 64.2M 912M 19K /zdevel zpool0/hamaco 64.0M 912M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M -
元のディレクトリに何かファイルを追加してもスナップショットの中身には全く変化なし。ただ、何か情報が増えたのか微妙にUSEDは増えている。それにしてもzfs listで見ると、容量表示がおかしい。
shana# mkfile 32M /zdevel/hamaco/fugafuga shana# zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 88.6M 887M 19K /zdevel zpool0/hamaco 88.4M 887M 88.4M /zdevel/hamaco zpool0/hamaco@first 17K - 64.0M - # df -h /zdevel /zdevel/hamaco /zdevel/hamaco/.zfs/snapshot/first Filesystem Size Used Avail Capacity Mounted on zpool0 880M 0B 880M 0% /zdevel zpool0/hamaco 976M 96M 880M 10% /zdevel/hamaco zpool0/hamaco@first 944M 64M 880M 7% /zdevel/hamaco/.zfs/snapshot/first
# ls /zdevel/hamaco fugafuga hogehoge # ls /zdevel/hamaco/.zfs/snapshot/first hogehoge
とりあえず、この時点でもスナップショットを作成しておく。
# zfs snapshot zpool0/hamaco@second # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 96.2M 880M 19K /zdevel zpool0/hamaco 96.1M 880M 96.0M /zdevel/hamaco zpool0/hamaco@first 17K - 64.0M - zpool0/hamaco@second 0 - 96.0M -
スナップショットからの復元
zfs rollbackコマンドでスナップショットから復元が出来る。この時に指定したスナップショットよりも新しいスナップショットがある場合警告が出る。
# zfs rollback zpool0/hamaco@first cannot rollback to 'zpool0/hamaco@first': more recent snapshots exist use '-r' to force deletion of the following snapshots: zpool0/hamaco@second
- rオプションを付ければ復元することが出来るが、新しいスナップショットは全て消えてしまう。
# zfs rollback -r zpool0/hamaco@first shana# zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 64.2M 912M 20K /zdevel zpool0/hamaco 64.0M 912M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - # ls /zdevel/hamaco hogehoge
スナップショットの破棄
zfs destroyコマンドで破棄出来る。
# zfs destroy zpool0/hamaco@first
また、そのディレクトリのスナップショットを全て破棄したい場合は以下の様に-rオプションを付ければ良い。
# zfs destroy -r zpool0/hamaco
まとめ
zfsでは凄く簡単にスナップショットが作成出来る。なにか影響のありそうな事をやる前にとっておけば、なにかあった時にすぐに戻せて便利。
次はスナップショットのバックアップとかをやってみる。
FreeBSDでzfsを試してみた その2
前回の続き。
今回はmirror環境でハードディスクの追加とか削除とかをやってみる。多分raidzとかでも同じ様に出来ると思う。
# zpool create -m /zmirror zpool0 mirror da0s1 da1s1 # zpool status pool: zpool0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 mirror ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 errors: No known data errors
適当なデータの書き込み
とりあえず、なにか適当なデータを書き込んでおく。
# vim /zmirror/helloworld.rb
#!/usr/bin/env ruby p "Hello world!"
# ruby /zmirror/helloworld.rb "Hello world!"
ついでに、ベンチマークをかねて128MBのファイルを作成する。mkfileコマンドがなかったのでついでにインストールした。timeコマンドはcshの内部コマンドを使用しているので、zshとかでやるとちょっと出力のされかたが違うかもしれない。
# portinstall /usr/ports/sysutils/mkfile # time mkfile 128M sample 0.000u 0.318s 0:09.48 3.2% 5+1566k 0+0io 0pf+0w
128MBのファイルを作成するのに約10秒くらい。別にmkfileをインストールしなくてもddコマンドでも出来る。
# dd if=/dev/zero of=zero.dat count=131072 bs=1024 131072+0 records in 131072+0 records out 134217728 bytes transferred in 7.488602 secs (17922935 bytes/sec)
countの計算が面倒くさいけど、とくになにもインストールしなくていいからddのが楽だと思う。時間しか分からないけど。
参考までに、librettoのハードディスクに作成した時の結果。
# time mkfile 128M sample 0.000u 0.321s 0:07.57 4.2% 5+1661k 0+1021io 0pf+0w
ハードディスクの追加
ハードディスクを追加するにはzpool attachコマンドを使用する。とりあえず、2台でのミラーリングから3台でのミラーリングにしてみる。
# zpool attach zpool0 da0s1 da0s2
確認してみる。データの同期が完了していないとstatusとかにちゃんと出てくる。
# zpool status pool: zpool0 state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress, 86.40% done, 0h0m to go config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 mirror ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 da0s2 ONLINE 0 0 0 errors: No known data errors
同期が完了するまでしばらく待つ。同期が完了したらこんな感じ。
# zpool status pool: zpool0 state: ONLINE scrub: resilver completed with 0 errors on Wed Apr 16 14:17:43 2008 config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 mirror ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 da0s2 ONLINE 0 0 0 errors: No known data errors # df -h /zmirror Filesystem Size Used Avail Capacity Mounted on zpool0 472M 128M 344M 27% /zmirror
ちゃんとmirrorに1台追加されていて、容量も変化していない。とりあえず、最初に作ったrubyファイルを実行してみる。
# ruby /zmirror/helloworld.rb "Hello world!"
ちゃんと動いた。この状態でまたベンチマークをかねて128MBのファイルを作成する。
# time mkfile 128M sample2 0.000u 0.300s 0:13.53 2.2% 5+1464k 0+0io 0pf+0w
2台の時と比べると、4秒程遅くなっている。CPU使用時間とかは殆ど変っていないので、純粋にハードディスクへの書き込み分遅くなっているのかな?
ハードディスクの削除
ハードディスクの削除にはzpool dettachコマンドを使用する。さっき追加したのとは違うハードディスクを削除してみる。
# zpool detach zpool0 da0s1
確認してみる。
# zpool status pool: zpool0 state: ONLINE scrub: resilver completed with 0 errors on Wed Apr 16 14:17:43 2008 config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 mirror ONLINE 0 0 0 da1s1 ONLINE 0 0 0 da0s2 ONLINE 0 0 0 errors: No known data errors # df -h /zmirror Filesystem Size Used Avail Capacity Mounted on zpool0 472M 256M 216M 54% /zmirror
ちゃんと2台のミラーリングになっている。で、最初に作ったrubyファイルを実行してみる。
# ruby /zmirror/helloworld.rb "Hello world!"
ちゃんと動いている。
ハードディスクの交換
ハードディスクの交換にはzpool replaceコマンドを使用する。
# zpool replace zpool0 da1s1 da0s1
交換中のzpool statusはこんな感じ。
# zpool status pool: zpool0 state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress, 50.00% done, 0h0m to go config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 mirror ONLINE 0 0 0 replacing ONLINE 0 0 0 da1s1 ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da0s2 ONLINE 0 0 0 errors: No known data errors
しばらく待つと交換が完了した。ただ、同じUSBメモリの別パーティション同士でやったら75%辺りで固まってしまった。再起動してもう一回やったら大丈夫だったけど。
# zpool status pool: zpool0 state: ONLINE scrub: resilver completed with 0 errors on Wed Apr 16 15:12:11 2008 config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 mirror ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da0s2 ONLINE 0 0 0 errors: No known data errors # df -h /zmirror Filesystem Size Used Avail Capacity Mounted on zpool0 472M 256M 216M 54% /zmirror
まとめ
ハードディスクの追加とかがコマンド一発で出来るのは楽でいい感じ。時間のある時にでもハードウェアRAIDとの速度比較をやってみたい。ただ、それをやれるマシンがない……
次はスナップショットとかその辺をやってみる予定。
FreeBSDでzfsを試してみた
家で絶賛放置中のlibretto U100にFreeBSD7.0のベータが入っていたので、その辺に転がってるUSBメモリ2本を利用してzfsを試してみた。
使用したUSBメモリは、IO-DATAのTB-BH2G。RAID6とかを試したかったので、両方共512MBずつ3つにスライスした。
参考サイト
zfsを有効にする
とりあえずzfsを試すだけなら以下のコマンドを実行すればすぐにzfsが使えるようになる。
# zfs
kldstatコマンドを実行してzfs.koが表示されていればzfsは有効になっている。
# kldstat Id Refs Address Size Name 1 5 0xc0400000 906518 kernel 2 1 0xc0d07000 b86fc zfs.ko 3 1 0xc0dc0000 2464 accf_http.ko 4 1 0xc0dc3000 6a32c acpi.ko
もちろん、この方法だとFreeBSDの終了時に毎回ちゃんとアンマウントをしないといけないし起動時に手動で有効化してマウントしないといけない。それが面倒くさい場合はrc.dを利用すればその辺を自動でやってくれる。
# echo 'zfs_enable="YES"' >> /etc/rc.conf # /etc/rc.d/zfs start
rc.dを利用すると、FreeBSDの終了時に勝手にアンマウントしてくれるので、アンマウントを忘れてデータが壊れることがなくなるはず。ただ、rc.confに書いただけだとzfs.koがロードされないので、下記のように/boot/loader.confを編集して起動時にロードされるようにする。
# echo 'zfs_load="YES"' >> /boot/loader.conf
ストレージプールの作成
通常のストレージプール作成
単純なストレージプールを作成するには以下のコマンドを実行すれば良い。この方法で作成すると、RAID0と同じ様にストライプされる。RAID0と同様のストレージプールなので、ハードディスクが1台でも壊れるともうどうしようもないはず。
# zpool create -m /zdevel zpool0 da0s1 da0s2 da1s1 da1s2
pool: zpool0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da0s2 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 da1s2 ONLINE 0 0 0 errors: No known data errors
ミラーリングされたストレージプール作成
ミラーリングしたい場合はmirrorって付けて実行すれば良い。基本RAID1と同じ様な感じにミラーリングされるけども、チェックサムとの比較を行なってエラーがあるともう片方から壊れた部分を読み取って直してくれるらしい。
# zpool create -m /zdevel zpool0 mirror da0s1 da1s1
# zpool status pool: zpool0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 mirror ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 errors: No known data errors
シングルパリティなストレージプール作成
raidzキーワードを付けるとRAID5と同じ様なストレージプールができる。mirrorと同じ様にエラーがあると正常なデータに自動で直してくれるらしい。また、zfsのraidzは普通のRAID5と違って可変幅のストライプを使用しているのでRAID5にある書き込みホールというのが起きないらしい。
# zpool create -m /zdevel zpool0 raidz da0s1 da0s2 da1s1 da1s2
# zpool status pool: zpool0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 raidz1 ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da0s2 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 da1s2 ONLINE 0 0 0 errors: No known data errors
ダブルパリティなストレージプール作成
raidzキーワードを付けるとRAID6と同じ様なストレージプールができる。これもシングルパリティなストレージプールと同様エラーを自動修復してくれて、書き込みホールが起きないらしい。
# zpool create -m /zdevel zpool0 raidz2 da0s1 da0s2 da1s1 da1s2
# zpool status pool: zpool0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da0s2 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 da1s2 ONLINE 0 0 0 errors: No known data errors
ミラーリングされたストレージプールをストライピングする
ミラーリングされたストレージプール作成後、zpool addでミラーリングされたストレージプールを追加すると、RAID10と同じ様なストレージプールができる。
# zpool create -m /zdevel zpool0 mirror da0s1 da1s1 # zpool add zpool0 mirror da0s2 da1s2
# zpool status pool: zpool0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 mirror ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 mirror ONLINE 0 0 0 da0s2 ONLINE 0 0 0 da1s2 ONLINE 0 0 0 errors: No known data errors
ホットスペア付きストレージプール作成
spareキーワードを付けるとホットスペア付きのストレージプールを作れる。通常のストレージプール以外全てで使用可能。
# zpool create -m /zdevel zpool0 raidz da0s1 da0s2 da1s1 da1s2 spare da0s3 da1s3
# zpool status pool: zpool0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 raidz1 ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da0s2 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 da1s2 ONLINE 0 0 0 spares da0s3 AVAIL da1s3 AVAIL errors: No known data errors
続く?
とりあえずストレージプールの作成は出来た。ストレージプールにハードディスク追加したりするのは、またの機会に書く……かも。