トップ > 興味のあること > コンピュータ > ハードウェア > パーソナルコンピュータ > 部品寄せ集め6号

2010年の部品寄せ集め6号

2010年1月30日

zfsで作った2TBの共有ストレージが残り300GBくらいになってきたので、 1.5TBのハードディスクを3台追加することにした。 1台単位で追加できればいいのだが、 raidz構成ではそれができないのだ。 なので、 もう一組raidzの組を作ってpoolに追加する形をとらざるを得ない。 モノはWestern DigitalのWD15EAR。 最近では珍しく5400r.p.m.で、どうやら省電力指向らしい。 1台9880円也。

手元にあったPCIバスのSATAインターフェイスを再利用したら、 なんと認識されない。 FreeBSD 8なら、デバイスファイルは自動的に作られるはずだし……。 ありがちな対応として、 差し込むスロットを変えてみた。 これがビンゴで、無事認識。 しかし、

 root@jupiter# atacontrol list
 ATA channel 0:
     Master:  ad0 <ST3120022A/8.54> ATA/ATAPI revision 6
     Slave:  acd0 <HITACHI DVD-ROM GD-7000/0017> ATA/ATAPI revision 0
 ATA channel 1:
     Master:      no device present
     Slave:       no device present
 ATA channel 2:
     Master:  ad4 <ST31000333AS/CC1H> Serial ATA II
     Slave:   ad5 <ST31000333AS/CC1H> Serial ATA II
 ATA channel 3:
     Master:  ad6 <ST31000333AS/CC1H> Serial ATA II
     Slave:       no device present
          

だったのだが、

 root@jupiter# atacontrol list
 ATA channel 0:
     Master:  ad0 <ST3120022A/8.54> ATA/ATAPI revision 6
     Slave:  acd0 <HITACHI DVD-ROM GD-7000/0017> ATA/ATAPI revision 0
 ATA channel 2:
     Master:  ad4 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
     Slave:       no device present
 ATA channel 3:
     Master:  ad6 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
     Slave:       no device present
 ATA channel 4:
     Master:  ad8 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
     Slave:       no device present
 ATA channel 5:
     Master:      no device present
     Slave:       no device present
 ATA channel 6:
     Master: ad12 <ST31000333AS/CC1H> SATA revision 2.x
     Slave:  ad13 <ST31000333AS/CC1H> SATA revision 2.x
 ATA channel 7:
     Master: ad14 <ST31000333AS/CC1H> SATA revision 2.x
     Slave:       no device present
          

になってしまった。 ad4 -> ad12、ad5 -> ad13、ad6 -> ad14になり、 新しく増やした分がad4、ad6、ad8というわけだ。 で、ad4とad6とad8がboundryから始まっていない、 みたいなエラーでzfsが止まってしまう。 どうしたものかと思っていたが、 とりあえずad6を抜いてみたらうまいこと認識してくれて

 root@jupiter# zpool status
   pool: pool
  state: ONLINE
 status: One or more devices could not be used because the label is missing or
         invalid.  Sufficient replicas exist for the pool to continue
         functioning in a degraded state.
 action: Replace the device using 'zpool replace'.
    see: http://www.sun.com/msg/ZFS-8000-4J
  scrub: none requested
 config:
 
         NAME        STATE     READ WRITE CKSUM
         pool        ONLINE       0     0     0
           raidz1    ONLINE       0     0     0
             ad4     UNAVAIL      0   537     0  corrupted data
             ad13    ONLINE       0     0     0
             ad14    ONLINE       0     0     0
 
 errors: No known data errors
          

となった。 指示に従って、zpool replaceを実行する。

 root@jupiter# zpool replace pool ad4
 root@jupiter# zpool status
   pool: pool
  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 0h0m, 0.00% done, 7350h56m to go
 config:
 
         NAME           STATE     READ WRITE CKSUM
         pool           DEGRADED     0     0     0
           raidz1       DEGRADED     0     0     0
             replacing  DEGRADED     0     0     0
               ad12     UNAVAIL      0 1.05K     0  corrupted data
               ad4      ONLINE       0     0     0  719K resilvered
             ad13       ONLINE       0     0     0  476K resilvered
             ad14       ONLINE       0     0     0  480K resilvered
 
 errors: No known data errors
          

zpool iostatで追いかけると一生懸命書き換えているのだが、 kernelレベルで処理しているせいか、topには全然出てこない。 30分かけて2.81%処理が終了し、残り予想時間が17時間32分。 うーん、3台すべて入れ替えるとなると、土日では終わらないな。 たださすがにRAIDZだけあって、 この状態でもファイルの読み書きは可能だ。

2010年1月31日

承前。 結局14時間20分かけてリビルドが終わった。

 root@jupiter# zpool status
   pool: pool
  state: ONLINE
  scrub: resilver completed after 14h20m with 0 errors on Sun Jan 31 08:57:43 2010
 config:
 
         NAME        STATE     READ WRITE CKSUM
         pool        ONLINE       0     0     0
           raidz1    ONLINE       0     0     0
             ad4     ONLINE       0     0     0  751G resilvered
             ad13    ONLINE       0     0     0  327M resilvered
             ad14    ONLINE       0     0     0  327M resilvered
 
 errors: No known data errors
          

外しておいたad6をつなげて、zpool replaceを実行。

 root@jupiter# zpool replace pool ad13 ad6
 root@jupiter# zpool status
   pool: pool
  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 for 0h0m, 0.00% done, 6387h11m to go
 config:
 
         NAME           STATE     READ WRITE CKSUM
         pool           ONLINE       0     0     0
           raidz1       ONLINE       0     0     0
             ad4        ONLINE       0     0     0  936K resilvered
             replacing  ONLINE       0     0     0
               ad13     ONLINE       0     0     0
               ad6      ONLINE       0     0     0  1.38M resilvered
             ad14       ONLINE       0     0     0  977K resilvered
 
 errors: No known data errors
          

6387時間とはまたすごい数字。 結局のところ、

 root@jupiter# zpool status
   pool: pool
  state: ONLINE
  scrub: resilver completed after 12h20m with 0 errors on Mon Feb  1 00:12:10 2010
 config:
 
         NAME        STATE     READ WRITE CKSUM
         pool        ONLINE       0     0     0
           raidz1    ONLINE       0     0     0
             ad4     ONLINE       0     0     0  318M resilvered
             ad6     ONLINE       0     0     0  751G resilvered
             ad14    ONLINE       0     0     0  318M resilvered
 
 errors: No known data errors
          

と今度は12時間20分で終了した。 続けて最後の3台目をリプレイスする。

 root@jupiter# zpool replace pool ad14 ad8
 root@jupiter# zpool status
   pool: pool
  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 for 0h0m, 0.00% done, 5473h31m to go
 config:
 
         NAME           STATE     READ WRITE CKSUM
         pool           ONLINE       0     0     0
           raidz1       ONLINE       0     0     0
             ad4        ONLINE       0     0     0  498K resilvered
             ad6        ONLINE       0     0     0  498K resilvered
             replacing  ONLINE       0     0     0
               ad14     ONLINE       0     0     0
               ad8      ONLINE       0     0     0  746K resilvered
 
 errors: No known data errors
          

2010年2月1日

今度は14時間かかった。

 jupiter# exec bash
 root@jupiter# zpool status
   pool: pool
  state: ONLINE
  scrub: resilver completed after 14h8m with 0 errors on Mon Feb  1 14:23:28 2010
 config:
 
         NAME        STATE     READ WRITE CKSUM
         pool        ONLINE       0     0     0
           raidz1    ONLINE       0     0     0
             ad4     ONLINE       0     0     0  317M resilvered
             ad6     ONLINE       0     0     0  317M resilvered
             ad8     ONLINE       0     0     0  751G resilvered
 
 errors: No known data errors
          

1TBのハードディスクを1.5TBのハードディスクに置き換えたのに、 全然容量が増えていない。

 root@jupiter# zpool list
 NAME   SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
 pool  2.73T  2.20T   540G    80%  ONLINE  -
 root@jupiter# df -hi
 Filesystem     Size    Used   Avail Capacity iused ifree %iused  Mounted on
 /dev/ad0s1a    496M    254M    203M    56%    1.8k   64k    3%   /
 devfs          1.0K    1.0K      0B   100%       0     0  100%   /dev
 /dev/ad0s1e    3.9G     36K    3.6G     0%      13  542k    0%   /tmp
 /dev/ad0s1f     96G    5.1G     83G     6%    208k   13M    2%   /usr
 /dev/ad0s1d    4.1G    1.3G    2.4G    36%     76k  489k   14%   /var
 pool           330G      0B    330G     0%       5  2.7M    0%   /pool
 pool/public    1.8T    1.5T    330G    82%     40k  2.7M    1%   /pool/public
          

で、お約束のexport、importを実行。

 root@jupiter# zpool export pool
 root@jupiter# zpool import pool
 root@jupiter# zpool list
 NAME   SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
 pool  4.09T  2.20T  1.89T    53%  ONLINE  -
 root@jupiter# df -hi
 Filesystem     Size    Used   Avail Capacity iused ifree %iused  Mounted on
 /dev/ad0s1a    496M    254M    203M    56%    1.8k   64k    3%   /
 devfs          1.0K    1.0K      0B   100%       0     0  100%   /dev
 /dev/ad0s1e    3.9G     36K    3.6G     0%      13  542k    0%   /tmp
 /dev/ad0s1f     96G    5.1G     83G     6%    208k   13M    2%   /usr
 /dev/ad0s1d    4.1G    1.3G    2.4G    36%     76k  489k   14%   /var
 pool           1.2T      0B    1.2T     0%       5   10M    0%   /pool
 pool/public    2.7T    1.5T    1.2T    55%     40k   10M    0%   /pool/public
          

とまあ無事増えた。 さらに今まで使っていた1TBのハードディスクを追加して、 4TB超えのRAIDストレージができあがり。

 root@jupiter# zpool add pool raidz ad12 ad13 ad14
 root@jupiter# zpool list
 NAME   SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
 pool  6.80T  2.20T  4.61T    32%  ONLINE  -
 root@jupiter# df -hi
 Filesystem     Size    Used   Avail Capacity iused ifree %iused  Mounted on
 /dev/ad0s1a    496M    254M    203M    56%    1.8k   64k    3%   /
 devfs          1.0K    1.0K      0B   100%       0     0  100%   /dev
 /dev/ad0s1e    3.9G     36K    3.6G     0%      13  542k    0%   /tmp
 /dev/ad0s1f     96G    5.1G     83G     6%    208k   13M    2%   /usr
 /dev/ad0s1d    4.1G    1.4G    2.4G    36%     76k  489k   14%   /var
 pool           3.0T      0B    3.0T     0%       5   25M    0%   /pool
 pool/public    4.5T    1.5T    3.0T    33%     40k   25M    0%   /pool/public
          

しかしこれ、バックアップどーしよう。

2010年2月5日

珍しく通信が途絶したと思ったら、kernel panicだった。 ハードの故障ではなくて一安心。

2010年4月11日

ここのところ、「kmemが足りない」といってkernelが落ちる。 メモリ3.6GBあって足りないということはないだろうと思ったが、 よく見ると電源が450Wしかない。 これでハードディスク7台の駆動は辛かろう。 ということで電源強化のついでにケースも新調した。 ホットスワップなベイが4つに、 横方向に抜き差しするシャドウベイが4つというケース。 電源は別売りなので、玄人志向の600Wもの(KRPW-V2-600W)にした。 電源ユニットからの排気温度がはっきりわかるぐらいに低くなっているのにびっくり。

ついでに、 ブート用のハードディスクも120GBのATAから80GBのSATAに変えて、 OSを再インストールした。 が、これが外れだったらしく、 bashをコンパイルしている間にwrite errorを頻発する。 少し様子を見て、ダメだったら新調するか……。

2010年4月13日

ハードディスクの接続先を変えたら、 嘘のようにwrite errorが出なくなった。 で、4GB載せたメモリを3GBくらい使えるようで、 何も指定しないとvm.kmem_size: 1123835904だった。 とりあえず、/boot/loader.conf でvfs.zfs.arc_max="512M"、 /etc/sysctl.conf でkern.maxvnodes=400000として様子を見てみよう。

 jupiter# atacontrol list
 ATA channel 0:
     Master: acd0 <HITACHI DVD-ROM GD-7000/0017> ATA/ATAPI revision 0
     Slave:       no device present
 ATA channel 2:
     Master:  ad4 <SAMSUNG HD080HJ/P/ZH100-51> SATA revision 2.x
     Slave:       no device present
 ATA channel 3:
     Master:  ad6 <ST31000333AS/CC1H> SATA revision 2.x
     Slave:       no device present
 ATA channel 4:
     Master:  ad8 <ST31000333AS/CC1H> SATA revision 2.x
     Slave:       no device present
 ATA channel 5:
     Master: ad10 <ST31000333AS/CC1H> SATA revision 2.x
     Slave:       no device present
 ATA channel 6:
     Master: ad12 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
     Slave:  ad13 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
 ATA channel 7:
     Master: ad14 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
     Slave:       no device present
          

2010年4月21日

パラメータを変更して、OSが落ちないかどうかモニタしてみた。 いまのところだいじょうぶそうだが、 smaba経由でraidzなZFSに連続して書き込むとload averagesが9を超えた。 今となってはなかなか見ない数字である。 同じZFSでも読み出しだったり、UFSなら読み書きしても1を超えない。

2010年5月12日

今のところ、/boot/loader.confに

 vm.kmem_size_max="1400M"
 vm.kmem_size="1400M"
 vfs.zfs.arc_max="500M"
          

としている。 これだと300MBくらいのファイルを、 2~3時間にわたって書き込んでも落ちないようだ。