hack のためのネタ帳, etc,,,


公式ページ等

参考になるページ等

冷却 FAN のピン配置等

memo

先日から実家の父用のストレージ物色してたところ
RAM4GB + HDD500GB モデルに +RAM4GB したセットが手ごろな価格で出ていたのでポチった。
あとは HDD 買い込んで NAS4Free 突っ込んで冗長性 2 で運用予定だけど、4発にするか5発にするかが悩ましいところ。
スケールアウト出来れば楽なんだけど ZFS じゃ出来ないし。
NAS 用機材としては定番化してる感があったので、流石にもう枯れてて、一通りの機能は動くだろうと高を括っていたら思わぬところに落とし穴が待っていた。

FreeNAS-9.2.1.6-RELEASE-x64 (ddd1e39) の kernel は以下の通りであり
# uname -a                                                      
FreeBSD freenas.local 9.2-RELEASE-p9 FreeBSD 9.2-RELEASE-p9 #0 r262572+cc525fe: Thu Jul  3 14:22:45 PDT 2014     root@build3.ixsystems.com:/fusion/jenkins/9.2.1.6-RELEASE/os-base/amd64/fusion/jenkins/9.2.1.6-RELEASE/FreeBSD/src/sys/FREENAS.amd64  amd64
dmesg 及び ifconfig -m から得られるオンボードの NIC の情報は以下の通りである。
# dmesg
...
bge0: <HP NC107i PCIe Gigabit Server Adapter, ASIC rev. 0x5784100> mem 0xfe9f0000-0xfe9fffff irq 18 at device 0.0 on pci2
bge0: CHIP ID 0x05784100; ASIC REV 0x5784; CHIP REV 0x57841; PCI-E
miibus0: <MII bus> on bge0
brgphy0: <BCM5784 10/100/1000baseT PHY> PHY 1 on miibus0
brgphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master, auto, auto-flow                     
bge0: Ethernet address: 9c:b6:54:a9:xx:xx
...
# ifconfig -m bge0
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500      
        options=c019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO,LINKSTATE>
        capabilities=c019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO,LINKSTATE>                                                         
        ether 9c:b6:54:a9:xx:xx
        inet 192.168.1.xx netmask 0xffffff00 broadcast 192.168.1.255
        nd6 options=9<PERFORMNUD,IFDISABLED>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        supported media:
                media autoselect mediaopt flowcontrol
                media autoselect
                media 1000baseT mediaopt full-duplex,master
                media 1000baseT mediaopt full-duplex
                media 1000baseT mediaopt master
                media 1000baseT
                media 100baseTX mediaopt full-duplex
                media 100baseTX
                media 10baseT/UTP mediaopt full-duplex
                media 10baseT/UTP
見ての通り capabilities のところに WOL_UCAST,WOL_MCAST,WOL_MAGIC など Wake On Lan に必要なフラグが出て来ない。

FreeBSD の各 NIC driver について WOL 対応を調べるためには、以下のようにして調べれば良いらしい。
$ grep -l IFCAP_WOL /usr/src/sys/dev/*/*.c
FreeNAS は source が付いてないので、FreeBSD のリポジトリから直接探してみると、bge driver のソースは以下で閲覧出来た。 見事に WOL 関連は抜け落ちており FreeBSD-9.2-RELEASE 以降の 9.3-RELEASE, 10.0-RELEASE 及び直近の head まで状況は変わってない模様。
つまり FreeBSD 系の OS を使っている限りバージョンアップによる改善は、当面期待出来ない状況のようだ。

真っ当な MicroServer 使いは HP 純正のリモートアクセスカードを使うから WOL 対応してなくても不便は無いのかもしれないが、これはちょっと意外だった。

参考:
非公式な対応については、以下のフォーラムに情報があった。
  • FreeNAS / Forums / FreeNAS Community / FreeNAS Forum / Help & Support /Networking
vannhi 氏の 2014-02-08 の投稿 でパッチ済みのイメージが提供されてるんだけど、コンパイル後の .ko (kernel object ?) しか手に入らないのが微妙に気持ち悪い。
どうもこれは joesflow 氏の 2014-01-06 の投稿 で指摘されている NAS4Free 独自適用の kernel patch を拝借してきたもののようだ。
上記で指摘にある SourceForge 上にある NAS4Free のパッチへのリンクはリンク切れしているのだが、時系列的には [r902]: experimental / 9.2.0.1 / trunk / build / kernel-patches / bge / files / patch-if_bge.diff だと思われる。
このパッチは、 とそのものずばりな名前で導入されているのだが、 "Add Broadcom BCM57764, BCM57767, BCM57782, BCM57786 and BCM57787 support" されてた際、一旦削除され別のファイルに置き換えられた後 で再び追加されるも、 でばっさり削られてしまってる模様。
NAS4Free での議論は以下のフォーラムかな? 2014-08-03 現在の状況としては、2014-02-09 に 9.2.0.1.943 release で試したら動かんってコメントされたのを最後に、放置プレイ継続中。

とりあえず、
  • [r1003]: branches / 9.1.0.1 / build / kernel-patches / bge / files / patch-if_bge.diff
には残っているみたいなので、
NAS4Free 9.1.0.1 であれば WOL 対応できている気はするが 9.2.0.1 は駄目なんじゃないかって気がする。
と言うことで、もし .ko に互換性があるなら、NAS4Free 9.1.0.1 から抜いてくるのが一番素性が安心っぽいけど、実験してないので成否は不明。

それはそうと、NAS4Free のリポジトリ管理方針が微妙に理解できないと言うかか、なぜか branchs にも tags にも 9.2.0.1 が作られてないんだけど、これって 9.2.0.1 リリース時に作成するもんじゃないの?

因みに、上記 patch は FreeBSD の Bugzilla にも登録がある模様。 2014-08-03 現在 Last Modified が 2013-10-07 で status が in discussion のままとか、絶賛放置状態。
Intel Gigabit CT Desktop Adapter EXPI9301CT でもハマったが、FreeBSD はデバイスの対応状況が Linux に比べてイマイチな印象。

追記 2014-08-07:
NAS4Free でのアドホックな対応 OlafD01 氏の 2014-01-24 の投稿 がまとめのようだが、
要約すると /cf/boot/kernel/if_bge.ko.gz を .847 から .943 へ移植して /cf/boot/defaults/loader.conf へ if_bge_load="YES" を追加しとけってことかな?
FreeBSD でも同じようなことやっててなんだかなーと思う
なお、手元の NAS4Free で .847 と.943 の if_bge.ko を確認してみたところ以下のような感じ
# stat /cf/boot/kernel/if_bge.ko.gz
86 21382 -r-xr-xr-x 1 root wheel 49072 34035 "Aug 18 01:51:34 2013" "Aug 18 01:51:34 2013" "Aug 18 01:51:34 2013" "Aug 18 01:51:34 2013" 16384 68 0 /cf/boot/kernel/if_bge.ko.gz
$ md5sum if_bge.ko.gz,NAS4Free-9.1.0.1.847
91cd94b942ca2e18e45f257fd4a1deba *if_bge.ko.gz,NAS4Free-9.1.0.1.847
# stat /cf/boot/kernel/if_bge.ko.gz
84 24262 -r-xr-xr-x 1 root wheel 56752 47420 "Jan 20 16:52:34 2014" "Jan 20 16:52:34 2014" "Jan 20 16:52:34 2014" "Jan 20 16:52:34 2014" 16384 96 0 /cf/boot/kernel/if_bge.ko.gz
$ md5sum if_bge.ko.gz,NAS4Free-9.2.0.1.943
1f1e89cbbc02f300232239330b18bda8 *if_bge.ko.gz,NAS4Free-9.2.0.1.943
以下の手順で NAS4Free9.1.0.1.847 の bge driver を FreeNAS に移植することで WOL 対応させた。
  1. FreeNAS で mount -uw して / を rw で remount
  2. NAS4Free9.1.0.1.847 の /cf/boot/kernel/if_bge.ko.gz から取って来た bge driver を gzip -d して FreeNAS-9.2.1.6-RELEASE-x64 (ddd1e39) の /boot/kernel/if_bfe.ko に移植
  3. FreeNAS の web GUI の /system/tunables で Add Tunable して variable: if_bge_load, value: YES を追加
  4. reboot
以上の手順を実行したところ以下のようになった。
# ifconfig -m bge0                                              
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500      
        options=c219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO,LINKSTATE>                                                    
        capabilities=c219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO,LINKSTATE>                                               
        ether 9c:b6:54:a9:xx:xx                                                 
        inet 192.168.1.14 netmask 0xffffff00 broadcast 192.168.1.255            
        nd6 options=9<PERFORMNUD,IFDISABLED>                                    
        media: Ethernet autoselect (1000baseT <full-duplex>)                    
        status: active                                                          
        supported media:                                                        
                media autoselect mediaopt flowcontrol                           
                media autoselect                                                
                media 1000baseT mediaopt full-duplex,master                     
                media 1000baseT mediaopt full-duplex                            
                media 1000baseT mediaopt master                                 
                media 1000baseT                                                 
                media 100baseTX mediaopt full-duplex                            
                media 100baseTX                                                 
                media 10baseT/UTP mediaopt full-duplex                          
                media 10baseT/UTP                                               
WOL_MAGIC が options, capabilities の項目で確認出来る。
この後 shutdown したところ、無事 magick packet による wol に成功した。
HP から純正オプションとして注文した場合、送料込みで \8,640 になる模様。Amazon 等で入手するより若干安いかも?
本機には、miniSAS から分岐した内蔵 HDD ゲージ用の 4 port 及び、光学ドライブ用の 1 port で、合計 5 port の SATA port が存在する。
優先順位としては、BIOS では光学ドライブ用 SATA の方が、miniSAS 分岐の SATA よりも前に表示されるが、FreeNAS や NAS4Free では後に表示される。
Generation は miniSAS 分岐が SATA2 で dmesg には以下のように表示される。
300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
光学ドライブ用は SATA1 で dmesg には以下のように表示される。
150.000MB/s transfers (SATA, UDMA6, PIO 8192bytes)
また光学ドライブ用は BIOS で write cache を enable にしておかないと、出荷状態では write cache が無効になるので遅いとの事。
NAS4Free-x64-embedded-9.2.0.1.972.img を 2GB の USB フラッシュメモリに書き込んでみたのだが、boot 時の opensolaris.ko の load が異常に遅く 2 分近く待たされる。
フォーラムの以下のエントリを見ると HDD に full install すれば解消出来そうなのだが、USB だとなんでこんなに待たされるのか原因がさっぱり分からない。
追記: 2014-09-18:
NAS4Free で WOL の設定をした後、loader.conf に if_bge_load="YES" を追加した状態で boot してみて気付いたんだが、opensolaris.ko の load は現実的な時間で終わって、if_bge.ko の load の後で時間を食うようになった。つまりこれは opensolaris.ko の load じゃなくてその次に読み込まれてるファイルの load に時間を食っている模様。
Force USB2 controller to use USB1 for virtualbox usage なんて記事を見かけて、ひょっとして USB1 の状態で disk image を読んでるのかなと思い、loader.conf に usb_load="YES" とか ehci_load="YES" と入れてみたものの改善されない。
仕方ないので、boot 画面を動画で撮ってみたところ、どうも isboot.ko の load に時間を取っているらしいことが確認出来た。
状況としては以下のような感じ。
BTX loader 1.00  BTX version is 1.02
Consoles: interval video/keyboard
BIOS drive C: is disk0
BIOS drive D: is disk1
BIOS drive E: is disk2
BIOS drive F: is disk3
BIOS drive G: is disk4
BIOS drive H: is disk5
BIOS 634kB/3537472kB available memory

FreeBSD/x86 boot btrap loader, Revision 1.1
(root@bake.isc.freebsd.org, Fri Sep 27 04:58:05 UTC 2013)
Loading /boot/defaults/loader.conf
/boot/kernel/kernel text=0x105d680 data=0x3454a0+0x114da8 syms=[0x8+0x18d9e0+x08
+0x1dd668]
/boot/kernel/zfs.ko size 0x23d298 at 0x1c23000
loading required module 'opensolaris'
/boot/kernel/opensolaris.ko size 0x84d0 at 0x1e61000
/boot/kernel/if_bge.ko size 0x1cac0 at 0x1e6a000
/boot/kernel/isboot.ko size 0x1e3e8 at 0x10d87000
/boot/kernel/ehci.ko size 0x16560 at 0x10da6000
この直後に
Wellcome to NAS4Free!
ってメニュー画面に移行する。
ぱっと見 isboot.ko のサイズが特に大きいと言うわけではないし、他との違いと言えば、load されるアドレスが1桁違うくらいだろうか?

追記: 2014-09-19:
isboot.ko はどうやら iSCSI 用の boot モジュールらしい。
必要とは思えないので /cf/boot/loader.conf 中の「isboot_load="YES"」をコメントアウトしてみたり WebGUI から「システム」→「高度な設定」→「loader.conf」に以下の設定を追加してみたりしてみたのだが、効果なし。
変数コメント
isboot_loadNO
と言うことで、どうも isboot.ko も原因ではないらしい。
BTX loader の画面で if_bge.ko と ehci.ko の表示の間で 2 分近く消費しているので BTX loader 抜けた後のメニューで「5. Escape to loader prompt」選んで、lsmod してみたところ以下のような状況だった。
...
 0x1c23000: /boot/kernel/zfs.ko (elf obj module, 0x23d298)
  modules: zfsctrl.1
 0x1e61000: /boot/kernel/opensolaris.ko (elf obj module, 0x84d0)
  modules: opensolaris.1
 0x1e6a000: /boot/kernel/if_bge.ko (elf obj module, 0x1cac0)
 0x1e86ac0: /mfsroot (mfs_root, 0xef00000)
 0x10d87000: /boot/kernel/ehci.ko (elf obj module, 0x16560)
と言うことでどうも /mfsroot の読み込みに時間を食っているようだ。
0xef00000 と言うことは 239MiB なので 130s として読み込みに 2MB/s 出てない感じ。
実際には /mfsroot.gz のように 84,183,912B に圧縮されているので 600kB/s 前後って可能性もあるけど、
余ってた BUFFALO RUF2-E2GL-BK を使っているのだが以前計測したデータは以下のような感じだったので丁度 Random Read 4KB っぽい値が出てる気がする。
--------------------------------------------------
CrystalDiskMark 2.1 (C) 2007-2008 hiyohiyo
      Crystal Dew World : http://crystalmark.info/
--------------------------------------------------

   Sequential Read :   17.768 MB/s
  Sequential Write :    6.059 MB/s
 Random Read 512KB :   17.734 MB/s
Random Write 512KB :    1.811 MB/s
   Random Read 4KB :    3.485 MB/s
  Random Write 4KB :    0.019 MB/s

         Test Size : 50 MB
              Date : 2008/08/18 12:08:11
と言うことで、読み込み時のブロックサイズが怪しそう。調整する項目があれば解決出来そうな気がするのだが可能だろうか?
USB2 ではなく USB1 状態で読み込んでいるという可能性も残るが、根本的な原因は読み込みが 2MB/s 出てない点であることは確実っぽい。

マニュアルは以下かな? それらしい項目は見当たらない気がする。

あと、こんなポストも見つけた。 試しに BIOS で 「Advanced」→「USB Configuration」→「USB Mass Storage Device Configuration」→「Emulation Type」を AUTO から Floopy や Hard Disk に変えてみたがこれも効果なし。

追記: 2014-09-21:
FAQ にこんな項目を見つけた Boot 時に USB1 の速度しか出ない M/B があるけど BIOS の設定でどうにかなる場合もあるとか何とか。だから、それはどうやれば分かるんだ?

こんなポストも見つけた みんな躓いてるんだな
USB マスストレージから起動可能みたいなんだけど、メモリカード系は微妙なのかも?
と言うのも BUFFALO RUF2-EL-BKシリーズ の 2GB モデル(BUFFALO RUF2-E2GL-BK) だと起動出来たのだが、
microSD 刺した BUFFALO microSD専用USB2.0/1.1フラッシュアダプター BSCRMSDCシリーズ だと起動出来なかった。
WebGUI から「システム」→「高度な設定」→「loader.conf」に以下の設定を追加し「変更を適用」
変数コメント
if_bge_loadYES
NAS4Free-9.1.0.1.847 の if_bge.ko.gz を /tmp へ転送
$ rsync -auvze ssh "if_bge.ko.gz,NAS4Free-9.1.0.1.847"  root@192.168.1.6:/tmp/
/cf/boot/kernel 以下に配置するため root で以下の作業を実行
umount /cf
mount /dev/da0a /cf
cd /cf/boot/kernel/
mv if_bge.ko.gz if_bge.ko.gz,NAS4Free-9.2.0.1.972
mv /tmp/if_bge.ko.gz,NAS4Free-9.1.0.1.847 ./
ln -s   if_bge.ko.gz,NAS4Free-9.1.0.1.847 if_bge.ko.gz
chown root  if_bge.ko.gz,NAS4Free-9.1.0.1.847 
chgrp wheel if_bge.ko.gz,NAS4Free-9.1.0.1.847 
以上の操作で以下のような状態になった
# ls -l /cf/boot/kernel/if_bge*
lrwxr-xr-x  1 root  wheel     33 Sep 17 09:39 /cf/boot/kernel/if_bge.ko.gz -> if_bge.ko.gz,NAS4Free-9.1.0.1.847
-r-xr-xr-x  1 root  wheel  34035 Aug 18  2013 /cf/boot/kernel/if_bge.ko.gz,NAS4Free-9.1.0.1.847
-r-xr-xr-x  1 root  wheel  47157 Apr 28 09:44 /cf/boot/kernel/if_bge.ko.gz,NAS4Free-9.2.0.1.972
# cat /cf/boot/loader.conf.local
if_bge_load = "YES"
reboot 後 bge0 を確認すると以下のようになっていた。
# ifconfig -m bge0
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=c219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO,LINKSTATE>
        capabilities=c219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO,LINKSTATE>
        ether 9c:b6:54:a9:dc:d3
        inet6 fe80::9eb6:54ff:fea9:dcd3%bge0 prefixlen 64 scopeid 0x1
        inet 192.168.1.6 netmask 0xffffff00 broadcast 192.168.1.255
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        supported media:
                media autoselect mediaopt flowcontrol
                media autoselect
                media 1000baseT mediaopt full-duplex,master
                media 1000baseT mediaopt full-duplex
                media 1000baseT mediaopt master
                media 1000baseT
                media 100baseTX mediaopt full-duplex
                media 100baseTX
                media 10baseT/UTP mediaopt full-duplex
                media 10baseT/UTP
BTX Loader による /boot/mfsroot.gz があまりにも遅すぎるので GRUB2 で boot 出来ないか試してみたのだが、
結論としては、以下の2点の理由から駄目だった。
  • 結局 /boot/mfsroot.gz の読み込み完了迄に 2 分超かかってしまうためわざわざ GRUB2 で boot する意味がない。
  • /etc/fstab で /dev/da0 を /cf に mount するようハードコーディングされているので、embeded の disk image そのままだと sector 0 にしか配置出来ない。

やったことは、
Ubuntu 14.04.1 LTS Desktop (64-bit) の ISO から起動し、
gdisk コマンド使って USB フラッシュメモリに GPT でパーティション切って、
gpt1 を partityon type ef02 (BIOS boot partition) で未フォーマット
gpt2 を partition type 8300 (Linux filesystem) で mke2fs で ext3 作り debootstrap して chroot から grub-install
gpt3 を partityon type a503 (FreeBSD UFS) で NAS4Free の embeded disk image を dd で書き込み
gpt2 の /boot/grub/custom.cfg に以下の要な menuentry を用意
という手順で GRUB 2 による FreeBSD kernel の boot 自体は成功した。
menuentry "NAS4Free" {
  insmod ufs2
  search --set=root --fs-uuid freepool --hint hd0,gpt3
  kfreebsd /boot/kernel/kernel.gz
  kfeebsd_loadenv /boot/device.hints
  kfreebsd_module_elf /boot/kernel/if_bge.ko.gz
  kfreebsd_module /boot/mfsroot.gz type=mfs_root
  set kFreeBSD.vfs.root.mountfrom=ufs:/dev/md0
  set kFreeBSD.vfs.root.mountfrom.options=rw
}
但し、前述のように FreeBSD kernel は起動するが init が /etc/fstab に記述してある /dev/da0 を /cf に mount しようとするが、
NAS4Free embeded の disk image は /dev/da0 の partition 3 にあるため mount 出来ない。
このため /cf を mount に失敗した時点で本来 /cf 以下にあるはずの運用環境毎の設定情報が読み込めないという状態になり
NAS4Free の起動に失敗するという状況。

MicroServer 向けに特化してカスタマイズし NAS4Free 自体の version up には追従しないというのであれば
mfsroot.gz をいじることで、どうにでもなるのだが
結局 mfsroot 読み終わる迄に 2 分超かかっており
本来の目的である読み込み時間の短縮が実現出来そうになかったので、さじを投げた次第。

参考:
TOSHIBA DT01ACA300 を 5 台ぶら下げて、以下のようにして raidz2 で構成してみた。
#!/bin/sh
set -v
for i in ada0 ada1 ada2 ada3 ada4; do
  gpart create -s GPT $i
  gpart add -t bios-boot   -b   40 -s       2008 $i
  gpart add -t freebsd-zfs -b 2048 -s 5859375104 $i
  gnop create -S 4096 ${i}p2
done
zpool create -m /mnt/microserver1_tank microserver1_tank raidz2 ada0p2.nop ada1p2.nop ada2p2.nop ada3p2.nop ada4p2.nop

簡易ベンチ
microserver1: /tmp # dd if=/dev/urandom of=/dev/null bs=4096 count=1024x100
102400+0 records in
102400+0 records out
419430400 bytes transferred in 6.229965 secs (67324680 bytes/sec)
microserver1: /tmp # dd if=/dev/urandom of=/mnt/microserver1_tank/hoge bs=4096 count=1024x100
102400+0 records in
102400+0 records out
419430400 bytes transferred in 9.088948 secs (46147299 bytes/sec)
microserver1: /tmp # dd if=/mnt/microserver1_tank/hoge of=/dev/null
819200+0 records in
819200+0 records out
419430400 bytes transferred in 3.256181 secs (128810530 bytes/sec)
タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます