Jonsbo N3でNASを組み立てた

NAS用サーバを組み立てた。きっかけはJONSBO N3のプレス記事を読んだのと、昔組んで使い続けていたNASマザーボードの調子が悪くなり、余ってたCore i5 2400Sなサーバ *1 に積み替えて、延命処置していたため。HDDを冗長化していてもマザーボードはしてなかったよ。HAHAHA

JONSBO N3の情報を求めてきた人に向けて言うと、この記事なんかより、ググると出てくる海外の人のレビューが割とまともでいっぱい出てくるのでお勧め。最近はYoutubeRedditとか検索先を絞って探している。(JONSBO N3は関係なく、何か個人レビューみたいな記事あんまり見つからなくなっちゃった感じがする。)

構成を考える

最終的には

  • RAID-6にしたい(HDDは8台乗せたい)
  • 10Gbpsにしたい
  • ECCメモリのせたい
  • 小さいケースにしたい

という欲張りな感じになってしまった。

今はHP MicroServer Gen8がヤフオクで出回っているので、これに載せてもいい。HDDが4台しか乗らないのと中古である以外は何の欠点もない。というかNAS入門にはこれが良いんじゃないかとも思ってる。

あとそもそも2.5インチSSDもだいぶ安くなっていて4TBは4万ぐらいで買える。なんならM.2 SSDならケーブルレスでかなりコンパクトなNASにできるだろう。発熱はすごそうだけど。だから容量がめちゃくちゃほしい以外なら今どきHDDじゃなくてもいいとは思う。でも同価格のHDDの容量を考えるとまだまだ割高だ。

で、HDDも4台しか乗らないのでRAID-6にするうまみが少ない。無意味じゃないけど速度的には5台以上じゃないとメリットが出てこないしなーと悩んだ。ネットワークも10Gbpsに対応するなら1250MiB/s出るのだから、それを生かせるようHDDは6台以上詰みたい。そんなに速度と容量を求めて何になるの?という質問には答えられない。空き容量は精神安定剤なのである。速度はロマンなのである。

で、HDDにほぼ傾きつつあるところに仕事のストレスが加わって衝動買いがしたくなり、HDDが安いのは今だろう!と思って12000円の6TBを9台買ってしまったので、もう後に引けなくなった。ただ買った後で容量がほしいなら16TBを4台とかのほうが省電力になって良かったじゃんとちょっと思ったりして後悔している。次回に生かしましょう。

部位 名称 価格+送料
ケース Jonsbo N3 ¥25,254
アクセサリ 拡張カード(M.2 to SATA6port) ¥6,215
NIC Mellanox MCX4121A-ACAT ¥8,957
マザーボード Asrock A520M-ITX/ac ¥16,980
電源 Corsair SF450 ¥10,000
メモリ Unbuffered ECC 32GB ¥7,980
CPU Ryzen 5650GE ¥16,500
CPUクーラ ¥0
ケースファン GELID Silent 9 PWM ¥1,000
アクセサリ 変換コネクタ * 2 ¥1,000
HDD WD60EZAX * 9個 ¥106,200
¥200,086

うーん、ここまでする必要あったかな・・・

JONSBO N3

最初に述べた通り、JONSBO N3が出てきたタイミングがきっかけだった。3.5インチHDDが8台積めてこのサイズ感というのはあまりないから。欠点はMini-ITXという点。拡張性が乏しい。

サイズ感は比較的小さく、3.5HDDは8台まで、できればMicroATXが乗る、ぐらいで色々調べた。

  • JONSBO N3
    • 記事で見た。
    • 欠点:
      • ちょっと高さが気になる
  • U-NAS NSC-810A Server Chassis
    • 見た目はまさにNASと言った感じの雰囲気で良い
    • MicroATXをサポート
    • 欠点:
      • とにかく在庫がない。復活しても即売れる。あとサイトは結構長い間落ちていたこともある。3か月以上定期的に見てたがダメだった。
      • Flex電源は入手性がSFXを下回る上にお高いのがキツい
      • 値段もネック。送料も考えると5万弱。
  • Silverstone DS380
    • 著名なメーカーが出してるケース。ヤフオクにも出回りやすく安価に入手できるものとしてはよさそう
    • 欠点:
      • 奥行が長すぎる割にmini-ITX(36cm)
  • AUDHEID K7
    • micro-ATXをサポートして拡張性は充分。入手性も値段もそこそこ。レビューも結構出回っている
    • 欠点:
      • レビュー見る感じ作りがあまり良くなさそう
      • U-NAS が買えないから仕方なく買ったという人も

後はAliExpressでよくわからん製品がいくつかあったので見たが、情報が少ないしコレジャナイ感があったので採用しなかった。

本当はU-NAS NSC-810Aで組みたかったが、仕方がなくJONSBO N3でという感じ。

AliExpressで購入。11/5に注文して11/22に受け取った。

最近は海外のNAS好きの人らがレビューを動画で行っているので、Youtubeあたりで製品名で調べると参考になる。本格的なレビューは海外の方の記事が詳しい。これを読めば雰囲気はつかめるはず。

https://nascompares.com/review/the-jonsbo-n3-nas-case-review/

梱包もしっかりしているし、質感も良い。ケーブルもマザーボードの裏を通せるなどの配慮がされている。

公式の写真を見てもらえばわかるが、ケース内部は電源の取り付け方だけがかなりトリッキーだった。グラボのスペースを確保するために電源の位置を工夫する必要があり、サイズをそのままに収めるにはケースの側面に見せることになり配線もしにくいし不格好になるから覆い隠すような感じに見える。ただその代わりに高さが犠牲になったという感じに見えるが、個人的にはこの幅と奥行きとくらべたら高さは比較的許容できると思えたし、CPUファンにも大型なものが採用できるし、LowProfileではないPCIカードも指せるので悪いことばかりではないように見える。

  • HDD側のケースファンは若干うるさい。10cmファンだが、92mmファンでも穴の位置は一緒なので換装できる。
  • フロントパネルのHDD LEDが点灯しっぱなしになっている。どうやらアクティブのものだけ光るらしい。読み書きが起きると点滅すると思ってた。
  • トップケースを外すときだけ六角2mmネジで手元の電動ドライバでは対応できなかった。棒レンチは付属するが、ちょっとアクセスが悪い。
  • バックプレーンにSATA1本、ペリフェラル2本を要求するので煩雑。電源ケーブルに配慮するならこっちも配慮してほしかった
  • 付属のケースファンは3pin(PWM非対応)で、JONSBO N3のバックプレーンも4pinだが恐らくPWMは機能しない。なのでマザーボードのケースファンから取ると良い

届いたJONSBO N3。傷っぽい汚れは簡単に落ちた

マザーボード: ASRock A520M-ITX/ac

  • ECCサポート
  • 以下のいずれか
    • SATA 8ポート
    • 10Gbps (できればSFP+)

という要件をマザーボードだけでカバーしようとするとかなり限られる。最初はsupermicroのMini-ITXXeonで組もうかと思っていたが、値段的に見送った。どうも安価では出回らないもののようだった。

そこで、SATA 8ポートは後述する M.2から8 SATAへ変換するカードを使い、10GbpsはConnectX-4のNICを使うことにすれば、ECCだけを満たせればよくなると思った。

そしてRyzen系は非公式ながらもECCは対応している状態なので、後述するAMD Ryzen 5 PRO 5650GEを使うことにした。

AMD系はCPUにメモリコントローラをもっているようなので、後はSocketがAM4のMini-ITXマザーボードを探せばよかった。これは新品でも安価だったASRockの A520M-ITX/acにした。楽天ポイントで買えたのも大きかった。

M.2をMiniSAS x2(SATA x8)に変換するカード

SATAの本数が8本必要なのだけど、ITXでそれをカバーできる製品はサーバ製品にしかない。なのでRAIDカードをPCI-Express x16スロットに刺すぐらいしかないのだけど、そっちには10GbpsのNICを差したいと思っていたので悩んだ。ディスク本数を取るか、ネットワーク速度を取るか。

そしてAliExpressで彷徨っていたらM.2をMiniSAS x2(SATA x8)に変換するカードを見つけた。ついでにMiniSAS から SATA x4の変換ケーブルもついてくる。

https://ja.aliexpress.com/item/1005005252318579.html

先に言うと、これはちょっと失敗だと思っていて、同時アクセス時におそらくこのカードがネックになって性能が出し切れない模様。実際にfioで8台のデバイスに対して直接操作したところ、合計で1000MiB/s弱の読み書きができることは確認できた。ただ1台づつなら190MiB/s出るので、8台同時なら理論上は1520MiB/s前後まで出るはずである。なので、おそらくこのカードがネックになっていると思われる。とはいえ、Linuxでは追加の作業なく認識できたのは驚きだし、1000MiB/sでるならまぁ十分かなぁと思う。

というわけで、これはとにかくストレージ数を増やしたい以外の用途では使わないほうがよいかもしれない。出しているメーカもBTBCoinというマイニング用製品を出している所のようなので。逆に1台1台の性能自体は問題なく出るので単純にRAIDではなくストレージ用途に使うなら十分かもしれない。

一応どういうチップが使われているか書こうとしたが、チップの写真を撮り忘れていた・・・lshwで調べた感じ JMicron Technology Corp.JMB58x AHCI SATA controllerという製品のようだった。ただこれコントローラらしきチップは2個あるのだけど、HW上は8個を認識しているように見える。

https://linux-hardware.org/index.php?id=pci:197b-0585-197b-0000

ここから製品情報を見に行った感じ、JMB585JMB575を載せているものと思われる。JMB585でPCIexpress3 x2(M.2)をSATA x5に変換し、JMB575でSATA x1をSATA x5に変換。合計9本のSATAをそれぞれ4本づつminiSASでまとめて合計miniSASを2本提供できている、という仕組みのようだ。

M.2 to MiniSASx2 変換カード

放熱フィンは手元にあったのをシリコングリスでくっつけて載せている(向きがバラバラなあたりズボラさが出てる)

CPUクーラ: AMD Wraith Prism

Ryzen 3900Xについてきたもの。

ケースファン: GELID Silent 9 PWM(中古)

JONSBO N3にはHDDの冷却用に100mmファンが付属しているが、これは風量はあるものの結構うるさかったし、バックプレーンのファン電源はPWMに対応していないようだった。100mmファンの代替はほぼ無いので困っていたら、92mmでも行けるという投稿を見つけた。

https://www.reddit.com/r/sffpc/comments/17724zo/psa_the_jonsbo_n3_case_can_accept_92mm_fans/

というわけで、メルカリで92mmファンを1000円ぐらいで買ってきて付けたがぴったりだった。PWMに対応しているので1000RPM以下で動かしたらかなり静かになった。

上:備え付けのファン 下:購入したファン+備え付けのファンガード。サイズは違うものの穴の位置は92mmと一緒

CPU: AMD Ryzen 5 PRO 5650GE (中古)

上記の理由でECCをサポートしていればなんでもよかったが、ここで省電力なCPUにしたいと欲張ってしまった。しかし、省電力なCPUだいたいオンボードでさらにECCサポートというと全滅だった。Intelは比較的出してるし最近はN95,N100とかいう省電力CPUの中ではかなりまともなものを出してるがこれはECCをサポートしてないし、オンボードで出してるのはASRockのN100DC-ITXぐらいだった。CPUはECC対応しているものが多くなったが使うには高価なチップセットを乗せたマザーボードでないとダメという条件付きである。IntelはちゃんとECCと向き合ってくれ。頼む。

なのでRyzenで探すことにした。RyzenのGEがつくのがグラフィック搭載(G)でTDPを抑えた(E)という製品らしいことがわかった。これはOEM向けにしか売られておらず出回るのは分解した中古品しかない。TDP65Wが35Wって結構違うけど実際どれぐらい効果あるんですかね…

ヤフオクで眺めてたら16,500円で出ていたので即決した。とりあえず認識したのでヨシ。あとよくわからない会社?の放出品もあったけど、なぜかどれもヒートスプレッダが傷だらけか汚かったので避けた。だって普通に扱ったらそんなことにならんでしょう・・・

NAS用のわりに無駄にCPUが強いので何か処理させるサーバとしても使えそう。こういうのが自作の醍醐味。言うて何かあるわけでもないが…

メモリ: SAMSUNG DDR4 2666 ECC Unbuffered 16GBx2(中古)

DDR4、ECC対応、Unbuffered(Registeredではない)なメモリであればなんでもよかった。

ヤフオクで掲題のものが8000円ででていたので落札した。マザーボードも2スロットだったのでちょうど良い。32GB x2も考えたが値段が跳ね上がったので諦めた。

到着したのを見たけど梱包も製品もめちゃくちゃキレイで中古とは思えない感じだった。大切に扱ってくれてありがとう。

電源: Corsair SF450 (中古)

JONSBO N3はSFX電源なので、これに合わせる必要があった。SFX電源は選ばなければ少しはあるが、2023/11時点ではほとんど出回ってない。

kakaku.comで見た感じではこれを満たすのが新品だと高すぎる。17,000円て…。

これを受けて、今回の構成では消費電力量はピークでも150Wぐらいだしこのサイズ未満なら選択肢は他にあるんじゃないか?と考えた。(定常時の消費電力は80Wぐらいを考えていたのでその2倍あると良いという肌感がある。80PLUSも主に負荷50%時の変換効率の規格だし。)

  • HDPlexのこれを載せられないか?と悩んだが入手が面倒なので止めた。でも250WでGaNを採用してこのサイズ感は唯一という感じはする
  • PicoPSU 150Wでも行ける気はするけども、ちょっと不安。あとあの大きいAC-DCアダプタはダサいので避けたい

というわけで見送って次に中古のSFX電源を探すことにした。

CorsairのSF450 は80PLUS Platinumでよさそうに思えたので、これの中古を探したら運よく美品と謳うのが1万円で出ていたので即決で購入した。実際ホコリもほとんどついてなかったし通電ぐらいにしか使ってない感じだったと思う。ありがたい。Corsair SF450は電源ケーブルが全部黒いので統一感が出てこの点も良かった。

後述するが、SF450はペリフェラルケーブルを1本しか提供していない。JONSBO N3のバックプレーンは2つのペリフェラルと1つのSATAを要求するので、8台指すなら2つのペリフェラルケーブルを提供してくれる電源を選ぶとよい。私はヤフオクで追加のペリフェラルケーブルを買った。

NIC: Mellanox MCX4121A-ACAT (中古)

SFP+で10Gbpsでるやつ。ebayで取り寄せた。

システムドライブ: KIOXIA SSD-CK480S/N

480GBもなくてもいいんだけど、出荷が確実だったのがこのサイズしかなかったので。3600円だった。

キオクシアって新しい謎のメーカーだと思っていたら東芝メモリが社名変更した姿だったんですね・・・で、それをBuffaloが売ると。

HDD: WD60EZAX x9

衝動買いしたやつ。購入当時は11,800円で1TBあたり2000円切ってたのでタイミングよかった。さらに楽天ポイントが8%ぐらい付いていたはず。

ケーブル類

組み立て

電源のペリフェラルケーブルやSATA変換ケーブルが必要だとか、ケースファン取り寄せたりで止まったりして、ダラダラ組み立ててた。

当たり前かもしれないけど、先に配線を先に決めてからマザーボードなどを載せていくとよい。配線用の穴はちゃんと開いてるけど、マザーボードの下もしっかりスペースがあるのでここをうまく使うと良い。(こういった小さいケースは初めてだったので何度もマザーボードを付けては外してを繰り返して配線を見なおしてた)

抑えつけられなかったのでガラスワッシャーを挟んでいる図。ここはSSD用で本来はヒートシンクで挟む形だった

配線を頑張っている図。電源の下あたりを見ての通り隙間があるので、ここにCPU補助電源、ペリフェラルケーブルを通した

バックプレーン。ここはHDDのエアフローの都合もありなるべくスッキリさせるよう意識してた。ファンもケースファンから電源を取るようにしていた

試験起動。LEDファンが光る(この後何度も配線しなおした)

Memtestも完走

OSを入れた後、ディスクを差し込んで確認。

特に何もすることなく認識された。やったー!

sdb~sdiの8個が約6TBなので該当のディスク。500GB少なく見えるのはTB(1000*1000*1000)をTiB(1024*1024*1024)で表示しているためですね。

$ lsblk
NAME               MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0 447.1G  0 disk
├─sda1               8:1    0   600M  0 part /boot/efi
├─sda2               8:2    0     1G  0 part /boot
└─sda3               8:3    0 445.5G  0 part
  ├─almalinux-root 253:0    0    70G  0 lvm  /
  ├─almalinux-swap 253:1    0  15.4G  0 lvm  [SWAP]
  └─almalinux-home 253:2    0 360.1G  0 lvm  /home
sdb                  8:16   0   5.5T  0 disk
sdc                  8:32   0   5.5T  0 disk
sdd                  8:48   0   5.5T  0 disk
sde                  8:64   0   5.5T  0 disk
sdf                  8:80   0   5.5T  0 disk
sdg                  8:96   0   5.5T  0 disk
sdh                  8:112  0   5.5T  0 disk
sdi                  8:128  0   5.5T  0 disk

おわり

M.2の変換カードがボトルネックになってしまってちょっと辛い。悲しい。

NASとして動く状態は11月下旬ぐらいにはできていたけど、色々見なおしたりしてダラダラ作って記事を書き換えたりしていた。いい加減公開しないとなと思い公開した。現時点でもまだLinux入れただけの状態なのでお世話が必要だし、NASの引っ越しもしないといけない。今はRAIDをmdadmで組むかLVMで組むかZFSで組むかどうするかを考えてる(多分mdadmでやる気がする)

次にNASを組むなら…

  • 中古のHP MicroServer Gen 8 + 大容量なHDDで安価に仕立てる(自分の用途ではこれで十分なんだけど、面白みがない)
  • SSDを乗せた速度重視なやつ。SSDはまだまだ安くなるので頃合いになったら。
  • ミニPCを活用してみたい(ブーム去りそう。3Dプリンタで専用の箱とか作れると面白そうだけど3Dプリンタないし電源をどう確保するかとか考えるのが面倒…)

このNAS作りながらダラダラ書いていたら、M.2 SSDだけで組むとかはPC Watchで特集があって面白かった。M.2、ケーブルレスで良いんだよね。

pc.watch.impress.co.jp

後は今のNASを(M.2スロットから10GBASE-Tに変換するカード](https://www.aliexpress.us/item/3256805741409852.html)、PCI-ExスロットにRAIDカードにして速度が改善するか試してみたい感じはある。

こういうのは考えている時がかなり楽しいですね。

雑記

以降は雑記

消費電力

ワットチェッカーで見た感じ

  • 起動時: 最大120W
  • 負荷時: 最大90W (fioで8台に読み書き時)
  • アイドル時: 60W

思ったより消費電力大きかった。あまりエコではない…(HP Microserverのときはアイドル40Wぐらいだったはず。今の暫定稼働中のサーバはHDD4台で負荷時65W、アイドル50Wぐらい。)

memtest86

https://www.memtest86.com/

メモリが読み書きできるよねって言うのを確認してくれるやつ。今回は中古を買ったし念のためやっている。

OS入れたりしている裏でmemtestのイメージを用意しておき、寝る前に3周走らせた。ちゃんとPASSできた。

ただ、過去に一度もmemtestで引っかかった事はないものの、メモリ起因の不調にぶつかることはあったので、この結果は気休め程度。

fioでベンチマーク

fioを入れる。

sudo dnf install -y fio
# 1個づつ流す(各ディスクの性能を見る)
for RW in read write; do
  for DEVICE in /dev/sd?; do
    sudo fio -direct=1  -iodepth=16 -ioengine=libaio -rw=$RW -bs=1024k -size=10G -runtime=10s -filename="$DEVICE" -name="Sequential_${RW}_${DEVICE##*/}"
  done
done


# ":"で繋げたデバイス一覧を出す()
DEVICES=(/dev/sd?)
$(printf ':%s' ${DEVICES[@]})

# 一斉に流す(sdaを含めない)
DEVICES=/dev/sdb:/dev/sdc:/dev/sdd:/dev/sde:/dev/sdf:/dev/sdg:/dev/sdh:/dev/sdi
for RW in read write; do
    sudo fio -direct=1  -iodepth=16 -ioengine=libaio -rw=$RW -bs=1024k -size=10G -runtime=10s -filename="$DEVICES" -name="Sequential_${RW}"
done

# 4台づつ流す(8台だと性能を出し切れていなかったようなので)
for DEVICES in "/dev/sdb:/dev/sdc:/dev/sdd:/dev/sde" "/dev/sdf:/dev/sdg:/dev/sdh:/dev/sdi"; do
  for RW in read write; do
    sudo fio -direct=1  -iodepth=16 -ioengine=libaio -rw=$RW -bs=1024k -size=10G -runtime=10s -filename="$DEVICES" -name="Sequential_${RW}_"
  done
done

完全なログはGistに貼っておく。 https://gist.github.com/ryozi-tn/fdf7dfa820c5e8a93e7177c0c3ae2680

1台ごとの性能。最近のHDDは早いなぁ。

device RW スループット
sdb Read 198MiB/s
sdc Read 192MiB/s
sdd Read 188MiB/s
sde Read 194MiB/s
sdf Read 195MiB/s
sdg Read 191MiB/s
sdh Read 192MiB/s
sdi Read 187MiB/s
sdb Write 190MiB/s
sdc Write 184MiB/s
sdd Write 180MiB/s
sde Write 189MiB/s
sdf Write 190MiB/s
sdg Write 181MiB/s
sdh Write 190MiB/s
sdi Write 182MiB/s

8台同時読み書き。180MiB/s*8の速度が出るはずだが、SATAカードの都合のせいか残念ながら全然性能が出なかった。やはり厳しかったか。

device RW スループット
sdb..sdi Read 1009MiB/s
sdb..sdi Write 963MiB/s

4台同時読み書き。

device RW スループット
sdb..sde Read 774MiB/s
sdb..sde Write 782MiB/s
sdf..sdi Read 528MiB/s
sdf..sdi Write 485MiB/s

sdb..sdeは良い性能が出ている。しかしsdf..sdiスループットが悪い。 全て順番に流したので後半でサーマルスロットリングが起きたかと思ったが、時間を空けて順番を入れ替えても同様だった。

# 順番を入れ替えてみた
for DEVICES in "/dev/sdf:/dev/sdg:/dev/sdh:/dev/sdi" "/dev/sdb:/dev/sdc:/dev/sdd:/dev/sde"; do
  for RW in read write; do
    sudo fio -direct=1  -iodepth=16 -ioengine=libaio -rw=$RW -bs=1024k -size=10G -runtime=10s -filename="$DEVICES" -name="Sequential_${RW}_${DEVICES}"
  done
done
device RW スループット
sdf..sdi Read 518MiB/s
sdf..sdi Write 486MiB/s
sdb..sde Read 761MiB/s
sdb..sde Write 780MiB/s

しかし1台づつの時は大丈夫だった。負荷が大きくなるとダメなのかもしれない。少し減らして2台同時読み書きもやってみた。

for DEVICES in "/dev/sdb:/dev/sdc" "/dev/sdd:/dev/sde" "/dev/sdf:/dev/sdg" "/dev/sdh:/dev/sdi"; do
  for RW in read write; do
    sudo fio -direct=1  -iodepth=16 -ioengine=libaio -rw=$RW -bs=1024k -size=10G -runtime=10s -filename="$DEVICES" -name="Sequential_${RW}_${DEVICES}"
  done
done
device RW スループット
sdb,sdc Read 377MiB/s
sdb,sdc Write 395MiB/s
sdd,sde Read 371MiB/s
sdd,sde Write 390MiB/s
sdf,sdg Read 375MiB/s
sdf,sdg Write 395MiB/s
sdh,sdi Read 370MiB/s
sdh,sdi Write 393MiB/s

2台同時なら劣化は起きない。やはりある程度負荷が集中するとヘタるのかな?

M.2の変換ボードにはminiSASのポートは2つありminiSAS1つあたりSATAが4つ繋げる形になっている。miniSAS(のSATA)を制御していると思われるチップも2つ乗っている。 で、4台の時はこの2つのうち1つのチップに負荷が集中してしまうと劣化するのではないか?とちょっと考えた。

負荷を集中させないようにするには2つに分散させればいいので試す。まず物理的なつながりを把握する。

OSで認識しているデバイスとシリアルの対応を見る。シリアル値は伏せている。

$ls -l /dev/disk/by-id
lrwxrwxrwx. 1 root root  9 Nov 25 07:37 ata-WDC_WD60EZAX-00C8VB0_WD-WX*****33* -> ../../sde
lrwxrwxrwx. 1 root root  9 Nov 25 07:38 ata-WDC_WD60EZAX-00C8VB0_WD-WX*****4Y* -> ../../sdi
lrwxrwxrwx. 1 root root  9 Nov 25 07:37 ata-WDC_WD60EZAX-00C8VB0_WD-WX*****5J* -> ../../sdb
lrwxrwxrwx. 1 root root  9 Nov 25 07:37 ata-WDC_WD60EZAX-00C8VB0_WD-WX*****1C* -> ../../sdf
lrwxrwxrwx. 1 root root  9 Nov 25 07:38 ata-WDC_WD60EZAX-00C8VB0_WD-WX*****4D* -> ../../sdh
lrwxrwxrwx. 1 root root  9 Nov 25 07:37 ata-WDC_WD60EZAX-00C8VB0_WD-WX*****HV* -> ../../sdg
lrwxrwxrwx. 1 root root  9 Nov 25 07:37 ata-WDC_WD60EZAX-00C8VB0_WD-WX*****A3* -> ../../sdd
lrwxrwxrwx. 1 root root  9 Nov 25 07:37 ata-WDC_WD60EZAX-00C8VB0_WD-WX*****UX* -> ../../sdc

で、HDD本体にもシリアルが書いてあるのでこれで突き合わせる。 物理的なスロット→シリアル、シリアル→デバイスIDを辿ったらこんな関係になってた。

1:WX*****33*:sde
2:WX*****A3*:sdd
3:WX*****UX*:sdc
4:WX*****5J*:sdb
5:WX*****HV*:sdg
6:WX*****4D*:sdh
7:WX*****1C*:sdf
8:WX*****4Y*:sdi

miniSASは2つあり、これが1-4(sdb..sde),5-8(sdf..sdi)に対応していると言える(配線もちゃんとminiSAS(1):1-4,miniSAS(2)=5-8で分けている)。どっちがどっちのチップを使っているまではわからないけど。デバイスIDの順序はちょっと変だけど。

ここを2つ入れ替えて2つのチップに分散するようにしてみる。d,eとh,iをいれかえてみる。

for DEVICES in "/dev/sdf:/dev/sdg:/dev/sdd:/dev/sde" "/dev/sdb:/dev/sdc:/dev/sdh:/dev/sdi"; do
  for RW in read write; do
    sudo fio -direct=1  -iodepth=16 -ioengine=libaio -rw=$RW -bs=1024k -size=10G -runtime=10s -filename="$DEVICES" -name="Sequential_${RW}_${DEVICES}"
  done
done
device RW スループット
sdf,sdg,sdd,sde Read 728MiB/s
sdf,sdg,sdd,sde Write 772MiB/s
sdb,sdc,sdh,sdi Read 763MiB/s
sdb,sdc,sdh,sdi Write 786MiB/s

ちょっとReadの結果が悪いかな?と言う感じもするが、500MiB/sだったことを考えると大きく改善した。 なので、1つのチップで4台を捌くよりも2つのチップで2台づつ計4台を捌いたほうが良い影響が出ると言えそうではある。負荷は分散したほうがよいのだ。

まぁRAID-6では全てのHDDに負荷がかかるので、8台の性能が出ないと意味ないんですが・・・。

mdadmでRAID6を構成する

mdadmで構成することにした。ZFSとか試したいけどチューニングとか面倒そうだし・・・LVMはちょっと難しいし・・・ そういえばbtrfsとかどうなんだっけ?と思ってたがまだ使わないほうがよいっぽい。

mdadmのインストール

sudo dnf install -y mdadm
# 既に構成済みのディスクをマウントしている場合はこれでスキャン
sudo mdadm --assemble --scan

RAID-6を作る

# RAID-6作成。/dev/md0 というデバイス名を通してアクセスできるようにしている
sudo mdadm --create /dev/md0 /dev/sd[b-i] --level=6 --raid-devices=8

# 進捗確認
cat /proc/mdstat

以下のように同期を行う。見ての通り800分以上かかるが、利用自体はできる。

$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdi[7] sdh[6] sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0]
      35162342400 blocks super 1.2 level 6, 512k chunk, algorithm 2 [8/8] [UUUUUUUU]
      [>....................]  resync =  0.1% (7128520/5860390400) finish=838.1min speed=116391K/sec
      bitmap: 44/44 pages [176KB], 65536KB chunk

/dev/md0はブロックデバイスのように振舞うので、あとはパーティションを切ったりファイルシステムを作ったりすればよい。LVMでPVとして扱ってもよいだろう(メリットは全くないが)

今回は直接XFSを作る

# /dev/md0に直接ファイルシステム(XFS)を作る
# 1分ほどかかる
sudo mkfs.xfs /dev/md0

ファイルシステムを作ったらマウントすることでいつものディレクトリのように扱える。

# /mntにマウントする
sudo mount /dev/md0 /mnt

ベンチマークを取りたいが、同期中は重いので一旦止める。

# RAIDのスピードを確認
cat /proc/sys/dev/raid/speed_limit_max
cat /proc/sys/dev/raid/speed_limit_min

#RAIDの同期を実質止める
echo 0 | sudo tee /proc/sys/dev/raid/speed_limit_max
echo 0 | sudo tee /proc/sys/dev/raid/speed_limit_min
for RW in "write" "read"; do
  sudo fio -direct=1 -iodepth=16 -ioengine=libaio -rw=$RW -bs=1024k -size=10G -runtime=10s -filename="/mnt/test.dat" -name="Sequential_$RW”
done

なんかこのベンチマークだと書き込みが伸びない・・・まぁいいか。

sambaを構成

# /mnt が何かファイルシステムをマウントしてあるものとする

# ディレクトリ作成
sudo mkdir /mnt/share

# /etc/samba/smb.confのバックアップ
sudo cp -p /etc/samba/smb.conf{,.bak}

# お試しの設定を作成
sudo tee /etc/samba/smb.conf << __EOF__
[share]
comment = My share
path = /mnt/share
public = yes
writable = yes
__EOF__

# smbdの再起動
sudo systemctl reload smb

# ユーザ追加
sudo smbpasswd -a ryozi

# firewallの穴あけの永続化(これは設定が保存されるだけで、まだ穴は開いてない)
sudo firewall-cmd --add-service=samba --permanent
# 設定をロードしなおす(これで反映される)
sudo firewall-cmd --reload

# SELinux関連で躓いたので一旦無効化。横着してごめんなさい
sudo setenforce 0

CrystalDiskMarkを使ってWindowsからの読み書きテスト

なんとなくディスクキャッシュが効いてベンチマークになってない気がする。SEQ1MQ8T1のWriteだけ負けてるけど性能はいずれも上回っている感じ。

今回作成したNAS

前回からあるNAS

前回からあるNASは4TB2台をRAID1にまとめたものを2つ用意して、LVMで2つのPVを1つのLVにして使っていたはず。なので、シーケンシャルな読み書きも200MB/sを下回るはずなんだけど、それを上回る数値になってる。

メモリが32GBなのでディスクキャッシュに乗り切らないようにファイルサイズを64GiBにしてみたけど、それもあまり効果なさそう。

バックプレーンの電源をどうとるか

最初、1個のペリフェラルケーブルからペリフェラル分岐ケーブル、SATA変換ケーブルを使って賄ってとりあえず動いたので動かしていた。けど、そもそも1個で動くならわざわざペリフェラルx2とSATAx1を要求するはずがないので色々調べてた。

ただ結果としてはよくわかってない。「安全側に倒す」という考えで「ペリフェラル+SATA」「ペリフェラル」の2つで供給することにした。

まず、なぜペリフェラルx2とSATAx1を要求するのかというと、現状は公式がそういっているから、という形となる。これ以上は基板とか読み取れないとわからない。

https://smallformfactor.net/forum/threads/jonsbo-n3-itx-nas-case-backplane.18942/

次に分けないと何が起きるかかんがえてみた。よくあるのはグラフィックカードの電源供給で同じで8pinを2つ要求しているなら1つのレーンを2つに分岐するのではなく2つのレーンで供給しろ、という話がある。そんなことしなくても使えていたよ、という話はあるけど、あの4本の線(12V*2本)にその電流を流して大丈夫とは思えない。やってることはタコ足配線と一緒なので。

超蛇足だが、電源自体でシングルレーン/マルチレーンという区分けがあり、メジャーなのはシングルレーン。電源の仕様を見るとわかりやすくて同じ12Vでも12V1,12V2,12V3...と分かれているものはマルチレーンマルチレーンはそれぞれ独立しているので、突然の電力消費で電圧降下が起きる影響を減らしてくれるが、1レーン辺りの最大電力が減ってしまうのでちゃんと考えて繋げないといけなくなる。シングルレーンは究極的には1レーンしかないのでざっくり言えばどう繋げても電力は供給できるということになる。今回はシングルレーンな電源の話にする。ここで言うレーンはそのレーンとは別の意味であることが言いたかった。実際なんて言えばいいんだろう。

ということで「1本で賄うのはよくないのでは?」と思い始めた。

まずピーク時の電力を調べてみた。WD60EZAZは製品情報によると12Vでピーク時1.75A(26.25W)の負荷がかかる。これが8台あるので(12V+1.75A)8台=168Wが瞬間的にかかることがある、ということになる。ここにファンも加えると+1.5W2台ぐらい入るので大体171Wで、12V電源とした場合14.25Aを流す必要がある。バックプレーンはこれを3つの電源から供給する必要がある。

一方SF450は12Vは37.5A(450W)まで出せるシングルレーンな電源であり十分足りる。しかしこれは電源容量と消費電力の話であり、ケーブルやコネクタ自体はこの負荷に耐えれるかどうかは別である。電線は何も無限の電流を流せるものではなくて、概ね安全とされている値が決まっているはずである。しかし、調べてみても明確な仕様はなく、ケーブルにおいては言及もほとんどされてないようだった。SATAコネクタは15pinある接点のうち12V供給できる接点は3本あり1本あたり1.5A(合計4.5A)ぐらい供給できると言われている。ペリフェラルのほうはもっと情報がないが、Wikipediaによると11Aぐらいまでは大丈夫とされているらしい。結構いい加減なんだな

  • 6Pinのコネクタ: 12V 75W = 6.25A
  • 8Pinのコネクタ: 12V 150W = 12.5A
  • SATAコネクタ: 12V 1.5A * 3pin = 4.5A
  • ペリフェラルコネクタ: 不明 (18AWGの時は11A?)

そもそも、電線に流せる電流の大きさって具体的な値があるはずなのになんでこんな曖昧なんだ?と調べた。電線とはいえ物質なので抵抗がある。抵抗があるので電流が流れると比例して熱が発生する。というのは学校のお勉強で習ったのでわかっているが、その先がよくわかってなかった。調べてたら「プリント基板に大電流を流した結果... 1mm幅に1Aは本当か。 - YouTube」 という動画がよくて、こういう文字だけじゃなくて実際に試してくれるのは動画ならではだよなと思いながら見ていた。とはいえ分かったのは安全に流せる電流は導体の断面積とかで決まるということぐらいだった。それはそう。

今回の場合、電圧が12Vであるということは分かっているが、電圧はあまり関係ないらしい。単純にその電線にどれぐらいの電力を流せるのかを知る必要がある。これは「許容電流」といってある程度規格で決まっているらしい。発熱するぐらい大量の電流は流せるけど実際そんなことしたら使い物にならんよねということでいい塩梅の設定がある…という理解。で、海外ではAmerican Wire Gaugeという標準があり、ペリフェラルコネクタなどに使われている電線が「18AWG」に当たるらしく、10A流し続けると60度になってしまうらしい(表の見方があっているかわからないけど)。14Aなら75度で済むと。ピーク時だしもしかしたら1本でも行けるかもしれない。なお、日本でも一覧表があるけど、どこみてもばらつきがあるのは何なんだ…なんもわからん

とはいえ、1本に負担をかけてしまうのはよろしくないということはわかっているし、そもそもそれができるならわざわざペリフェラルの口を2個も用意しないということなんだろう。(これはバックプレーンのコネクタ部分は基盤上の配線パターンの事情もあるだろうけど)

SF450においては、6pin(SATA/ペリフェラル供給用)は2口ついているので、この6pin→ペリフェラルケーブルを何とかもう1本用意することができれば安心は得られるはず。調べてみたらCorsairのケーブル単品はしばしば出回っているらしい。プラグイン式はこういう時に役立つ?

ということで取り寄せて2本から取るようにした。考えすぎなのかもしれないなー。

*1:これもAlmaLinux 9では動作しなくなってて困ったりしていた