2012年5月19日土曜日

ZFSの機能を試す

HP ProLiant MicroServerにZFS on Linuxをセットアップしたので、本格的に移行する前に機能を試してみました。
BIOSでSATAのDrive Write Cacheを有効にしないとWriteが遅すぎて駄目でしたので、この設定を有効にして試すことにします。

ワンセグ野郎とファイルサーバとして使う予定なので、容量の有効利用としてDeduplication、Compressionが使えればいいなと思っています。あとは、Shapshots、ディスク管理の柔軟性も魅力です。

ベンチマークには、bonnie++を使用することにしたので、最新版の1.03eをインストールします。
SPECファイルがついてるのでRPMでインストールできますが、書式が古いようなので修正する必要があります。
$ gzip -d bonnie++-1.03e.tgz
$ ls
bonnie++-1.03e.tar
$ rpmbuild -ta bonnie++-1.03e.tar
error: line 5: Unknown tag: Copyright: GPL
となるので、SPECファイルの5行目にあるCopyrightタグをLicenseに編集すればOKです。

次の環境でベンチマークを取ります。
$ cat /etc/redhat-release
CentOS release 6.2 (Final)
$ uname -mrsv
Linux 2.6.32-220.13.1.el6.x86_64 #1 SMP Tue Apr 17 23:56:34 BST 2012 x86_64
# zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dtpool  2.72T   136K  2.72T     0%  1.00x  ONLINE  -
# zpool status
  pool: dtpool
 state: ONLINE
 scan: resilvered 85.5K in 0h0m with 0 errors on Sat May 12 00:11:40 2012
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        ONLINE       0     0     0
          mirror-0                                    ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_ABCD1234-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_EFGH5678-part1  ONLINE       0     0     0

errors: No known data errors
まずは、Deduplicationなしで測定します。
# zfs set dedup=off dtpool

$ bonnie++
 ~ 略 ~
Version 1.03e       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
abcde.locald 15488M 45557  99 100987  32 68528  24 43526  93 219130  39 251.7   3
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 13168  96 +++++ +++ 14296  99 12609  99 +++++ +++ 14937  99
abcde.localdomain,15488M,45557,99,100987,32,68528,24,43526,93,219130,39,251.7,3,16,13168,96,+++++,+++,14296,99,12609,99,+++++,+++,14937,99
$
次に、Deduplicationありで測定します。
# zfs set dedup=on dtpool

$ bonnie++
 ~ 略 ~
Version 1.03e       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
abcde.locald 15488M 42486  97 31812  20 24758  31 43788  95 101344  13 213.5   3
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 14201  99 +++++ +++ 13835  98 12326  97 +++++ +++ 12738  98
abcde.localdomain,15488M,42486,97,31812,20,24758,31,43788,95,101344,13,213.5,3,16,14201,99,+++++,+++,13835,98,12326,97,+++++,+++,12738,98
$
Deduplicationを有効にすると、Writeが1/3、Readも1/2になるようです。
うーん、予想以上の劣化具合です。CPUが非力な性でしょうか、Compressionは諦めることにしました。

取り合えず、Deduplicationを有効にしてワンセグ野郎を動かすことにしました。負荷をかけて様子を見てみます。

ZFS on CentOS

HP ProLiant MicroServerにCentOS6をセットアップし、ZFS on Linuxをインストールしました。
ZFSのLinux実装には、FUSE版もありますが、今使用するならやっぱりカーネルモジュール版でしょう。

ということで、ZFS on Linuxから最新版のspl-0.6.0-rc8とzfs-0.6.0.rc8を使用しました。
インストールは、SPLZFSに書かれているとおりで問題なしです。
インストール後は、こんな感じになります。
$ grep zfs /proc/filesystems
nodev   zfs
$ lsmod |grep -E '(zfs|spl)'
zfs                  1075574  3
zcommon                42648  1 zfs
znvpair                47487  2 zfs,zcommon
zavl                    6925  1 zfs
zunicode              323120  1 zfs
spl                   256427  5 zfs,zcommon,znvpair,zavl,zunicode
zlib_deflate           21629  1 spl
準備ができたので、HDDを設定していきます。
パーティション情報を確認すると、こんな感じになります。
# parted -l
Error: /dev/sda: unrecognised disk label

Error: /dev/sdb: unrecognised disk label

Model: ATA VB0250EAVER (scsi)
Disk /dev/sdc: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
~ 略 ~
ODDポートに接続したHDDにOSをインストールしてあり/dev/sdcと認識されています。
/dev/sdaと/dev/sdbをZFSで使用するため、次のようにGNU partedでディスクラベルとパーティションを設定します。
# parted /dev/sda
GNU Parted 2.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(pqrted) print
Model: ATA ST3000DM001-9YN1 (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags

(parted) mkpart primary 1M 3000GB
(parted) print
Model: ATA ST3000DM001-9YN1 (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  3000GB  3000GB               primary

(parted) quit
Information: You may need to update /etc/fstab.

#
同様に/dev/sdbも設定しておきます。

さて、いよいよZFSの設定です。まずは、ストレージプールを作成します。
まずは、/dev/disk/by-id配下を参照して、/dev/sda1にリンクされている名前を調べます。
$ cd /dev/disk/by-id
$ ls -l scsi*part1
~ scsi-SATA_ST3000DM001-9YN_ABCD1234-part1 -> ../../sda1
~ scsi-SATA_ST3000DM001-9YN_EFGH5678-part1 -> ../../sdb1
~ scsi-SATA_VB0250EAVER_IJKL9012-part1 -> ../../sdc1
この情報を利用して、次のようにストレージプールを作成します。
# zpool create dtpool scsi-SATA_ST3000DM001-9YN_ABCD1234-part1
# zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dtpool  2.72T    79K  2.72T     0%  1.00x  ONLINE  -
# zpool status
  pool: dtpool
 state: ONLINE
 scan: none requested
config:

        NAME                                        STATE     READ WRITE CKSUM
        dtpool                                      ONLINE       0     0     0
          scsi-SATA_ST3000DM001-9YN_ABCD1234-part1  ONLINE       0     0     0

errors: No known data errors
dtpoolという名前で、ストレージプールが作成されたことが確認できます。
ストレージプールには、tankという名前がよく使われるようです。
次に、mirrorで使用するため、次のように/dev/sdb1をストレージプールのsda1にアタッチします。
# zpool attach dtpool scsi-SATA_ST3000DM001-9YN_ABCD1234-part1 scsi-SATA_ST3000DM001-9YN_EFGH5678-part1
# zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dtpool  2.72T   136K  2.72T     0%  1.00x  ONLINE  -
# zpool status
  pool: dtpool
 state: ONLINE
 scan: resilvered 85.5K in 0h0m with 0 errors on Sat May 12 00:11:40 2012
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        ONLINE       0     0     0
          mirror-0                                    ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_ABCD1234-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_EFGH5678-part1  ONLINE       0     0     0

errors: No known data errors
これで、2台構成のmirrorでストレージプールが作成されました。
ストレージプールがマウントされていることを確認できます。
# df -h
 :
dtpool                2.7T     0  2.7T   0% /dtpool
ストレージプールにZFSファイルシステムを作成します。
今回は、ワンセグ野郎のTSデータ格納用の領域を作成することにします。
# zfs create dtpool/ts
次のように、マウントポイントを/data/tsに変更してマウントし直します。
# mkdir /data
# zfs set mountpoint=/data/ts dtpool/ts
# df -h
 :
dtpool                2.7T  128K  2.7T   1% /dtpool
#
# zfs mount -a
# df -h
 :
dtpool                2.7T  128K  2.7T   1% /dtpool
dtpool/ts             2.7T  128K  2.7T   1% /data/ts
以上で/data/tsを使い始めることができます。
zpool、zfsコマンドは長くても数十秒でプロンプトが返ってくるし、mkfsする必要もないので楽々です。

初めて使うファイルシステムなので、少し実験してからデータ移行しようと思います。

2012年5月14日月曜日

HP ProLiant MicroServer購入

ワンセグ野郎を使い始めて3ヶ月、ファイルサーバとしても使っているPCなので、毎日ガリガリ書き込みをしているHDDの故障が心配になってきました。
という分けで、壊れる前にHP ProLiant MicroServerを購入して、移行することにしました。

構成は、次のような感じです。
  • HP ProLiant MicroServer (AMD Turion II NEON40L, HDD 250GB, メモリ2GB)
  • Seagate ST3000DM001 ×2個(3TB×2)
  • SanMax SMD-8G68EHP-13H-D ×1個(4GB×2)
HDD価格がまだ高いですが3TBのHDDを2台、ECCメモリ8GBで組むことにしました。
SATAカードと外付けHDDケースで増設も考えたのですが、結局新しくPCを買ったほうが安く上がるという。
CentOS+ZFSでセットアップする予定です。

2012年5月3日木曜日

ISDB-T Digital TV Receiver 再び

DealExtremeから購入していた予備用のISDB-T Digital TV Receiverの動作確認をしました。
しばらく使用しているとデータが取れなくなる問題の件で、故障を疑って追加購入したものの、物が届くまでの間に対処法を見つけたので開梱だけして放っておいた物です。

追加購入した全てがSianoチップでしたが、Nova BとNiceが混在してました。
lsusbの結果は、次のとおり。
Bus 002 Device 003: ID 187f:0201 Siano Mobile Silicon Nova B
Bus 002 Device 004: ID 187f:0202 Siano Mobile Silicon Nice
初回購入時は、たまたま全てNiceだったんでしょうかね。
何れにせよ、使えるチップだったのでよかった。