体調が悪くてあまり難しいことを考えられない時には、こういう単純作業にもってこい。というわけで、 Ubuntu 9.10 とドライブドアで、型落ちの MacBook Pro 2,2 を 8TB RAID-5 Serverに仕立てたので備忘録。

理由

2TBのHDDが15kで売ってたらいつの魔に買っていたので。

ここではなりゆき上お古の MacBook Pro 2,2 を使っているが、port multiplier 対応の e-SATA 付きの Ubuntu BOX ならなんでも使えるはず。

DSCF5311

材料


HDS722020ALA330 x 6
Amazonでは2万円ちょっと超えてますが、私はビックカメラで買って1万5000円台。1本は予備
EX35ES5 x 1
これに HDS722020ALA330 を詰め込みます
34REX-EX30S x 1
現時点において、Mac Pro以外のMacにeSataを持たせる唯一の手段が ExpressCard/34 経由。そのこともあってかちょっと高め。でも1万円しない

OSの選択 - Ubuntuな理由

Mac OS X
残念ながら、Software RAID 5 がない。 RAID 0/1/10 であればこれが一番楽だと思う
FreeBSD
実は一番使いたかったのがこれ。本当は RAIDZ にしたかったのだけど、ExpressCard を指すと MacBook 内蔵HDDが ad5 から ad9 になり、そしてドライブドア(ベタな名前だなあ)の HDD が ad6 から ad10 と認識され、内蔵HDD が見えなくなるというのでは実用にはならない。
一応 PXE Boot でなんとかと動くようにもしてみたが、ファイルサーバーのために NetBoot サーバーが必要なんてわけわかんないし。
Ubuntu
mdadm が RAID 5 対応している。 Kernel の remake は不要
Windows
論外

というわけであっさり Ubuntu に決定。余談であるが、蓋を閉じたまま運用できるのもうれしい。OS Xでは外部ディスプレイとキーボードにつないでない限り問答無用でsleepしてしまうので。

レシピ

  1. ふつうに Ubuntu-9.10-desktop-amd64 をインストール

    いちおうdual bootにしてみたが、シングルでもよかったかも。

  2. mdadmを以下のとおりインストール
    sudo apt-get install mdadm
    
  3. RAID 5を構築
    sudo mdadm --create --verbose --assume-clean /dev/md0 \
      --level=5 --raid-devices=5 \
      /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf 
    

    よほどのことがない限り、--assume-cleanを指定すること。さもないと必要もないのにRAIDを再構築しようとしやがります。

           When creating a RAID5 array, mdadm will automatically create a degraded
           array  with  an  extra spare drive.  This is because building the spare
           into a degraded array is in general faster than resyncing the parity on
           a  non-degraded,  but not clean, array.  This feature can be overridden
           with the --force option.
    

    なんでこんな仕様になっているか、謎。そして--forceも間違い。これまたresyncしようとしやがります。

  4. 以下のようにして様子を確認
    sudo mdadm --detail /dev/md0

    こんな感じになっていればおK

    /dev/md0:
            Version : 00.90
      Creation Time : Thu Jan  7 01:11:48 2010
         Raid Level : raid5
         Array Size : 7814057984 (7452.07 GiB 8001.60 GB)
      Used Dev Size : 1953514496 (1863.02 GiB 2000.40 GB)
       Raid Devices : 5
      Total Devices : 5
    Preferred Minor : 0
        Persistence : Superblock is persistent
    
        Update Time : Sun Jan 10 01:44:50 2010
              State : clean
     Active Devices : 5
    Working Devices : 5
     Failed Devices : 0
      Spare Devices : 0
    
             Layout : left-symmetric
         Chunk Size : 64K
    
               UUID : deadbeef...
             Events : 0.213283
    
        Number   Major   Minor   RaidDevice State
           0       8       16        0      active sync   /dev/sdb
           1       8       32        1      active sync   /dev/sdc
           2       8       48        2      active sync   /dev/sdd
           3       8       64        3      active sync   /dev/sde
           4       8       80        4      active sync   /dev/sdf
    
  5. 設定ファイルの作成
    sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf

    とした後、適当に編集。metadata=の下りは削除した方がよい。私は以下のようにした。

    DEVICE /dev/sd[bcdef]
    ARRAY /dev/md0 level=raid5 num-devices=5 UUID=deadbeef...
    
  6. newfs
    newfs -t ext4 /dev/md4

    ZFSと違って、こちらは newfs が必要。むちゃくちゃ時間がかかる。10分以上

    ext4 で本当によかったのかな、ま、いっか。

  7. テスト
  8. mkdir /drivedoor
    mount -t ext4 /dev/md0 /drivedoor
    
  9. /etc/fstabに登録
  10. /dev/md0 /drivedoor ext4 defaults 0 0

性能

すばらしい。Software RAID とは思えない。

Write
dankogai@mbp22-ubuntu:~$ dd if=/dev/zero of=/drivedoor/8tb/4gb.img bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 43.5056 s, 98.7 MB/s
Read
dankogai@mbp22-ubuntu:~$ dd if=/drivedoor/8tb/4gb.img of=/dev/null bs=1M
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 38.4559 s, 112 MB/s

NASとして使う場合、これ以上の性能は望んでも仕方がない。なにせGbEが真っ黒になるのだから。

ファイル共有

いろいろ試してみたのだが、結局 netatalk で AFP に落ち着いた。

SMB
Ubuntu、というか Gnome ではこれが標準のようで、GUIで設定できたりもするのだが、いかんせん smbd が重い。これがCPUを食いつぶす。
SFTP
openssh-serverさえ入れておけばSFTPが使えるので実は一番楽ではあるが、OS XはGUI未対応(sftpコマンドは標準である)。逆に Ubuntu から OS X のファイルにアクセスするには、これが Protocol of Choice
AFP
軽い。速い。ファイル名問題も皆無

というわけで netatalk を

apt-get install netatalk

した後、AppleTalkを殺す。欲しいのはAFPというファイル共有プロトコルであって、AppleTalkというネットワークプロトコルではないのだし。

--- /etc/default/netatalk.dist	2010-01-09 09:19:29.957065966 +0900
+++ /etc/default/netatalk	2010-01-09 09:20:07.117079593 +0900
@@ -29,8 +29,8 @@
 AFPD_GUEST=nobody
 
 # Set which daemons to run (papd is dependent upon atalkd):
-ATALKD_RUN=yes
-PAPD_RUN=yes
+#ATALKD_RUN=yes
+#PAPD_RUN=yes
 CNID_METAD_RUN=no
 AFPD_RUN=yes
 TIMELORD_RUN=no

としてから、

sudo sh /etc/init.d/netatalk restart

で、性能だが、Ubuntuでローカルに試したときとほとんど同じ性能が出ている。

Write
% dd if=/dev/zero of=/Volumes/8tb@mbp22-ubuntu/4gb.img bs=1048576 count=4096
4096+0 records in
4096+0 records out
4294967296 bytes transferred in 54.775344 secs (78410595 bytes/sec)
Read
% dd if=/Volumes/8tb@mbp22-ubuntu/4gb.img of=/dev/null bs=1048576 count=4096
4096+0 records in
4096+0 records out
4294967296 bytes transferred in 49.609720 secs (86575117 bytes/sec)

ちなみに iMac 27インチの内蔵HDD はローカルでこう。

Write
% dd if=/dev/zero of=4gb.img bs=1048576 count=4096
4096+0 records in
4096+0 records out
4294967296 bytes transferred in 39.975188 secs (107440828 bytes/sec)
Read
% dd if=4gb.img of=/dev/null bs=1048576
4096+0 records in
4096+0 records out
4294967296 bytes transferred in 37.424465 secs (114763626 bytes/sec)

ほとんど変わらない。そして MacBook の内蔵HDDより確実に高速。

まとめ

10万円ちょっとで 8TB の RAID5 Server を持てるとは、おそろしい時代になったものである。しかしふと自分のファイルを見ていると、 iPhone の母艦であり、 iPhoto のマスターでもある私の MacBook に入っているファイルはせいぜい 40GB ほど。「なくしてはならない」データはこれくらいしかない。後は仮想マシンの仮想ディスクだの、過去のマシンたちのフルバックアップだの、なくしたらなくしたで何とかなるものばかり。

そして、パソコンの性能はすでに「使いこなす」という点では型落ちの MacBook Pro、すなわち3年以上前から飽和しているといってもいい。NICはGbEで足りてしまう、というかUSB 2.0よりずっと高速で、それすら「火を噴く」のはバックアップの時ぐらいで、ネットサーフィンなら1080pの動画を見る時ですら100Mbpsでおつりがどっさり来る。そして4GiBというのがCPUの32/64bit境界であるように、2TiB というのは 512 Byte/Sector で 32bit Addressing する場合の限界でもある(29 * 232 = 241 = 2 * (210)4)。

そう考えると、単独容量 2TB の時代というのは、相当長く続くのではないだろうか。2.5インチまで2TBになっても、3.5インチが容量を増やすのではなく、むしろ3.5インチがフェーズアウトしていくのかも知れない。それより容量が欲しい人はRAIDでも組め、と。

となると、RAIDを組むという作業が「普通化」する可能性はかなりあるかも知れない。そんな時こんな記事が役に立ってくれたら幸い、という落ちがついたところで本entryのまとめとしましょう。

Dan the Man with Too Many Platforms to Babysit

追記:2010.07.27

http://ht.ly/2gEvG の鯖を #ubuntu 10.04 LTS にうpぐれーどだん。留意点二カ所。最初の再起動で mdadm が停止状態→一度だけ手動で mdadm --runする;netatalkがへくる→.AppleDBと.AppleDesktopを削除less than a minute ago via HootSuite