ふとDVD-RAMにZFSをつくってみようという気になったのでやってみた。(OSはFreeBSD 9.0-CURRENT)
freebsd# zpool create dvdram /dev/acd0 freebsd# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT dvdram 4.25G 206K 4.25G 0% ONLINE - .... freebsd# df /dvdram Filesystem 1K-blocks Used Avail Capacity Mounted on dvdram 4386684 56 4386628 0% /dvdram freebsd# zfs create dvdram/tmp freebsd# df | grep /dvdram dvdram 4386604 60 4386544 0% /dvdram dvdram/tmp 4386600 56 4386544 0% /dvdram/tmp freebsd# zfs list -r dvdram NAME USED AVAIL REFER MOUNTPOINT dvdram 272K 4.18G 60K /dvdram dvdram/tmp 56K 4.18G 56K /dvdram/tmpあっさりできた。
メタデータは標準で3重化されているがデータは冗長性がないので2重化しておこう。
freebsd# zfs set copies=2 dvdram
さて書き込み性能はどんなものか?
freebsd# time dd if=/dev/urandom of=/dev/null bs=1m count=100 100+0 records in 100+0 records out 104857600 bytes transferred in 2.119697 secs (49468206 bytes/sec) 0.000u 2.044s 0:02.12 96.2% 26+4151k 0+0io 0pf+0w freebsd# time dd if=/dev/urandom of=/dvdram/tmp/random.out bs=1m count=100 100+0 records in 100+0 records out 104857600 bytes transferred in 97.429001 secs (1076246 bytes/sec) 0.000u 2.185s 1:37.43 2.2% 33+5331k 0+0io 0pf+0w/dev/null送りにしたケースがオーバヘッド/dev/urandomのオーバーヘッドなので それを差し引きすると 1.049 MiB/s (1.10MB/s) 。メディアは三菱化学の5xで、 ドライブは PIONEER DVD-RW DVR-112 (1.21)。 ddが終わったあともドライブのアクセスランプは点滅していた。遅延書き込みだろう。
さて、メディアを抜いてみようか..
freebsd# cdcontrol eject freebsd# zpool status dvdram pool: dvdram state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM dvdram ONLINE 0 0 0 acd0 ONLINE 0 0 0 errors: No known data errorsあっさり成功してしまった。 ロックされて失敗するのを期待してたんだが...
じゃあexportしないといけないよねってことで
freebsd# zpool export dvdram ^T load: 0.67 cmd: zpool 42164 [tx->tx_sync_done_cv)] 30.07r 0.00u 0.02s 0% 2176k ^Cささってしまった。
コンソールメッセージにはこんなのが出てた。
Nov 22 16:24:48 freebsd root: ZFS: zpool I/O failure, zpool=dvdram error=6 Nov 22 16:24:48 freebsd root: ZFS: zpool I/O failure, zpool=dvdram error=28 Nov 22 16:24:48 freebsd last message repeated 2 times Nov 22 16:24:48 freebsd root: ZFS: vdev I/O failure, zpool=dvdram path= offset= size= error=
別のターミナルを開いてstatusコマンドをたたいてみると
koie@freebsd% zpool iostat -v capacity operations bandwidth pool used avail read write read write ----------- ----- ----- ----- ----- ----- ----- dvdram 201M 4.05G 0 3 340 324K acd0 201M 4.05G 0 3 340 324K ----------- ----- ----- ----- ----- ----- ----- tank 787G 1.17T 10 10 67.7K 295K raidz1 787G 1.17T 10 9 67.7K 157K ad6s2 - - 3 5 95.7K 78.9K ad8s2 - - 3 5 96.0K 78.9K ad10s2 - - 3 5 95.9K 78.9K label/zil 20K 1.95G 0 1 1 138K ----------- ----- ----- ----- ----- ----- ----- koie@freebsd% zpool status dvdram pool: dvdram state: ONLINE status: One or more devices are faulted in response to IO failures. action: Make sure the affected devices are connected, then run 'zpool clear'. see: http://www.sun.com/msg/ZFS-8000-HC scrub: none requested config: NAME STATE READ WRITE CKSUM dvdram ONLINE 0 4 0 acd0 ONLINE 0 6 0 errors: 4 data errors, use '-v' for a list koie@freebsd%本来ならばこのURLを参照するとサクっと詳細な情報がえられるはずなのだが、SunがORACLEに買収されてしまった影響でORACLEのログインページにとばされてしまってみられない。 もし作業現場でORACLEのアカウントをもってなかったらかなりイラっとくるはずだな、これは。
zpool clearするといいらしい。zpool clear dvdramしたらzpool exportコマンドももど ってきた。
freebsd# zpool status dvdram cannot open 'dvdram': no such pool
ちゃんとexportされてる。もういちどDVD-RAMを取り出して入れ直してから再マウントに 挑戦。
freebsd# cdcontrol eject freebsd# zpool import dvdram freebsd# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT dvdram 4.25G 201M 4.05G 4% ONLINE - tank 1.94T 787G 1.17T 39% ONLINE - freebsd# zpool status dvdram pool: dvdram state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Mon Nov 22 16:34:47 2010 config: NAME STATE READ WRITE CKSUM dvdram ONLINE 0 0 0 acd0 ONLINE 0 0 0 28K resilvered errors: No known data errors freebsd#無事できました、パチパチ。
あとおもしろいことといえば、 ディスクの記録面をみると二本の太い筋がみえて、データが二重化されているのがよくわかる。 こういうところは光デバイスのいいところ。
そういえばzfs set atime=off dvdramするのをわすれてた。100MBくらいのデジカメ画像をコピーしてから zfs set atime=off dvdramしたんだが、なかなか終わらない。なにしてるんだろう...