UNRAID NAS 構築・インストール・設定

背景

これまでNASにはQNAPやSynologyの製品を使用していましたが、容量がいっぱいになり、自作のNASを構築することにしました。
パフォーマンスは求めず、バックアップストレージとして使用するためUNRAIDを採用しました。

UNRAIDとは?

UNRAIDについては以下のページに素晴らしくまとまっているので、一読ください。

UNRAIDのすゝめ - Actiphy Tech Club
鯖管のTです。 サーバー管理部屋ではいつもデータの短期・長期の保存について気にかけているのですが、最近はデータの長期保存用として UNRAID という NASシステムに注目しています。 UNRAID はその名のとおり、「

イメージとしては、これまで複数のHDDをPCに接続して手動で空き容量に応じてバックアップしていた作業を自動化したOSだと考えればよいです。
HDDごとにファイルシステム(デフォルトはXFS)を持っていて、UNRAIDは各HDDにファイルの割り当てを分散する作業を行います。またHDD故障時のことを考えてパリティディスクの機能も持っています。

自動ファイル分散+パリティがUNRAIDの特徴です

代わりに、RAIDと異なり1ファイルを各HDDで分散保存しないため速度が遅いというデメリットがあります。
そのため、仕組み上、バックアップストレージに向いています。

ハードウェア

ケース

ケースは、中国 Innovision の24ベイモデル(奥行き560mmの方)の製品を使用しました。
Aliexpress で購入できるケースで、ベイ数当たりのコストパフォーマンスが非常に良いです。

4u 19インチ560mm deepthラックマウントホットスワップアセンブリ24hdd 24ベイnvr ipfsクラウドストレージipcサーバーケースサポートatx電源 - AliExpress 7
Smarter Shopping, Better Living! Aliexpress.com

Innovision には他にも複数のベイ数のモデルがあるのですが、UNRAIDのライセンス形態や仕組み上、ベイ数が多いほど得なため、できる限りベイ数が多い方が良いです。
しかしながら、36ベイなどあまりにベイ数が多いと重量が重すぎるため運搬が難しくなり、ケースのコスパも悪くなります。このモデルで重量18.5kgです。パーツを組み込むとさらに重くなります。

ラインナップのうち、With 6G Mini SAS BP (1本のケーブルで4台分の接続)のモデルを選択しました。
ただ、今思えば、With 12G Mini HD BP (1本のケーブルで8台分の接続)の方がPCI-Eのスロット消費も減りますし、ケーブリングも楽なのでそちらにした方が良いかもしれません。私は拡張カード/ケーブルが心配だったため6G Miniの方を選びましたが・・・
SATAモデルはおそらくケーブリングが鬼のように大変だと思いますのでお勧めしません。

各種自作パーツ

基本的な自作パーツは以下の通りです。
いくつか考慮は必要ですが、一般的な自作PC用のパーツで良いです。
VMやアプリをインストールしないのであれば、CPU/Memory/SSDは最小限で問題ありません。
N100でも十分なくらいですがPCI-Eの拡張スロットが足りないため、私はCore i3ベースで組み立てています。

モデル価格備考
電源MSI MAG A850GL PCIE5\13,58012Vが600W以上あれば十分。24ベイ稼働で250W消費程度。
マザーボードMSI PRO B760-P WIFI DDR4/TW\11,980PCI-Eスロット3本以上。多い方が良い
CPUIntel Core i3 14100\18,690F付き+GT710の方が安いですがGPU内臓の方がPCIEを余計に消費しないため推奨
MemoryDDR4 16GB x 2手持ちのものを使用した。4GBでも十分らしい
SSDPG4-010TA1\8,680SSDはキャッシュ用のため無くても良い
USBメモリシリコンパワー USBメモリ 32GB\972OSはUSBメモリから起動する。FATで使用するため32GB以下推奨。SanDiskはバグありのため避ける

HDD

UNRAIDではHDDの構成が重要になります。
RAID 5, 6 では同じモデルの同容量のものを使用することが多いのですが、UNRAID はストレージ容量はどのような組み合わせでも構いません。
しかしながら、パリティ用のHDDだけは最大容量のものを使用する必要があり、可能であれば最大性能のスペックのものを使用したほうが良いです。

そのため、私は以下のような組み合わせとしました。

データ用 HDD

データ用 HDD には、SEAGATE ST20000DM001  を選びました。容量 20TB で、 価格は \37,422 です。最近安くなった熱アシスト方式の大容量 HDD です。SEAGATE からは 24TBモデルも発売されており、そちらの方が人気がありますが、後述する東芝HDDのラインナップ(22TBが最大)とUNRAIDの仕組み(パリティが最大容量)の関係で20TBとしました。年間ワークロードは120TBです。
寿命は従来品と変わらないようなのですが、HAMR (レーザー方式)の仕組みで高耐久を実現できているとは思えないため、データ用にのみ使用します。これを8台購入しました。

パリティ用 HDD

パリティ用の HDD には、東芝 MG10AFA22TE  を選びました。容量 22TB で、価格は \63,699 となります。
Seagate と異なり、MAMR (マイクロ波)の方式を採用しており、高寿命・高耐久・高性能を実現しています。年間ワークロードが550TBもあります。ただし Seagate よりも価格が高いです。
そのためパリティ用にのみ使用します。こちらを1台購入しました。


拡張カード・ケーブル

ストレージに接続するため別途拡張カードとケーブルが必要になります。

拡張カード

Mini SAS 6Gbps の拡張カードを用意します。
ケースのバックプレーンに6ポート接続する必要があるため、私は以下のカードを3枚用意しました。

95AD pci-e SFF-8087アダプタ8ポートpcieミニ/3.0ハードディスク増設カード6ギガバイトのハードディスクhdd ssd変換 - AliExpress 7
Smarter Shopping, Better Living! Aliexpress.com

ケーブル

SFF-8087 のケーブルを用意します。
0.5mでちょうどくらいです。6本用意しました。

Sata-ミニフォトケーブル,SFF-8087〜SFF-8087,Sff8087 36p 7p,12gbps,50/60/70/80/1cm - AliExpress 7
Smarter Shopping, Better Living! Aliexpress.com

合計

まとめると以下の通り。だいたい50万円ほどかかりました。

組み立て

詳細は省略。だいたいこんな感じに組み立てます。

途中経過:

完成系:

UNRAIDインストール

UNRAID のインストールはかなり簡単です。

  1. 公式サイトからツールをダウンロードしてUSBにOSを書き込む
    ※ この際にDHCPか固定IPを選ぶ。towerはそのままで良い。いずれも後から変更可能です。
    https://unraid.net/getting-started
  2. サーバー本体にUSBを挿して起動

以上です。特に悩むところはありません。

設定

DHCPの場合は http://tower.local/ にアクセスすると設定ページが開きます。
私が行った設定を記載しておきます。

時刻

SETTINGS > Date and Time
Time zone を変更

Enable auto start

SETTINGS > Disk Settings > Enable auto start
yes に設定

これを設定しておかないと、UNRAID起動時に毎回 WebUI にログインしてスタートボタンを押す必要がある。
とても面倒なため必ず有効にしておきます。

アレイ構築

MAIN > Array Devices

Slotsをディスク台数に合わせ、各項目にディスクを割り当て、START ボタンを押します。

するとアレイの構築が開始となります。
パリティ作成のため20/22TBの組み合わせでは2日~3日程度かかりました。

構築が完了すると以下のような画面になります。

ユーザー追加

USERS > Shares Access > ADD USER

必要事項を入力して作成

共有ファイルの作成

SHARES > User Shares > ADD SHARE

必要な項目を入力する。基本的に名前以外はデフォルトで良いです。
ただ、ある程度のパフォーマンスを求める場合はSplit levelを変更すると複数のHDDに同時アクセスができるためパフォーマンスが上がるようです。


以下は解説の翻訳です。

Primary storage (for new files and folders)

プライマリストレージは新しいファイルやフォルダーが作成される場所です。プライマリストレージの空き容量が最小空き容量設定を下回った場合、(設定されていれば)新しいファイルやフォルダーはセカンダリストレージに作成されます。

重要:排他アクセス(Exclusive access)共有の場合、最小空き容量設定は無視されます。

Allocation method

この設定は、Unraid OSが新しいファイルやディレクトリを作成する際に、どのディスクを使用するかを決定します:

High-water(ハイウォーター)
現在のハイウォーターマーク(高水位)よりも空き容量が多い最も番号の小さいディスクを選択します。ハイウォーターマークは、最も大きいデータディスクのサイズを2で割った値で初期化されます。どのディスクも現在のハイウォーターマークを超える空き容量がない場合、ハイウォーターマークをさらに2で割り、再度選択を行います。

High-waterの目的は、各ディスクにできるだけ多くのデータを書き込むことで(ディスクのスピンアップ頻度を最小限に抑えるため)、同時に各ディスクの空き容量を均等に保つこと(データを配列全体に均等に分散するため)です。

Fill-up(フィルアップ)
現在の最小空き容量設定を超える空き容量がある最も番号の小さいディスクを選択します。

Most-free(モストフリー)
現在最も空き容量が多いディスクを選択します。

Split level

必要に応じてディレクトリを自動的に分割する
共有内に新しいファイルやサブディレクトリを作成する必要がある場合、Unraid OSはまず設定された割り当て方法に従って、どのディスクに作成するかを選択します。新しいファイルやサブディレクトリを含む親ディレクトリがそのディスクに存在しない場合、Unraid OSはまず必要な親ディレクトリをすべて作成し、その後新しいファイルやサブディレクトリを作成します。

トップレベルディレクトリのみ必要に応じて自動分割する
共有の第一階層サブディレクトリ内に新しいファイルやサブディレクトリを作成する場合、そのサブディレクトリが書き込まれるディスクに存在しなければ、先にサブディレクトリが作成されます。共有の第二階層以下のサブディレクトリ内に新しいファイルやサブディレクトリを作成する場合は、新しいファイルやサブディレクトリの親ディレクトリが存在する同じディスク上に作成されます。

トップ”N”階層まで必要に応じて自動分割する
前述と似ています。新しいファイルやサブディレクトリを作成する際、親ディレクトリが階層”N”にあり、選択されたディスクに存在しない場合は、必要な親ディレクトリをすべて作成します。新しいファイルやサブディレクトリの親ディレクトリが階層”N”より深い場合は、その親ディレクトリが存在するディスク上に作成されます。

手動:ディレクトリを自動で分割しない
共有内に新しいファイルやサブディレクトリを作成する場合、Unraid OSは親ディレクトリがすでに存在するディスクのみを考慮します。


APPLY を押すと「SMB Security Settings」の項目が現れるため、セキュリティ設定を行います。
Windows で使用する場合は Export を Yes に設定変更します。

しばらくデータを書き込み続けた結果が以下のスクショの通りです。
10TBまで保存して次のHDDに保存する動作となっています。
High-water はこのように順次HDDの半分まで保存する仕組みとなっています。

キャッシュの使用

UNRAIDではSSDキャッシュも使用できます。
書き込みにSSDを使用し、スケジュールでSSDからHDDに書き込むことで、SSDの容量まで書き込みを高速化することができます。
こちらを有効にしました。

仕組み(UNRAID公式ドキュメントより)

データ構造

CLIにログインして改めてデータを確認してみます。
/mnt にストレージがマウントされており、/mnt/user に共有ディスク、/mnt/disk[n]/ に各HDDがマウントされています。

disk のデータはOSから直接確認でき、user の方に集約されて表示される構造となっています。とても面白い構造です。

root@Backup:~# ls /mnt/
cache/  disk1/  disk2/  disk3/  disk4/  disk5/  disk6/  disk7/  disk8/  user/  user0/
root@Backup:~# ls /mnt/user/backup/
test1/  test2/
root@Backup:~# ls /mnt/disk1/backup/
test1/
root@Backup:~# ls /mnt/disk2/backup/
test1/ test2/

ベンチマーク

Windowsファイルコピー

まずはWindowsのファイルコピーを試します。
10GBのダミーファイルを作成してUNRAIDにコピーしてみました。
結果は以下の通りです。

最初は113MB/s (904Mbps)ほどで推移し、おおよそ1GのNICの理論値ほどの値が出ています。
その後、5GB付近から速度が落ち、60MB/sほどになり、最終的には60~80MB/sほどで推移し続けました。

何度か実施しましたが全て同じような傾向でした。

CrystalDiskMark

ネットワーク越しのWindows PCからSMBで接続してテストしてみます。

1GB

8GB

8GBにするとランダムの書き込みが遅くなるようです。

CLIにログインしてtopを見てみると、バッファが少しずつ増えていました。
9GBほどメモリにキャッシュしているようです。

16GB

16GBだとさらにランダムの書き込み性能が落ちます。

メモリキャッシュも8GBと同様です。

64GB

メモリは32GBを積んでいるため、少し時間はかかりますがメモリを超える量のデータでテストを行ってみます。

キャッシュとしては30GBほど使用し、1.5GB~2GBほどメモリを残す動きとなりました。

結果は以下の通り。

判断が難しい内容です。
意外なことにシーケンシャルリードも速度が落ちています。またQ8T1の方が遅いです。
ランダムに関しても読み込みはQ32T1の方が遅く、書き込みはQ32T1の方が速いです。
どうにも傾向が良くわかりません。

ATTO

ATTOも実行してみました。
これはまぁ普通というか想定通りですね。
ファイルが小さければ遅いという一般的な傾向です。

hdparm / dd

CLIにログインして、hdparm と dd も実行してみます。

# データHDD
root@Backup:/mnt/disk8# hdparm -I /dev/sdi| grep Model
        Model Number:       ST20000DM001-3Y3103
root@Backup:/mnt/disk8# hdparm -t /dev/sdi

/dev/sdi:
 Timing buffered disk reads: 646 MB in  3.00 seconds = 215.09 MB/sec
root@Backup:/mnt/disk8# hdparm -T /dev/sdi

/dev/sdi:
 Timing cached reads:   35010 MB in  2.00 seconds = 17535.85 MB/sec

# キャッシュHDD
root@Backup:/mnt/disk8# hdparm -I /dev/sdj| grep Model
        Model Number:       TOSHIBA MG10AFA22TE
root@Backup:/mnt/disk8#
root@Backup:/mnt/disk8# hdparm -t /dev/sdj

/dev/sdj:
 Timing buffered disk reads: 784 MB in  3.01 seconds = 260.71 MB/sec
root@Backup:/mnt/disk8#
root@Backup:/mnt/disk8# hdparm -T /dev/sdj

/dev/sdj:
 Timing cached reads:   35572 MB in  2.00 seconds = 17816.31 MB/sec

# dd
root@Backup:/mnt/disk8# dd if=/dev/zero of=testfile bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 56.1547 s, 187 MB/s
root@Backup:/mnt/disk8#
root@Backup:/mnt/disk8# dd if=/dev/zero of=testfile bs=1M count=10000 oflag=direct
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 177.542 s, 59.1 MB/s
root@Backup:/mnt/disk8# dd if=testfile of=/dev/null bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 0.577206 s, 18.2 GB/s

# キャッシュSSD
root@Backup:/mnt/disk8# dd if=/dev/zero of=/mnt/cache/testfile bs=1M count=10000 oflag=direct
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 4.45162 s, 2.4 GB/s


こちらは分かりやすい傾向が出ています。
ディスク自体の速度はデータHDDで215.09 MB/sec、キャッシュHDDで260.71 MB/secとなっており、どちらも200MB/s超えとなっています。キャッシュHDDの方が若干速いです。高価ですからね。
dd については、キャッシュを使用する範囲は高速で187 MB/s、キャッシュを使用しない設定だと 59.1 MB/s まで落ちています。
ファイルシステムに直接ファイルを配置すると遅くなるという傾向が見て取れました。Windowsでのファイルコピーでも60MB/sほどまで落ちていますので、ファイル共有の速度はこれくらいが限界のようです。

キャッシュのSSDはM.2ですので2.4 GB/sと爆速です。

DiskSpeed (Apps)

UNRAID はアプリを追加できるのですが、このうち DiskSpeed というディスクのベンチマークアプリを使用してみます。
使用方法については以下参照。

結果:

1回目

2回目

パリティHDDは安定して高速ですが、データディスクは同じ型番にも関わらず速度がまちまちのようです。
気になったので2回実施しましたが、全く同じ傾向となりました。Disk2と6だけ妙に遅くDisk7がデータHDDの中で一番速いです。

ただ、いずれも内周は200MB/sほどの速度が出るようです。

ベンチマーク SSDキャッシュ有り

UNRAIDのSSDキャッシュを有効にしてみます。

Windowsファイルコピー

WindowsのファイルコピーではSSDキャッシュ無しと異なり速度低下は無く、1Gbpsの理論値まで速度が継続して出ています。

dd

UNRAID内のddでは2.3GB/sの速度が出ています。爆速です。

root@Backup:/mnt/user/backup# dd if=/dev/zero of=testfile bs=1M count=10000 oflag=direct
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 4.56214 s, 2.3 GB/s

SSDキャッシュはかなり有効なようです。

まとめ

自作サーバーとUNRAIDで182TBの巨大ストレージを構築してみました。
UNRAIDの仕組み上、ファイル共有に関してはそれほど速度が出ませんが、RAIDと異なりクラッシュした際の復旧を考えられた非常に使いやすいソリューションです。バックアップ用途には最適でしょう。

今回は、NICとスイッチの関係で最大1Gbpsまでしか速度が出ない状況ではありますが、SMBはそこまでの速度が出ないため1Gbpsで十分だと思います。
ただ、SSDキャッシュを有効にすると10Gbpsでも不足する速度となります。
次は10GのNIC/スイッチの導入を進めて高速な接続環境を構築したいところです。

まだ日本語でのUNRAIDの情報はあまり無いため、この記事が参考になれば幸いです。

参考

公式ドキュメント
https://docs.unraid.net/

コメント

タイトルとURLをコピーしました