1SSD+5HDD

パーツが揃ったので、早速ML115に組み込んで動かしてみました。

atacontrol list で見るとこんな感じ。

  Master: acd0 <TSSTcorp CD-ROM TS-H192C/B504> ATA/ATAPI revision 0
  Master:  ad4 <INTEL SSDSA2M040G2GC/2CV102HD> SATA revision 2.x
  Master:  ad6 <WDC WD20EARS-00MVWB0/50.0AB50> SATA revision 2.x
  Master:  ad8 <WDC WD20EARS-00MVWB0/51.0AB51> SATA revision 2.x
  Master: ad10 <WDC WD20EARS-00MVWB0/51.0AB51> SATA revision 2.x
  Master: ad16 <WDC WD20EARS-00MVWB0/51.0AB51> SATA revision 2.x
  Master: ad18 <WDC WD20EARS-00MVWB0/51.0AB51> SATA revision 2.x

gpart show で見るとこんな感じ。WD20EARSからはブートさせないので、パーティションタイプはMBRではなく、AFTに合わせるのに都合のいいGPTにしています。

いわゆるAFTを採用しているHDDは、従来の8倍にあたる4096byte単位でアクセスしないと本来の性能が出せないようです。従来通りの512byte単位でのアクセス要求が来た場合は、実際には4096byte単位で行うアクセスを、コントローラが疑似的に512byte単位に見せかける処理を行っているのですね。これが性能が出せない原因になっています。

ファイルシステムのinodeあたりの大きさは、最近の大容量HDDを使う場合は4096byteもしくはその倍数を使うことが多いので、ファイルシステムとしては4096byte単位で使われているように見えます。なのですが、パーティションの切れ目が4096byteの切れ目と合っていないと、常に「疑似的に合わせる処理」が動いてしまいます。

一般的に、HDDの先頭部分には、ファイルシステムとしては使えない予約領域があり、MBRスキームの場合はこれが63ブロック、GPTの場合は34ブロックであることが多いです。ここでいう「ブロック」は「セクタ」と同義で、1個のサイズが512byteであるため、512byte単位のアクセスなら気にしなくていいのですが、4096byte単位の場合は、パーティションを4096byteの切れ目、つまり8の倍数のブロックから始まるように切らないと、性能が出ないことになります。

このため、最初の数ブロックは未使用領域としてスキップして、MBRの場合は64、GPTの場合は40からパーティションを切り始めれば良さそうです。今回はGPTなので、スタートブロックとして40を指定し、実際にそのようになっています。

今回はGPTにしたので、以下はやや蛇足気味ですが、MBRの場合は、パーティション設定ツール(gpartやfdisk)が、パーティションの切れ目(スタートブロック)を、自動的に63の倍数に合わせてしまうようで、64を指定しても126(64より大きい最小の63の倍数)になってしまいます。これはおそらく、HDDの物理的な構成(63sectors/track)に影響を受けているのだと思われます。ですので、MBRの場合は最初のパーティションのスタートブロックを504(63と8の最小公倍数)にする形が良さそうです。

=>        34  3907029101  ad6  GPT  (1.8T)
          34           6       - free -  (3.0K)
          40  3907028992    1  freebsd-zfs  (1.8T)
  3907029032         103       - free -  (52K)

=>        34  3907029101  ad8  GPT  (1.8T)
          34           6       - free -  (3.0K)
          40  3907028992    1  freebsd-zfs  (1.8T)
  3907029032         103       - free -  (52K)

=>        34  3907029101  ad10  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907028992     1  freebsd-zfs  (1.8T)
  3907029032         103        - free -  (52K)

=>        34  3907029101  ad16  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907028992     1  freebsd-zfs  (1.8T)
  3907029032         103        - free -  (52K)

=>        34  3907029101  ad18  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907028992     1  freebsd-zfs  (1.8T)
  3907029032         103        - free -  (52K)

この5台でRAID-Zを組みます。せっかくSSDがあるので、その一部を ZIL(logs) の領域として使うようにしました。
zpool status で見るとこんな感じ。

  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz1    ONLINE       0     0     0
            ad6p1   ONLINE       0     0     0
            ad8p1   ONLINE       0     0     0
            ad10p1  ONLINE       0     0     0
            ad16p1  ONLINE       0     0     0
            ad18p1  ONLINE       0     0     0
        logs        ONLINE       0     0     0
          ad4s2     ONLINE       0     0     0

errors: No known data errors

SSDなad4を、2スライス+意図的な未使用領域に分けて、ad4s1はFreeBSDのシステム領域、ad4s2はZILのログ領域にしています。未使用領域を残しているのは、Trimが使えるようになるまで(正確にはFreeBSDのAHCIドライバがMCP55をサポートするまで)の対策のためです。

=>      63  78165297  ad4  MBR  (37G)
        63  58719969    1  freebsd  [active]  (28G)
  58720032   8388576    2  freebsd  [active]  (4.0G)
  67108608  11056752       - free -  (5.3G)

=>       0  58719969  ad4s1  BSD  (28G)
         0   1048576      2  freebsd-swap  (512M)
   1048576   4194304      1  freebsd-ufs  (2.0G)
   5242880  16777216      4  freebsd-ufs  (8.0G)
  22020096   8388608      5  freebsd-ufs  (4.0G)
  30408704   2097152      6  freebsd-ufs  (1.0G)
  32505856  26214113      7  freebsd-ufs  (12G)

WD20EARS は 2TB(≒1.8TiB) なので、この RAID-Z 全体としては 8TB(≒7.2TiB) ということになります。この zpool を、zfs でファイルシステムとして切り分けます。

REGZAから認識できるLANストレージは8つまでで、1つにつき4TiBとのことですので、まずここに4TiB。次にMySQLのDB領域に1TiB。私のHOME配下の作業領域に2TiBという感じで割り当てました。あと0.2TiBぐらい余っていますが、そもそもzfs/zpoolはそのあたりを上手に制御していて、はじめからきっちり分けておく必要はない(あとからの増減も簡単)ので、このへんはわりと適当です。

1 コメント

7990円 | 希望的観測2010年10月3日 2:23 AM

[…] 価格の話のついでに、自宅の 8TB RAID-Z サーバのパーツ購入時の価格をメモ的に。1,000円未満四捨五入で。(てきとう) […]

コメントを残す

あなたのコメント

*