写真や動画を内蔵HDDに置いていたのだが、容量・性能ともに限界を感じていたため強いNASを作ってそちらに移行した次第。

元の状態と課題

Windowsシステムや比較的小さくランダムアクセスが必要なデータ(各種ソースコードやLightroomのカタログなど)は内蔵のSSDに置いている。これらは高々500GBであり、昨今のSSDの容量の前では大したことがない。

問題は10TB以上ある写真や動画で、これを保持するために大きいHDDを1本PCに搭載していた。そして近い容量のRAID1の安いNASを置き、そこにWindowsのアプリ(BunBackup)を使って毎日バックアップを設定していた。さらに気が向いたときにUSB接続のHDDにもバックアップを別途とっており、3重(?)バックアップ体制としていたのが、以前の状態である。

この状況を図にするとこのようになる。

ストレージ構成の図。Windows PCに14TBのHDDが内蔵されている

主なワークフローとしては、Lightroomで画像をSDカードからHDDにコピーしてインポートし、現像したJPEGファイルをOneDriveに出力して保存するような感じ。動画の場合もLightroomでコピーして、DaVinci Resolveで編集、出力先は同じくOneDriveとしている。元のでかいファイルはHDD, 編集して出力した小さいファイルはOneDriveという形だ。

なんとか運用できていたのだが、RAWデータや元動画が置かれるHDDの容量が常に逼迫しているという問題があった。今回も2年前に大きなサイズにしたばかりのHDDが一杯になってしまったため、容量の増加が急務となっていた。

またHDDなのでアクセスが遅いという問題もあった。特に50MP以上のRAW画像を現像しているとHDDアクセスが詰まるのか長時間(30秒~)Lightroomの画像が表示できないこともあり、こちらも対策が必要であった。

要件と機種選定・調達

前出の課題を解消するため、あたらしいストレージを用意することにする。

  • 実容量:25TB以上
    • 現データが約11TBあり、直近は2.5TB/年でデータが増えていることを踏まえ、この先5年使える容量を設定
    • この容量は単体のHDDでは実現できないため(2024年6月現在、普通に買える上限が20TB)4本以上のRAIDを組む必要がある
  • 性能:シーケンシャルリードで500MB/s以上
    • 特に根拠はないが、これくらいは出てくれないと高速化の恩恵を感じられないと思ったため
    • これを実現するためにはSSDキャッシュと10GbEに対応している必要がある
  • 拡張性:HDDを1,2本追加できる余地があること
    • 4本で運用を開始し、容量が不足したら増やせる状態が望ましい
    • Hot spareまでやる気はないが……
  • 10GbEがRJ45(いわゆるLANケーブル)ではなくSFP+であること(後述)

単にHDDを大きくするだけだと性能の問題が解決できないため、10GbEのNASを作り、そこにHDDのデータをすべて移す方向で考えた。

国内メーカーのNASはいまひとつ買う気にならないので、QNAPとSynologyのラインナップを見ながら検討する。Synologyは純正の10GbE SFP+ボードが死ぬほど高い(4万~)ので躊躇していたのだが、MellanoxのNICをさせば動くという情報があり(後述)、合計で安くあがりそうなSynologyのDS1621+を買った。約15万円なり。QNAPは全体的にやや高く、ちょうどいい機種がなかったのが残念。

HDDは東芝のMG09で、泣く子も黙るエンタープライズグレードである。これを選んだのは単に18TBのHDDで一番安かったからなのだが、何にせよグレードが高いのは良いことだ。1本あたり約4.5万円で、4本買ったら18万円になった。

SSDキャッシュの動作はReadのみか、Read&Writeを選ぶことができる。ReadキャッシュはSSDが壊れてもデータが失われることはないが、WriteキャッシュはSSDが破損した場合データ損失が発生する。このため、Writeキャッシュを有効にする場合はSSDを2枚用意してミラーリングできるようにしないといけない(SSDが1枚のときはWriteキャッシュの設定ができないようになっている)。メインのユースケースにおいてシーケンシャル書き込みはメディアからの画像コピーになるので、メディアの速度より速い必要はない。CFeでも700MB/sあれば十分だ。余計なリスクを増やすのも気が進まないので、まずはReadキャッシュのみにすることとした。容量は1TBあればよいだろう。そこまで速度も必要ないのでコスパ重視でKIOXIAのExceria plus G3を買った。ちなみに管理画面からキャッシュヒット率を見ることができるのだが、過去何分間の数値なのか、など一切わからないのでピンと来ない。

メモリも変更できる。速度にどのくらい寄与するのかというと大いに疑問ではあるが、メモリ帯域がないのは首がないのと同じなので1デュアルチャンネルにはしておきたい。ECCのSO-DIMM DDR4なら普通に使える?ようなので、適当に8GBのECCメモリを2枚買った。2枚で12000円程度。悲しいかな元から入っていた4GBはゴミ箱行きである。後から管理画面を見ると余り(13GB)が全部Cachedと書いてあるので、OSレベルのファイルキャッシュに使われてはいるらしい。ランダムアクセスに効きそうな感じもするので、そこそこ積んでおいてよかったかもしれない。

NASの箱の上にHDD, SSD, メモリが積んであるようすの写真

メモリ、HDD、SSDは普通に説明を読みながら装着するだけである。ほとんどベアボーンPCの趣。

10GbE

10GbEを使うにあたり10GBase-Tは発熱が大きいので避けた方がよいという話をよく聞くので、SFP+を導入することにした。ちょうど最近あたらしいチップを採用した安くて低発熱の中華10Gスイッチが出てきているのもあり、小規模な10GbE環境がかなり安く構築できるタイミングである。少し前だったらもう数万円かかっていた気がする。

NAS, PCの間を10GbEでつなぐにあたり、NICが2つ(NAS用、PC用)、スイッチが1つあればよい。NICは鉄板という噂のMellanox2のConnectX-3がAliExpressでやたら安く買えるので、これを2枚調達した。MCX311A-XCATがSFP+用とのこと。

机上のNICの写真

2枚で1万円以下なのだが、どう見ても新品だしなんでこんなに安いのかよくわからない。Made in Israelという文字が頼もしいような気もするが昨今なんとも申し上げづらい。

素性もわからないので、一応ファームウェアアップデートをしておく。ぐぐって出てきた説明のとおりにやればよい。ファームウェアはこちら

ただしfirmware-toolsは最新のものだと動かなかった(mst statusとしてもデバイスが見えない)ので4.22.1-406-LTSを使った。最近このへんのことをぐぐって出てくるのってRedditばっかだよな。ドライバはここからダウンロードできるが、ConnectX-3はWinOF-2ではなくWinOFなので注意。

2枚ともファームウェアを2.42.5000にアップデートして、PCとDS1621+にそれぞれ装着する。PCI-E x4なので、PCにもx4対応スロットが必要である。レーン数に注意。x1だと帯域が足りないからね、しょうがないね。NAS側はロープロファイルのブラケットに付け替える必要あり。

NASにNICを差した様子の写真。拡張ボードが見える。

(Reddit情報通りではあるが)なんと何もしなくても差すだけでNAS側はちゃんと認識し(LAN5として表示される)10GbEが使えるようになる。LANごとにIPアドレスが違うので、LAN5のアドレスをちゃんと選んで接続することが重要(?)かもしれない。

スイッチは最近よく見る中華スイッチの1つを買った。これも5000円しない。2ポートSFP+があり、他が2.5GbEという私の環境にぴったりの構成といえる。2.5GbEポートで上流(?)に接続し、NASとPCをSFP+ポートにつなぐ。同じ室内ならケーブルはDACでよいので、これも1本2000円くらい。ケーブルだけはRJ45より高いがそれ以外はSFP+の方がだいぶ安い。そのうちRJ45が巻き返してくるのかもしれないが、2024年現在SFP+を使うのが発熱・コストの面では最適解と思われる。

これでいい感じと思ったのだが、どうもこのスイッチの2.5GbEポートに複数PCをつなぐと性能が出ない。上流への2.5GbEを1本、SFP+を2本だけをつなぐ限りは十分な性能が出るがそれ以上つなぐのはやめた方がよさそうだった。

なお、ConnectX-3はIntelのCPUだと動かないとかいう噂もあり、その場合はConnectX-4の方がよいらしい。私はAMD派だからか全く問題なかった。

運用の変更

古事記にも書いてあるように「RAIDはバックアップではない」ので、NASからのバックアップ先として旧NASを流用する。かつてはRAID1だったがサイズが足りないのでRAID0に変更し、ここにバックアップする。SynologyのアプリストアでHyper Backupなるアプリを使うとrsyncをスケジュール実行することができ、毎晩新NAS→旧NASにrsyncするように設定しておいた。

また以前使っていたUSB HDDはとうの昔に容量が枯渇しているのでこれも捨て、2つの内蔵HDDに分けて手動でバックアップするのがよさそう。

結果

ということで完成。

棚にNASが置いてある様子の写真。正面から撮ってあり、光るLEDが複数見える

堂々たる偉容。例の「ママ、どうしておうちにサーバーがあるの?」待ったなしである。

しかしここでさらに問題があり、OneDriveのフォルダがNASにあるとWindows起動時にOneDriveのアプリがフォルダを見失ってしまいまともに使えない状態になってしまった。やむを得ずシステムのSSDを2TBのものに買い換えて、OneDriveはそちらに移動した。

結果、構成はこのようになった3

ネットワーク構成の図。NASとPCが10GbEで接続されている

できたNASをネットワークドライブに割り当てる。ネットワークドライブは一部アプリから表示されないことがあるので、この設定をすると参照できるようになる。

早速CrystalDiskMarkを実行した結果がこちら。

CrystalDiskMark実行結果のスクリーンショット。シーケンシャル読み書きが1100MB/sを超えているのと、最も細かいランダム4Kでも50MB/s以上の読み書き速度が出ている

速い速すぎる。参考に、買い換えたシステムのSSD(SN850)の結果がこちら。

CrystalDiskMark実行結果のスクリーンショット。シーケンシャル読み書きが7000MB/sあり、非常に高速

そしてかつて使っていた使用率99.5%を越えている14TBのHDDの結果がこちら。

CrystalDiskMark実行結果のスクリーンショット。シーケンシャル読み書きが120MB/s台、最も細かいものだと1MB/s程度の値

空き容量がほとんどない青息吐息のHDDと比較すると圧倒的と言ってよいほどのパフォーマンスが出ている。シーケンシャルアクセスは10GbEを使い切っているし、細かいアクセスはNVMe SSDに近い速度が出ている。当然NASの方がレイテンシは大きいのだろうが、HDDよりは遙かにSSD寄りのパフォーマンスが実現できているといえるだろう。

不思議なのはWrite cache無効のはずなのにシーケンシャルWriteアクセスがほぼワイヤーレート出ていることだ。DRAMで一旦受けているのか、書き込みを4等分すると実は間に合っているのか、どういう理由でこの速度が出ているのかよくわからないがとにかく速いので偉い。

実際にLightroomから使ってみると、CFeからのインポートも500MB/s以上出るし、大きいRAW画像を送りながら現像しても詰まることがない。体感上わかるレベルでパフォーマンスが改善したので成功したと言って良いだろう。ただし合計35万円以上かかっており、費用対効果という観点ではやや疑問もあるが、PC単体では実現できない性能なので必要なコストだったということで結論としたい。

  1. 組み込みおじさんにはいろいろな苦い記憶がある 

  2. MellanoxはnVidiaに買収された 

  3. 無駄にスイッチが多いので減らしたい感じはあるが、10GbEの16ポートスイッチとなるといよいよ誤家庭向けになってしまい価格的に厳しさがある。家でVLANなんかもやってみたいし、そろそろマネージドスイッチも欲しくなってくるが時間もないし将来の課題としておく。