FreeBSD で AFT の HDD を扱う

という題名でいろいろいろ書こうと思ったが、結果的には何も面白いことはない。 とりあえず、 しののの - FreeBSD/BigSector HDD http://homebsd.homeunix.net/~shino/pukiwiki/index.php?FreeBSD%2FBigSector%20HDD とか FreeBSD(with ZFS)でWDのAFTなHDDを使う http://d.hatena.ne.jp/nawolets/20100826/1282844451

を参考にさせていただきました。私のところには上記のページ以上のネタはありませぬ。

ということで、ちょっと前と先日、二度にわたってメインのファイルサーバのHDDが昇天した。メインのファイルサーバは RAID Z2 で RAID を組んであるので2つまでは HDD が逝っても大丈夫だが、やはり心配だし、お仕事のデータもいろいろ入っているのでその都度交換した。 もともとは 1.5TB x 6 で組んであるのだが、容量的にちょっと心もとないし、HDD の価格が落ち着いてきたらまた交換しようと思うのでとりあえず2台とも 3TB のものにした。で、当然のことながら、最近の 3TB の HDD は AFT で 4K セクタでアクセスし容量を稼ぐようになっている。だが、 FreeBSD 8.2 の zfs では 4kセクタに対応していないから、512bセクタのエミュレーションになってしまい、速度が出ないらしい。 ということで、前回は gnop コマンドを使って、 4kセクタでアクセスする技を試みたのだが、zpool を resilver するさいに、

cannot replace /dev/ad8 with /dev/ad8.nop: devices have different sector alignment

と、怒られてしまったのであった。

で、今回もgnopで4Kセクタアクセスはあきらめたのだが、領域を確保するさいに、4kの境界で切り分けると1.5倍程度速くなるという情報を見て、試してみることにした。

ということで、まずは何も設定しない状態。

> time sudo dd if=/dev/zero of=/dev/ad8 bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 10.028821 secs (107065609 bytes/sec) 0.007u 0.758s 0:10.06 7.4% 42+1618k 0+8192io 0pf+0w
まあ大体100MiB/sec くらい書き込みで出てる。

つぎに、gnop で4kセクタアクセス

>sudo gnop create -S 4096 ad8 >time sudo dd if=/dev/zero of=/dev/ad8.nop bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 11.118189 secs (96575246 bytes/sec) 0.000u 0.770s 0:11.16 6.8% 40+1534k 0+8192io 0pf+0w

あれ、あんまり変わらないぞ?

では gpart で 4k境界を考えつつパーテーション作成。

> sudo gpart create -s gpt ad8 ad8 created > sudo gpart add -b 40 -t freebsd ad8 ad8s1 added > gpart list ad8 Geom name: ad8 state: OK fwheads: 16 fwsectors: 63 last: 5860533134 first: 34 entries: 128 scheme: GPT Providers: 1. Name: ad8s1 Mediasize: 3000592944640 (2.7T) Sectorsize: 512 Mode: r0w0e0 rawuuid: 0c5c1933-26c5-11e1-a735-001b21287388 rawtype: 516e7cb4-6ecf-11d6-8ff8-00022d09712b label: (null) length: 3000592944640 offset: 20480 type: freebsd index: 1 end: 5860533134 start: 40 Consumers: 1. Name: ad8 Mediasize: 3000592982016 (2.7T) Sectorsize: 512 Mode: r0w0e0 > time sudo dd if=/dev/zero of=/dev/ad8s1 bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 12.209801 secs (87940977 bytes/sec) 0.035u 0.828s 0:12.37 6.8% 53+1640k 0+8192io 0pf+0w
あ、あれ?ちょっと遅い?

最後に、さらにgnop を重ねてみる。

> sudo gnop create -S 4096 ad8s1 > time sudo dd if=/dev/zero of=/dev/ad8s1.nop bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.835190 secs (109173470 bytes/sec) 0.000u 0.380s 0:09.98 3.8% 23+1315k 0+8192io 0pf+0w

あらら?

ということで、残念ながらあまり変化なしという結果になりました。

おまけ。

> sudo zpool replace zp ad8 > zpool status pool: zp state: DEGRADED 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 for 0h3m, 0.00% done, 2738h11m to go config:
    NAME           STATE     READ WRITE CKSUM
    zp             DEGRADED     0     0     0
      raidz2       DEGRADED     0     0     0
        ad14       ONLINE       0     0     0
        ad12       ONLINE       0     0     0
        ad10       ONLINE       0     0     0
        replacing  DEGRADED     0     0     0
          ad8/old  UNAVAIL      0     0     0  cannot open
          ad8      ONLINE       0     0     0  21.2M resilvered
        ad4        ONLINE       0     0     0
        ad6        ONLINE       0     0     0

errors: No known data errors

しばらくすると時間はおちついてくるけど、前回の記録は100hくらいかかってるので、今回もそのくらいかな。

タグ: FreeBSD Zfs