netatalk シリーズ完結編(何)。
tmpfs に CNID を置いて定期的にコピー取るようにしたものの、やっぱり精神衛生上よろしくないので社会人らしくお金の力に頼ることにしました(ぇー。
HP MicroServer N54L には標準では HDD 用の SATA が 4 本と拡張用の eSATA が 1 本と光学ディスク用の SATA が 1 本ついててるんだけど、 eSATA と光学ドライブ用の SATA は内部的には IDE でそんなに速くないみたい。今まではブート領域はそんなにスピード求められないしってこともあって内部に生えてる USB 2.0 スロット(?)に USB メモリ刺してそこからブートさせてたんだけど、それをどこからブートさせようかなってのが今回のポイント。
もともとデータ置き場なので HDD 用の SATA を使ってブートは論外として、内部的に IDE らしい eSATA や光学ドライブ用 SATA を使うのも嬉しくない。となると 1 本余ってる(そのうち RAC 買って刺すつもりだったんだけどね…) PCI-e を使うべきでしょうってことで見つけたのが玄人志向の mSATA3I-PCIe ってブツ。ハーフハイトのカードだけど SATA3 1 本と mSATA 1 本が繋がる上に amazon.co.jp で 1,197 と異常に安い(今見たら取扱いできないとかになってた)。
気になるのは、これが積んでる Marvell 88SE9130 ってチップが FreeBSD 10-R で使えるかってところで、 FreeBSD 10.0-RELEASE Hardware Notes を眺めると Marvell 88SE61xx は見つかるんだけど、それ以外はヒットしない…。でもめげずに sys/dev/ahci/ahci.c を眺めると
{0x91301b4b, 0x00, "Marvell 88SE9130", AHCI_Q_NOBSYRES|AHCI_Q_ALTSIG},
と明確に記載があるのでクリックしても大丈夫そうです。
あとは繋げるディスクですが、 SSD なら mSATA でも速かろうとビミョーにみみっちい気持ちでヤフオクをウォッチし続けること 1 か月。サムソン製の MZ-MPC0640 って 64GB の mSATA を 4,280 で落札することに成功しました。
入手してしまえばあとは繋げて、 USB メモリの内容をコピーして、 SSD からブートするだけ。ということでまずは繋げて boot すると
ahci0: <Marvell 88SE9130 AHCI SATA controller> port 0xd800-0xd807,0xd400-0xd403,0xd000-0xd007,0xc800-0xc803,0xc400-0xc40f mem 0xfe8ff800-0xfe8fffff irq 18 at device 0.0 on pci2 ahci0: AHCI v1.20 with 8 6Gbps ports, Port Multiplier not supported ahci0: quirks=0x800<ALTSIG> ahcich0: <AHCI channel> at channel 0 on ahci0 ahcich1: <AHCI channel> at channel 1 on ahci0 ahcich2: <AHCI channel> at channel 2 on ahci0 ahcich3: <AHCI channel> at channel 3 on ahci0 ahcich4: <AHCI channel> at channel 4 on ahci0 ahcich5: <AHCI channel> at channel 5 on ahci0 ahcich6: <AHCI channel> at channel 6 on ahci0 ahcich7: <AHCI channel> at channel 7 on ahci ahci1: <ATI IXP700 AHCI SATA controller> port 0xa000-0xa007,0x9000-0x9003,0x8000-0x8007,0x7000-0x7003,0x6000-0x600f mem 0xfe5ffc00-0xfe5fffff irq 19 at device 17.0 on pci0 ahci1: AHCI v1.20 with 4 3Gbps ports, Port Multiplier supported ahcich8: <AHCI channel> at channel 0 on ahci1 ahcich9: <AHCI channel> at channel 1 on ahci1 ahcich10: <AHCI channel> at channel 2 on ahci1 ahcich11: <AHCI channel> at channel 3 on ahci1
と新しく刺した mSATA3I-PCIe が ahci0 、内蔵のが ahci1 として認識されたようです。その影響で今まで ada0,ada1,ada2 だった HDD が ada1, ada2, ada3 になって、 mSATA3I-PCIe に繋げた SSD が ada0 になってしまいましたが、そこは zfs がカバーしてくれたので、問題なくマウントできました。 zfs 万歳。
次は SSD のフォーマットとブートの設定ですが、手動で zfs にフォーマットしてデータコピーして再起動しても、どうもうまくブートしない。仕方ないので 10-R の memstick からブートして、 SSD にインストールしてってやるとちゃんと SSD からブートするんだけど、データコピーするとやっぱりダメ。試しに ffs でフォーマットするとデータコピーしたあとでもちゃんと動いてるのでむむむって感じで半日悩んで過ごした後に!
FreeBSD 10-R の / を ufs から zfs に(物理的にも)移行しようとして半日ハマったんだけど、その原因が /etc/fstab を ufs からコピーしておいて修正してなかった、というなんともショボい理由で泣きたい。
— Kiyono, Goro (@goro1080) February 11, 2014
そりゃあ /etc/fstab に
/dev/da0 / ufs rw 1 1
とか書いてあったら、そこから / マウントしようとして /dev/da0 なんかないんだからコケるよな…
というお茶目なミスはありましたが、それ以外では問題なく快適な netatalk 3.1 な環境が手に入りました。
なお zfs 上に置いてた swap は SSD 上に移しました。これで swap out 起こしても多分それなりに快適なまま。