2013年11月8日金曜日

(FreeBSD) 4KセクタHDDでは、ZFSのzpoolをashift 12にすべきらしい

先日、

(FreeBSD) zpool replaceするつもりがzpool addしてしまって、ゲゲゲな結果になった

という、うっかり、をしてしまいまして、全ファイルを別のZFSに待避して、プールを作り直し、ということになりました。復旧するまで、3日かかりました[E:shock]



そんなわけで、プールを作り直したのですが・・・



プールを作って
# zpool create storage raidz ada1 ada2 ada3 ada4



zdbというコマンドを実行
# zdb
storage:
    version: 28
    name: 'storage'
    state: 0
    txg: 4
    pool_guid: ほにゃらら
    hostid: ほにゃらら
    hostname: 'ほにゃらら'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: ほにゃらら
        create_txg: 4
        children[0]:
            type: 'raidz'
            id: 0
            guid: ほにゃらら
            nparity: 1
            metaslab_array: 30
            metaslab_shift: 36
            ashift: 9
以下省略



というように、zdbコマンドで見ると、「ashift: 9」と出てきます。



しばらく前に知ったことなんですが、従来の512バイトセクタのハードディスクではこれでよいが、4K(4096バイト)セクタのハードディスクでは、ashiftは12にした方が性能がよくなるそうです。



2の9乗は512、2の12乗は4096ですが、ashift 12にしておくと、ZFSが4096バイト単位で、ディスクを扱ってくれるようになる、とかなんとかいう話でした



使っている2TBディスクなので、せっかくの機会だし、ashift 12にしたい!ということで、ネット検索して見つけた情報のとおりにやってみました。



ちなみに、9.2-RELEASEにアップデートしても ashift: 9 でした。



作ったばかりですが、プールを削除
# zpool destroy storage



gnopというコマンドを実行
# gnop create -S 4096 /dev/ada1
# gnop create -S 4096 /dev/ada2
# gnop create -S 4096 /dev/ada3
# gnop create -S 4096 /dev/ada4



gnopってコマンドを初めて知りました。



本物のハードディスクは
# diskinfo /dev/ada1
/dev/ada1       512     2000398934016   3907029168      4096    0       387602116       63
というように、512バイトセクタになっていますが、
gnopで作ったほうのディスク(ada1.nop)は
# diskinfo /dev/ada1.nop
/dev/ada1.nop   4096    2000398934016   488378646       0       0       484502 16       63
というように、4096バイトセクタに見せかけることができる、という仕組みらしいです。



そしてプールを作成
# zpool create storage raidz ada1.nop ada2.nop ada3.nop ada4.nop



zdbで確認
# zdb
storage:
    version: 5000
    name: 'storage'
    state: 0
    txg: 4
    pool_guid: ほにゃらら
    hostid: ほにゃらら
    hostname: 'ほにゃらら'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: ほにゃらら
        create_txg: 4
        children[0]:
            type: 'raidz'
            id: 0
            guid: ほにゃらら
            nparity: 1
            metaslab_array: 33
            metaslab_shift: 36
            ashift: 12
以下省略



というように、今度はashiftが12になりました。



# zpool list -v
NAME           SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
storage       7.25T  1.10M  7.25T     0%  1.00x  ONLINE  -
  raidz1      7.25T  1.10M  7.25T         -
    ada1.nop      -      -      -         -
    ada2.nop      -      -      -         -
    ada3.nop      -      -      -         -
    ada4.nop      -      -      -         -



# zpool status
  pool: storage
state: ONLINE
  scan: none requested
config:



        NAME          STATE     READ WRITE CKSUM
        storage       ONLINE       0     0     0
          raidz1-0    ONLINE       0     0     0
            ada1.nop  ONLINE       0     0     0
            ada2.nop  ONLINE       0     0     0
            ada3.nop  ONLINE       0     0     0
            ada4.nop  ONLINE       0     0     0



errors: No known data errors



プールができてしまった後は、「なんとか.nop」という変換する仕組みは不要らしいので、もとのada1などに戻します。



こんな感じ。



いったんプールをexportします。
# zpool export storage



プールが見えなくなります。
# zpool list
no pools available



「なんとか.nop」をやめます。
# gnop destroy ada1.nop ada2.nop ada3.nop ada4.nop



プールをimportします。
# zpool import storage



プールが見えるようになります。
# zpool status
  pool: storage
state: ONLINE
  scan: none requested
config:



        NAME        STATE     READ WRITE CKSUM
        storage     ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0
            ada3    ONLINE       0     0     0
            ada4    ONLINE       0     0     0



errors: No known data errors



というわけで、ada1とかに戻りました。



一応確認。



# zdb
storage:
    version: 5000
    name: 'storage'
    state: 0
    txg: 25
    pool_guid: ほにゃらら
    hostid: ほにゃらら
    hostname: 'ほにゃらら'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: ほにゃらら
        children[0]:
            type: 'raidz'
            id: 0
            guid: ほにゃらら
            nparity: 1
            metaslab_array: 33
            metaslab_shift: 36
            ashift: 12
以下省略。



ashiftは12になってます。



さて、これで速くなったのかどうか…計測していないのでわかりません。







20131107







0 件のコメント:

コメントを投稿