2 ポイント 投稿者 GN⁺ 2024-04-30 | 1件のコメント | WhatsAppで共有
  • Terramaster F2-221にNixOSを導入した後、外付けUSB SSDが障害になったため、内部にNVMeブートSSDを搭載するためのバックプレーンを自作した
  • 既存のF2-221バックプレーンはSATAと電源回路中心で、F5-422の写真分析からTerramasterがASM1061 SATAコントローラ2基でベイを拡張している方式を確認した
  • PCIe差動ペアはF5-422の写真、ASM1061データシート、カップリングコンデンサの位置を突き合わせて追跡したが、一部ピンは最後まで確認できず、PCIe2ピンアウトも検証していない
  • プロトタイプPCBはM.2 NVMeスロットをPCIe x1 Gen 2ラインに直接接続し、BIOSにPatriot P300 128GBが表示され、ハードディスクも正常に動作した
  • 最終版F3 Backplaneは3.3Vレールを直接使うよう簡素化され、数週間にわたるNVMeブートとbtrfs scrubでもエラーなく動作し、KiCadプロジェクトがGitHubで公開された

外付けUSB SSDをなくしたいという出発点

  • Terramaster F2-221はIntel J3355ベースの標準的なx86_64 NASで、標準のTOSの代わりにNixOSをインストールすること自体は簡単だった
  • SATAコネクタ2基がどちらも4TBハードディスクに使われていたため、OS用ストレージとしては外付けUSB SSDを接続する必要があった
  • 棚の後ろのNAS周辺に外付けSSDの置き場所を確保し、物を動かすたびにケーブルを気にしなければならず、内部ストレージが必要になった
  • マザーボードにはTOSブートストラップ用の内部USBコネクタがあったが、USB 2.0のためブートSSD用途には不向きだった

F2-221とF5-422バックプレーンの比較

  • F2-221のマザーボードにはバックプレーンPCBが挿さるPCIe x4形状のコネクタがあったが、既存バックプレーンにはPCIe-SATA変換ICがなかった
  • SATAコネクタはPCIeエッジコネクタに直接配線されており、実際のピン配置は標準PCIeではなく非標準ピンアウトだった
  • Intel J3355はSATAポート2基とPCIe Gen 2レーン6本を提供するため、Terramasterの4ベイ・5ベイモデルはPCIeレーンでSATAポートを増やしている可能性があった
  • Terramaster F5-422レビューの高解像度写真からASMedia ASM1061 IC 2基を特定した
    • ASM1061はPCIe Gen 2 x1ベースのSATAコントローラで、SATAポート2基を提供する
    • F5-422では、最初のASM1061がバックプレーンの3・4番ポートに、2基目のASM1061が5番ポートに接続されていると判断した
  • F2-221マザーボード裏面でも、F5-422バックプレーンでPCIe信号と思われたピンが実際に配線されていることを確認した

PCIe信号のリバースエンジニアリング

  • F5-422バックプレーン写真とASM1061データシートをもとにPCIeレーンを追跡したが、複数の差動ペアがビアを通って内部レイヤーに入っており、TXRXREFCLKの区別は容易ではなかった
  • 確認できる手がかりの一つは、PCIeコネクタのあるピンがASM1061のPERST#に接続されていたことだった
  • PCIeでは伝統的にTX差動ペアにカップリングコンデンサが入ることを利用して、信号方向を判別した
    • ASM1061のTXに接続される差動ペアにはバックプレーン側にカップリングコンデンサがあるはずだった
    • CPUとマザーボードの観点では、その差動ペアはRXになる
    • ASM1061のRXに接続される差動ペアは、マザーボード側のカップリングコンデンサ位置から推定した
  • REFCLKは、各PCIe x1インターフェースのTXRXに最も近い残りの差動ペアだと推定した
  • KiCadにF5-422バックプレーン写真を取り込み、外層トレースをビアまで追い、内部レイヤーの配線可能性を比較しながら、PCIe1ピンアウトをおおむね検証した
  • 一部のピンは既存のF2-221バックプレーンで未接続だったか、内部レイヤーに入っていて用途を確認できなかった
  • PCIe2ピンアウトは検証していない

電源回路の再構成

  • F2-221バックプレーンの片面にはPCIe信号用ICはなかったが、MOSFET、ダイオード、抵抗、コンデンサ中心の電源回路が多くあった
  • クローズアップ写真で部品とトレースを確認し、KiCadで回路図を描き直した
  • 回路はSATAポートの各電源レールごとに1つあるスロースタート・ロードスイッチ構成だと判断した
    • F2-221にはSATAポート2基 × 電源レール2系統で計4個ある
    • F5-422には5ベイに合わせて計10個ある
  • SATAコネクタの接地ピンの1つであるP4がハードディスク接続時にGNDへ引き込まれ、ロードスイッチのenableピンのように使われる構造だった
  • この構造は、ハードディスクのホットプラグ時に大きな突入電流でコネクタとドライブの間に火花が出るのを減らすためのものと思われた
  • 多数の個別部品をはんだ付けしないで済むよう、内蔵スロースタータ付きの統合ロードスイッチIC onsemi NCP45521-Lを選んだ

SATA SSDではなくNVMeを選んだ理由

  • 当初はASM1061でSATAポートを追加し、SATA SSDをケース内に貼り付ける案を検討していた
  • M.2コネクタはバックプレーン固定レールの間に収まるスペースがあり、左右の余裕が1mm未満という狭さだったが搭載は可能だった
  • SATA M.2 SSDを使うには、PCIeをSATAへ変換するコントローラが必要だった
    • F5-422のようにASM1061を使う方式が可能だった
    • ただしASM1061 IC単体の入手が難しく、ASM1061搭載PCIeカードからICを取り外す必要があった
  • NVMeはそれ自体がPCIeベースなので、追加コントローラなしでPCIeレーンをM-key M.2スロットへ直接接続できる
  • NVMe SSDは通常PCIe Gen 3以上の4レーンを使うが、この設計ではPCIe Gen 2の1レーンしか使わないため、速度はSATAより速くならない見込みだった
  • それでもコントローラが不要で、配線が単純になり、NVMe SSDの選択肢も多いため、この用途にはNVMeの方が適していた
  • 実際のSSDとしてはPatriot P300 128GBを現地で14.90ユーロで購入した
  • BIOSがNVMeから直接起動できるか不確実だったため、最悪の場合は内部USB 2.0スティックにブートパーティションを置く案も考えていた

プロトタイプPCBの製作とテスト

  • 新しいPCBはケースのバックプレーン取り付け構造に合う必要があり、PCIeエッジコネクタとネジ穴の位置は正確でなければならなかった
  • PCBサイズとエアフロー制限も考慮する必要があり、プロトタイプは電気的検証だけでなく機械的フィット確認にも重要だった
  • 既存PCBを定規とノギスで測定し、正面写真のレンズ歪みを減らしたうえでKiCadに取り込み、コネクタ・ネジ穴・外形を合わせた
  • プロトタイプでは未確認ピンをテストポイントとして引き出し、3.3Vレールを遅れて発見したため、5Vを3.3Vに変換するバックコンバータを入れた
  • JLCPCBに4層PCBを発注し、数週間後に受け取った
  • DFNパッケージのはんだ付けは初めてで、部品は非常に小さかったが、電源とGND間の短絡を確認し、スマートフォンのクローズアップで実装状態を点検した
  • NASに挿して起動すると、BIOSのブートオプション一覧にPatriot P300 128GBが表示され、NVMeから直接起動できた
  • 懸念していたCLKREQラインは見つけられなかったが、マザーボードのどこかで常にLowに引かれているようで、REFCLKは動作していた
    • CLKREQは通常、SSDが必要なときに基準クロックを要求するために使われる
    • この設計ではASPMは動作しないが、常時稼働するサーバーのブートドライブなので大きな問題ではないと見なした
  • ハードディスクも接続後に正常動作した
  • テストとデバッグのために作ったプロトタイプがそのまま正常に動作したため、未確認ピンの用途はもはや重要ではなくなった

最終版F3 Backplane

  • プロトタイプは正常動作したものの、テストポイントが残っておりケース内でやや斜めに収まっていたため、最終版V1.0を作り直した
  • 最終版ではバックコンバータを取り除き、M.2コネクタをPCIeコネクタの3.3Vレールへ直接接続した
  • 位置を少し調整してプロトタイプの傾きを減らし、テストポイントを削除してロゴを追加した
  • 名前はF2に1つ足したという意味でF3 Backplaneとした
  • JLCPCBに再度発注して受け取った最終PCBも、プロトタイプと同様に正常動作した
  • ハードディスクを対象に全体のbtrfs scrubを実行したが、エラーは発生しなかった
  • 数週間にわたってNVMe SSDからシステムを運用したが、hiccupなく動作した
  • SATAコネクタのはんだ付けは、内部GNDプレーンにthermal reliefを追加していなかったため難しく仕上がりも粗かったが、この問題はGitHubリポジトリで修正されている

性能と公開資料

  • NVMe SSDのhdparm結果は次の通り
/dev/nvme0n1:
 Timing cached reads:   4554 MB in  2.00 seconds = 2279.68 MB/sec
 Timing buffered disk reads: 1222 MB in  3.00 seconds = 407.22 MB/sec
  • NVMe SSDとしては高速ではないが、PCIe Gen 2の1レーンしか使っていないため予想通りの結果だった
  • ブートドライブ用途としては十分な性能だった
  • KiCadプロジェクトはGitHubで公開されている

1件のコメント

 
GN⁺ 2024-04-30
Hacker News のコメント
  • DFN パッケージをはんだ付けする方法としては、ほとんど完全にぶっ飛んだ方法に近いが、面白そうではある
    不思議と動く可能性はあるものの、一貫した信頼性は期待しにくく、一回限りのプロジェクトなら十分という感じ

    • 実際には8回すべてうまくいった
      幸い DFN パッケージの底面パッドが両端の端まで届いていたので可能だったが、QFN ではこの方法は通用しなさそう
    • なぜ「多すぎる」ソルダーペーストが必要なのかは分からない
      似た作業を普通のはんだで何度もやったことがあるが、各パッドに少し多めに載せるだけでよく、ショートするほどは避ければいい
      フラックス、できれば次の加熱工程でも長く持つロジン系フラックスを塗り、ホットエアでフットプリント全体を温めてから IC をそっと載せればいい
      こうすれば全体を温めるために IC に長時間ホットエアを当てなくて済む
    • 十分に有効な方法だと思う
      いつもサーマルパッドにビアをいくつか入れ、反対側の銅箔を露出させておけば、ビアがソルダーマスクで塞がれず、余ったはんだを吸い取ってくれる
      ごく低予算の SMD 作業では、反対側からはんだごてでサーマルパッドを温めることもできる
      チップを押さえてもよいが、パッドとの位置合わせには注意が必要
      QFN で外側の端に大きなはんだ玉ができること以外、ソルダーブリッジはほとんど見たことがない
      最近のはんだ合金とソルダーマスクはブリッジをかなりよく防いでくれるし、はんだはパッケージ本体とソルダーマスクの間に留まるより、金属にだけ付こうとする性質が強い
    • パッドをチップの下から外側へさらに伸ばしておくと、必要なときに手はんだがずっと楽になる
  • コンシューマー向け NAS ビルドにもっと標準化が進んでほしい
    ASUSTOR に、Mini ITX 互換のバックプレーンやアダプターを作る気はないのか、何年も聞いてきた
    数年後にバックプレーンだけ差し替えられたり、Pico ITX のような形で SBC を入れられたりするといい
    5年や10年経つと NAS をまともにアップグレードしにくいのが嫌だ
    メインボードだけ交換できれば、多くの 1Gbps NAS を 2.5Gbps や 10Gbps に引き上げられ、シャーシを埋め立て地に送らず、より長く使える

    • Framework がこの分野に参入してくれるといい
      演算部だけが古くなったのに、NAS シャーシとバックプレーンまで廃棄するのは無駄が大きすぎる
      Laptop 13 のメインボードとの相乗効果もあり得るし、ノートPC級の TDP に ARM の可能性まである
      ただし NAS アプライアンス市場は「プロシューマー」と小規模事業者くらいで、あまり大きくなさそうで、差別化要因はハードウェアよりソフトウェアにある
      人々が Synology を買うのはハードウェアではなく DSM のためだ
      Framework には垂直統合の計画はないとどこかで読んだ気がして、残念に思う
      省電力やタッチパッドの感触のようなところまで最初からうまく動く、Framework 対応 OS があるといい
    • ASUSTOR の FLASHSTOR が、統合メインボード+PCIe スイッチ+はんだ付け CPU+はんだ付け RAM ではなく、6/12ベイの NVMe 拡張カードだったらよかった
      そういうものを普通の PC にそのまま挿したいのだが、見つけた製品は4ポートのものか、高すぎるものばかりだった
    • Supermicro のボードを買い、バックプレーンは自作するか既製品を使い、メインボードが対応できる範囲で拡張カードを追加すればいい
    • とはいえ、そうするとメーカーは100ドルのシャーシとメインボードを500ドルで売れなくなる
      答えはもう自分で出しているようなものだ
  • 人々が進んで掘り下げる深さと労力には、いつも感心させられる
    ギターやハードウェア改造のように、失敗すると実際にお金を失う作業ほどなおさらそうだ
    こういうプロジェクトにいきなり手を出す前に、はんだごてや木工工具の経験を別のところで積む必要がありそうだ
    ハードウェアやソフトウェアをもっと気軽にいじれるハックしやすい小型ボックスの市場が、なぜ大きくないのかも気になる
    OSを取り除いて、一般的なOSやカーネルに入れ替えられるコンシューマー価格帯のNASがあるといいのに
    もしかすると、実物の物理オブジェクトを改造することに自分が怖がりすぎているだけなのかもしれない

    • 合計**£1000**でNASを自作した
      物理ディスク24TB、利用可能容量16TB(Raid Z2)で、Ubuntu LTS Serverを動かし、必要なコンテナはPortainerでDocker上に立ち上げている
      誰でも使いやすいクリック式GUIではなく、SMBマウントのようなものはターミナルで自分で作る必要があるが、保守するには十分簡単
      ハードウェアはAsrock Rack C246 WSI Mini ITXマザーボード、32GB ECC RAM、Intel i3-9100T、IronWolf 4TB NASドライブ6台、奥行きの短い2Uラックマウントシャーシ、1TB Samsung 850 Evoブートドライブ
      アイドル時の消費電力は23Wで十分低く、負荷時は65Wまで上がる
      ディスクは10分間非アクティブならスピンダウンさせているが、それでも年間ロード/アンロードサイクルは約1万回程度で、定格60万回に比べれば問題ない
    • 一般消費者向け価格帯ではないかもしれないが、SupermicroはNAS向けにかなり良いハードウェアを作っている
      自分でドライブを入れて、好きなOSを載せられる
      183TB構成でTrueNAS(ZFS)を動かしている機材があるが、とても良い
      基本的には、ドライブスロット、バックプレーン、SAS/SATAポート、コントローラ容量が多い標準的なx86ボックスだ
      中古市場もかなり活発
      ただし、1台のシャーシに10台以上のドライブを入れたい人を狙っているので、コンシューマー向けと言うには微妙
    • 今、良い選択肢があるのか気になる
      NASを1台買おうかとずっと考えているが、役に立たない、あるいは敵対的なクラウド統合のせいで自分のデータをスキャンされかねない独自ベンダーOSは使いたくない
      ハードコードされたパスワードのバックドアが残っている可能性も嫌だ
    • 3.5インチHDD 2台、M.2 NVMe 2台、2.5GbE LAN 2ポートに対応するNASベアボーンがある
      BIOSの品質は分からず、RAMは付属しないが32GBまで拡張可能で、OSは自分で用意すればよい
      Intel Alder Lake N100モデルは$189: https://aoostar.com/products/aoostar-r1-2bay-nas-intel-n100-...
      Ryzen 5700モデルは$299: https://aoostar.com/products/aoostar-r7-2-bay-nas-amd-ryzen-...
    • 自分でいじる気があるなら、選択肢はかなり多い
      Raspberry PiをNASとして使っている人もいて、遅いものの安価なローカルバックアップ用途なら機能する
      DNS-320のような古い一体型NASもroot化して、セキュリティパッチが提供される比較的新しいDebian系を動かせる
      ただしCPUとRAMの仕様が非常に低いので、コマンドラインに慣れている必要がある
      古いHP Proliantサーバー(gen8あたり)を買って、16TB HDDを4台挿し、5台目のドライブから起動する方法もある
  • 「このUSBヘッダーはUSB 2.0だけなので、この目的には選択肢にならない」という部分が気になる
    素晴らしいプロジェクトを疑っているわけではないが、NASでOS用にUSB 2.0がなぜ不適なのか知りたい
    起動時に読み込み、たまに少しデータを書き込む以外に、何かもっとしているのだろうか?

    • USB 2.0のブートディスクでNASを動かしているが、唯一の問題はsystemd-journaldが遅いディスクを念頭に作られていない点だ
      6か月分のログファイルに対してjournalctl操作をすると、journalctlの最適でないファイルアクセスパターンのせいで1〜2分はかかる
    • 記事には書かなかったが、このマシンでは軽いサーバー作業も動かしていて、USB 2.0メモリではイライラするほど遅かった
      もちろん、これを作った本当の理由が、単にいじくり回すのが楽しかったからだという点は否定しない
  • 悪いハッカーみたいだ
    NASに外付けドライブを接続しなければならない同じ問題があったが、ただベルクロでNASの上に貼り付けた

    • こういう用途にはグルーガンがいちばん手に馴染む
  • 自宅で作ったNASを入れるためにレゴで作った「カスタム」ケースより、ずっと格好よく見える
    USB HDDを4台ハブに挿し、そのハブをNvidia Jetsonに接続した
    一体型にしたかったし、互換レゴがとても安かったので気軽に実験できた
    楽しくもあったが、これはずっとプロっぽく見えて少しうらやましい

  • 驚くほど見事でエレガント
    推測、多少の試行錯誤、導通確認、そしてロードスイッチICをかなり軽やかに置き換える方法だけでここまで到達したのはすごい

    • 複数のフォーラムやStack Exchangeから膨大な情報を集め、なかには渋々事実として受け入れざるを得ないものもあった
      それでも最終的にはうまくいった
  • 本当に見事な解決策だ
    同じNASの5ベイモデルを使っていて、内部USBにSamsungのUSBメモリを挿してTrueNAS Scaleをインストールした
    Teslaのドライブレコーダー用途で広く使われている製品を選んだので、少なくともある程度の耐久性はあると見ていた
    今のところ満足しているが、CPU性能はまだかなり不足しているので、より強力なものへアップグレードする予定

    • CPU性能が不足しているのは本当にその通り
      マザーボードをARM Compute Module用のカスタムキャリアや新しいLattepanda muに替えることも考えたが、ひとまずこうして手間をかけて作った新しいプロジェクトを使うべきだと思っている
  • よくできているし、人々が自分のハードウェアを直接コントロールするこういうプロジェクトは好き
    公開の形でドキュメント化している点も、もう一度称賛に値する
    ただ、エアフローの問題が起きるのか気になる
    元のPCBと修正版PCBの中央には大きな穴があり、ドライブの上に空気を流すためのものだと推測される
    でもNVMeドライブがそれを塞いでいる
    おそらくNVMeの端の周りから十分に漏れて通常のドライブ冷却には問題なく、おまけに世界で最もよく冷えるNVMeが手に入るかもしれない
    それでもスペースはかなり窮屈に見える

    • その点は自分も心配していた
      空気力学に詳しいわけではないので確信は持てないが、穴を通ってある程度の空気は通ると思っている
      SSD用のネジスタンドオフをPCBの左端まで寄せておいたのも、右側により多く空気を通す意図だった
      少なくとも今のところ、冷却性能が悪化したとは感じていない
  • 直接使うことはなさそうだけど、それでもワクワクする
    こうやって深く掘り下げ、学び、学んだことを共有する姿を見ると、本当にうれしいし刺激になる