Archive for the 'opensolaris' Category

NASの玉交換

Posted by ゆのじ on 8月 2nd, 2009

再構築中......

一時期さんざん記事を書いたNASだが、ついに1発トラブルが起きた。アクセスランプがつきっぱなしになっていたので見てみると、

  pool: tank
 state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
        repaired.
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          raidz2    DEGRADED     0     0     0
            c5t0d0  ONLINE       0     0     0
            c6t0d0  FAULTED      8   205     0  too many errors
            c5t1d0  ONLINE       0     0     0
            c6t1d0  ONLINE       0     0     0
            c5t2d0  ONLINE       0     0     0
            c6t2d0  ONLINE       0     0     0
            c5t3d0  ONLINE       0     0     0
            c6t3d0  ONLINE       0     0     0
        spares
          c3d1      AVAIL

とのこと。何が原因かわからないが、とりあえず書き込みエラーが頻発している玉(HDD/c6t6d0)があるようだ。とりあえずこちらを参考にしつつ、下記のように作業。ホットスワップ非対応であればいったんシャットダウンしてからHDDを取り替え、4の手順からやれば良いはず。

1)玉を外す準備

cfgadmコマンド(引数なし)でデバイス一覧が出るので、その中から問題の起きている玉を見つけて、unconfigureする。unconfigureしたらcfgadmで一覧を確認して、unconfigure状態になっていることを確認。

root@melongena:~# cfgadm
Ap_Id                          Type         Receptacle   Occupant     Condition
sata4/0::dsk/c5t0d0            disk         connected    configured   ok
sata4/1::dsk/c5t1d0            disk         connected    configured   ok
sata4/2::dsk/c5t2d0            disk         connected    configured   ok
sata4/3::dsk/c5t3d0            disk         connected    configured   ok
sata5/0::dsk/c6t0d0            disk         connected    configured   ok
sata5/1::dsk/c6t1d0            disk         connected    configured   ok
sata5/2::dsk/c6t2d0            disk         connected    configured   ok
sata5/3::dsk/c6t3d0            disk         connected    configured   ok
~略~
root@melongena:~# cfgadm -c unconfigure sata5/0::dsk/c6t0d0
Unconfigure the device at: /devices/pci@0,0/pci8086,244e@1e/pci1095,3124@1:0
This operation will suspend activity on the SATA device
Continue (yes/no)? yes
root@melongena:~# cfgadm
Ap_Id                          Type         Receptacle   Occupant     Condition
sata4/0::dsk/c5t0d0            disk         connected    configured   ok
sata4/1::dsk/c5t1d0            disk         connected    configured   ok
sata4/2::dsk/c5t2d0            disk         connected    configured   ok
sata4/3::dsk/c5t3d0            disk         connected    configured   ok
sata5/0                        disk         connected    unconfigured ok
sata5/1::dsk/c6t1d0            disk         connected    configured   ok
sata5/2::dsk/c6t2d0            disk         connected    configured   ok
sata5/3::dsk/c6t3d0            disk         connected    configured   ok
~略~

2)玉を外す

おもむろに玉を外して予備の玉に付け替えて元の位置に挿入。cfgadmではemptyになる。

root@melongena:~# cfgadm
Ap_Id                          Type         Receptacle   Occupant     Condition
sata4/0::dsk/c5t0d0            disk         connected    configured   ok
sata4/1::dsk/c5t1d0            disk         connected    configured   ok
sata4/2::dsk/c5t2d0            disk         connected    configured   ok
sata4/3::dsk/c5t3d0            disk         connected    configured   ok
sata5/0                        sata-port    empty        unconfigured ok
sata5/1::dsk/c6t1d0            disk         connected    configured   ok
sata5/2::dsk/c6t2d0            disk         connected    configured   ok
sata5/3::dsk/c6t3d0            disk         connected    configured   ok
~略~

3)再度玉を認識させる

cfgadmで該当のポートにHDDが認識され、unconfigure状態になっていることを確認したら、1の手順と同じく、今度はconfigureする。

root@melongena:~# cfgadm
Ap_Id                          Type         Receptacle   Occupant     Condition
sata4/0::dsk/c5t0d0            disk         connected    configured   ok
sata4/1::dsk/c5t1d0            disk         connected    configured   ok
sata4/2::dsk/c5t2d0            disk         connected    configured   ok
sata4/3::dsk/c5t3d0            disk         connected    configured   ok
sata5/0                        disk         connected    unconfigured unknown
sata5/1::dsk/c6t1d0            disk         connected    configured   ok
sata5/2::dsk/c6t2d0            disk         connected    configured   ok
sata5/3::dsk/c6t3d0            disk         connected    configured   ok
~略~
root@melongena:~# cfgadm -c configure sata5/0::dsk/c6t0d0
root@melongena:~# cfgadm
Ap_Id                          Type         Receptacle   Occupant     Condition
sata4/0::dsk/c5t0d0            disk         connected    configured   ok
sata4/1::dsk/c5t1d0            disk         connected    configured   ok
sata4/2::dsk/c5t2d0            disk         connected    configured   ok
sata4/3::dsk/c5t3d0            disk         connected    configured   ok
sata5/0::dsk/c6t0d0            disk         connected    configured   ok
sata5/1::dsk/c6t1d0            disk         connected    configured   ok
sata5/2::dsk/c6t2d0            disk         connected    configured   ok
sata5/3::dsk/c6t3d0            disk         connected    configured   ok
~略~

4)zfsに玉が交換されたことを通知する

これで、後は勝手にresilver(再構築)が行われる。うちの場合は1.5%ほど進んだ状態で残り5h28mと出た。うちはPCIバスに4ポートSATAカードを2枚挿して、PCIバスが律速になってしまっているので特にひどく遅いが、そうでなくてもそこそこ時間がかかる。

暇にあかして時々statusを見ていたら、ぱらぱらとチェックサムエラーがほかのドライブで出たりしていることに気がついた。ケーブルの品質がやたら悪い(1本100円のケーブルが混じっている)のが原因なのだろうと思うが、本当に駄目なケーブルは以前さんざんひどい目にあって抜いてあるのでキニシナイことにする(真似してはいけませんw)。パリティが二重にあることも、この辺を深く気にしなくてすむ理由。

root@melongena:~# zpool replace tank c6t0d0
root@melongena:~# zpool status
~略~
  pool: tank
 state: DEGRADED
 scrub: scrub in progress for 0h0m, 0.00% done, 378h41m to go
config:

        NAME              STATE     READ WRITE CKSUM
        tank              DEGRADED     0     0     0
          raidz2          DEGRADED     0     0     0
            c5t0d0        ONLINE       0     0     0
            replacing     DEGRADED     0     0 5.40K
              c6t0d0s0/o  FAULTED      8   205     0  too many errors
              c6t0d0      ONLINE       0     0     0
            c5t1d0        ONLINE       0     0     0
            c6t1d0        ONLINE       0     0     0
            c5t2d0        ONLINE       0     0     0
            c6t2d0        ONLINE       0     0     0
            c5t3d0        ONLINE       0     0     0
            c6t3d0        ONLINE       0     0     0
        spares
          c3d1            AVAIL

errors: No known data errors

外した玉は別の機械で一日ほどエラーチェックし続けて、問題があるようだったら購入した店へ持ち込もうと思う。

追記:

翌日見てみたら作業が終わっていた。どーもチェックサムエラーがぽちぽち出ている。次のメンテナンス時にはケーブルを変えた方がいいかもしれない。。

root@melongena:~# zpool status
~略~
  pool: tank
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-9P
 scrub: resilver completed after 5h20m with 0 errors on Sun Aug  2 19:52:20 2009
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz2    ONLINE       0     0     0
            c5t0d0  ONLINE       0     0     5  108K resilvered
            c6t0d0  ONLINE       0     0     0  178G resilvered
            c5t1d0  ONLINE       0     0     0
            c6t1d0  ONLINE       0     0     0
            c5t2d0  ONLINE       0     0     0
            c6t2d0  ONLINE       0     0     0
            c5t3d0  ONLINE       0     0     5  108K resilvered
            c6t3d0  ONLINE       0     0     3  64.5K resilvered
        spares
          c3d1      AVAIL

errors: No known data errors

新NAS落ち着いた

Posted by ゆのじ on 5月 21st, 2009

new NAS

先日から延々5ポスト(コレ含めて6ポスト)もかけたNASだが、ついに落ち着いた。先日からまた延々zpool scrubを掛けて掛けてエラーが出たらケーブルを取り替えての繰り返し、結局3本の不良ケーブルが混じっていたようであった。

結局さんざん苦労した代償として、下記のことに注意しておかねばならない、という教訓を得た。

  • NASとするコンピュータのメモリはmemtest86などのツールできっちりテストしておく。出来れば(というかほぼMUST)ECC付きメモリにすること。
  • SATAケーブルは良質な物を選ぶこと。1本100円のような安売りのものを買わないこと。(大変時間を無駄にした・・・)
  • 構築後、きっちり負荷を掛けたり引っこ抜いたりしてテストすること。データを失ってからでは遅い。(サーバなら最低数日のエージングは当然だが)

特に1点目のメモリ問題は怖い。私の場合、memtest86で1周できないメモリが刺さっていたがために、zfsのraidz2領域すべてが完全に修復不能なレベルでつぶれてしまった。特に酷いメモリをつかんでしまったのだろうとは思うが、同じことをクリティカルな要件で起こしてしまってはしゃれにならない。家庭用であったとしても、データを失ってしまえばもうそのデータは二度と帰ってこない。そのことを考えたら一晩memtestを走らせておくくらい軽いものだろう。

最終的にかかったコストは、HDDが予備含め10本で75,000円ほど、M/B、メモリ、CPUで20,000円ほど、SATA I/Fが2枚で15,000円ほど、ケースが12,000円ほど(これは無茶苦茶な破格だった)と、ケースのファンがうるさすぎて全部交換したので5000円ほど、合計で127,000円程度(システム用HDDはジャンク箱に突っ込んであった160GBを流用)で収まった。ダブルパリティで保護された6TBの領域を持つNASとしてはきわめて安価だといえよう。

次は各種サービスをsolaris containerで動かしていこうと思う。opensolarisのポテンシャルの高さに、気がついたら全然NASでなくなりつつある。

zfsはやはり素晴らしいかも

Posted by ゆのじ on 5月 10th, 2009

これまでのポストの続き。引き続きデータを大量に突っ込んだりしてテストしているのだが、大量データ投入中、下記のようなエラーが連続して発生した。

-略-
May 10 07:23:09 melongena       Error for Command: write(10)               Error Level: Retryable
May 10 07:23:09 melongena scsi: [ID 107833 kern.notice]         Requested Block: 52263759                  Error Block: 52263807
May 10 07:23:09 melongena scsi: [ID 107833 kern.notice]         Vendor: ATA                                Serial Number:
May 10 07:23:09 melongena scsi: [ID 107833 kern.notice]         Sense Key: Aborted_Command
May 10 07:23:09 melongena scsi: [ID 107833 kern.notice]         ASC: 0x8 (LUN communication failure), ASCQ: 0x0, FRU: 0x0
May 10 07:23:10 melongena scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci8086,244e@1e/pci1095,3124@0/disk@0,0 (sd1):
May 10 07:23:10 melongena       Error for Command: write(10)               Error Level: Retryable
May 10 07:23:10 melongena scsi: [ID 107833 kern.notice]         Requested Block: 52271544                  Error Block: 52271752
May 10 07:23:10 melongena scsi: [ID 107833 kern.notice]         Vendor: ATA                                Serial Number:
May 10 07:23:10 melongena scsi: [ID 107833 kern.notice]         Sense Key: Aborted_Command
-略-

このエラーを調べると、一般的にはディスクが壊れる前兆として現れるらしいのだが、formatでディスクまるごとスキャンしてもエラーなし。

root@melongena:~# format	
Searching for disks...done


AVAILABLE DISK SELECTIONS:
       0. c3d0 
          /pci@0,0/pci-ide@1f,2/ide@0/cmdk@0,0
       1. c5t0d0 
          /pci@0,0/pci8086,244e@1e/pci1095,3124@0/disk@0,0
       2. c5t1d0 
          /pci@0,0/pci8086,244e@1e/pci1095,3124@0/disk@1,0
       3. c5t2d0 
          /pci@0,0/pci8086,244e@1e/pci1095,3124@0/disk@2,0
       4. c5t3d0 
          /pci@0,0/pci8086,244e@1e/pci1095,3124@0/disk@3,0
       5. c6t0d0 
          /pci@0,0/pci8086,244e@1e/pci1095,3124@1/disk@0,0
       6. c6t1d0 
          /pci@0,0/pci8086,244e@1e/pci1095,3124@1/disk@1,0
       7. c6t2d0 
          /pci@0,0/pci8086,244e@1e/pci1095,3124@1/disk@2,0
       8. c6t3d0 
          /pci@0,0/pci8086,244e@1e/pci1095,3124@1/disk@3,0
Specify disk (enter its number): 1
selecting c5t0d0
[disk formatted]
/dev/dsk/c5t0d0s0 is part of active ZFS pool tank. Please see zpool(1M).


FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        !     - execute , then return
        quit
format> analyze


ANALYZE MENU:
        read     - read only test   (doesn't harm SunOS)
        refresh  - read then write  (doesn't harm data)
        test     - pattern testing  (doesn't harm data)
        write    - write then read      (corrupts data)
        compare  - write, read, compare (corrupts data)
        purge    - write, read, write   (corrupts data)
        verify   - write entire disk, then verify (corrupts data)
        print    - display data buffer
        setup    - set analysis parameters
        config   - show analysis parameters
        !   - execute  , then return
        quit
analyze> read
Ready to analyze (won't harm SunOS). This takes a long time,
but is interruptable with CTRL-C. Continue? yes

        pass 0
   1953525042

        pass 1
   1953525042

Total of 0 defective blocks repaired.

もしかするといくつか前のポストに書いた、si3124ドライバに重負荷をかけると割り込みを落とす、という問題が顕在化しただけかもしれないが、zpool scrubをかけても異常は検出されなかったのでとりあえず放置することにする。

余談だが、zfsの何がいいかって、zfs情報をexportせずにOSそのものをクリーンインストールしてやったあと、zpool import一発でアレイ構成情報をすべて復旧できること。ファイルも失われないし、アレイの設定情報をメモする必要もない。繋がっているドライブの位置が変わっても自動的に認識してくれる。つまり私のような人間には大変向いているファイルシステムだということだ。素晴らしい。

続く。