1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2026年版 TrueNAS SCALE セットアップ

1
Posted at

はじめに

おひさしぶりです。またまた TrueNAS SCALE の記事になります。前の環境が不具合によって利用できなくなったので、ハードウェアから新しく環境を構築しなおすついでに、3年前に投稿した記事の内容をアップデートした TrueNAS SCALE のセットアップ手順をまとめました。可用性を向上させるための設定なども追加している内容となっています。

機材

NAS用PCの構成を考えていく中で、昨今の情勢からPCパーツも高騰しており新品で購入していくと40万円を余裕で超えていました。なので、中古品や過去に購入して利用していなかったものを中心にパーツを集めています。

コンセプトとしては、なるべく小型かつHDDが5台搭載できるPCを目指しています。

機材リスト
Device Model Price (だいたい)
Motherboard ASRock Z390M-ITX/ac 中古 12,000円
CPU Intel® Core™ i7-8700K Processor 中古 11,000円
Memory ADATA PC4-25600 2GB x2 中古 20,000円 x2
M.2 SSD KIOXIA KBG40ZNS256G 整備品 6,000円
HDD ST8000VN002-2ZM1 過去に新品で購入 28,000円 x5
NIC Intel X540-AT2 過去に新品で購入 10,000円
PSU SilverStone SST-ST45SF-V3 新品 12,000円
Case Jonsbo N2 新品 18,000円
Replication用HDD (仮) TOSHIBA MD08ACA14TR 整備品 46,000円
その他ケーブルなど - 新品 2,000円

※Replication (後述) 用のHDDは別PCにインストールしています。

20260623_231459.jpg

セットアップ中の写真

選定理由 (ケース)

ケースについては、JonsboのN2を選択しました。本当はより小型のN1が欲しかったのですが、生産終了しているようで売られていたとしてもかなりの高値だったので諦めました。また、ケースはAliExpressで購入しました。一応URL載せておきますがちゃんと届くかは保証しません。

AliExpress - Jonsbo-n5,n4,n3,n2,n1,n5,n4,n3,n2,n1

選定理由 (CPU/Memory)

CPU/Memoryについては、NASとして利用するにはかなりオーバースペックな構成になっています。通常のNASとして利用するのであれば Intel N100 くらいでもいいと思いますが、TrueNAS SCALEの機能の一つであるDockerベースのアプリケーションを利用することを考え、CPU/Memoryを強化しています。私は ImmichJellyfin などのメディアのソフトウェアエンコードを行うアプリケーションを利用することを考えているので、CPU/Memoryを少し良いものにしました。(もし兼LLM用に利用するならこれでも足りないと思います...)

インストールとセットアップ

OSのバージョンは、記事執筆現在の最新である TrueNAS SCALE 25.10.4 - Goldeye を利用します。

公式サイトからISOをダウンロードし、 Rufus 等を利用してUSBメモリに書き込みます。

起動ディスクとしてインストールする手順は割愛します。特に変な手順はないはずなので、順当に進めていけばインストールは完了すると思います。今回は、M.2 SSDにインストールしました。

インストールが完了すると、コンソールにIPアドレスが表示されるので、ブラウザからそのIPアドレスにアクセスして、WebUIにログインします。

1.png

初期画面です。初期のユーザー名は truenas_admin 、パスワードはインストール時に設定したものです。

2.png

Dashboard画面です。ここから各種設定を行っていきます。

初期設定

3.png

まず初めに Timezone の設定を行います。System > General Settings > Localizationから設定を行います。

4.png

TimezoneAsia/Tokyo に設定します。

続いてNASとしてのストレージを構築していきます。

ストレージプール/データセットの作成

ここで軽く PoolDataset の違いについて説明します。

Pool は、ストレージの物理的な領域を管理する単位です。HDDの本数やRAID構成などを決定するのは Pool の作成時になります。 Dataset は、Pool の中に作成される論理的な領域です。すごくわかりやすく言うとフォルダのようなものです。よって Dataset は、Pool の中に複数作成することができます。

まずは、Pool の作成ですが、その前にHDDの初期化(0埋め)を行います。HDDを新品で購入した場合は0埋めは不要ですが、今回の構成では過去に利用していたHDDを利用するので、0埋めを行います。

Storage を選択します。

5.png

右上の Disks を選択します。

6.png

対象のHDDを展開し、 Wipe を選択します。 Wipe の種類は Full with zeros にします。

Full with zeros によるHDDの初期化は時間がかなりかかります。私の環境では、8TBのHDDを5台同時に初期化を始めて約36時間かかりました。

初期化が完了したら、Storage > Create Pool を選択します。

7.png

Pool作成ウィザードです。今回は暗号化を有効にするので、Encryption を有効にします。

8.png

有効化したタイミングで以下の警告が表示されます。

Warning
Encryption is for users storing sensitive data. Pool-level encryption does not apply to the storage pool or disks in the pool. It applies to the root dataset that shares the pool name and any child datasets created unless you change the encryption at the time you create the child dataset. For more information on encryption please refer to the TrueNAS Documentation hub.

以下日本語訳
警告
暗号化は機密データを格納するユーザー向けです。プールレベルの暗号化はストレージプールやプール内のディスクには適用されません。暗号化はプール名を共有するルートデータセットおよび子データセットに適用されます。子データセットを作成する際に暗号化を変更しない限り、その子データセットにも暗号化が適用されます。暗号化の詳細については、TrueNAS Documentation hub を参照してください。

9.png

Name は任意の名前を設定します。今回は tank にしています。暗号化の種類は AES-256-GCM を選択します。通常はこれで問題ないはずです。 Next を選択します。

10.png

LayoutRAIDZ2 を選択し、 Witdh は5に、 Number of VDEVs は1に設定します。

RAIDZ2 は、2台のディスクが故障してもデータを保持できる構成です。よって実用量は3台分の容量になります。今回の構成では、8TBのHDDを5台搭載しているので、実用量は24TBになります。

Width は搭載しているHDDの本数を設定します。 Number of VDEVs は、RAID構成の単位です。今回は1つのRAID構成で5台のHDDを利用するので、1に設定します。

基本的にRAID構成は MirrorRAIDZ1RAIDZ2 のいずれかを選択することになると思います。 Stripe は冗長性がなくHDDの故障時にデータが消失する可能性があるので、NASとして利用する場合は避けた方が良いでしょう。

今回は LogSpareCacheMetadataDedup は利用しないので、 Save And Go to Review を選択します。

11.png

今回設定した概要が表示されます。問題なければ Create Pool を選択します。

12.png

作成前に以下の警告が表示されます。

WARNING!
Losing the ability to unlock the pool can result in losing all data on the disks with no chance of recovery. Always back up the encryption key file or passphrase for an encrypted pool! The key file for an encrypted pool is secured in the system database and can be exported at any time from the pool options

以下日本語訳
警告!
プールのロックを解除できなくなると、ディスク上のすべてのデータを失い、回復の可能性がなくなる可能性があります。暗号化されたプールの暗号化キー ファイルまたはパスフレーズを常にバックアップしてください! 暗号化されたプールのキー ファイルはシステム データベースで保護されており、プール オプションからいつでもエクスポートできます。

警告文の通り、暗号化されたプールを作成する場合は、暗号化キーをバックアップしておく必要があります。バックアップしていない場合、プールのロックを解除できなくなった場合にデータが復旧できなくなる可能性があります。 Download Encryption Key を選択して、暗号化キーをバックアップします。

13.png

作成が完了すると、現在のプールの状態が表示されます。 tank という名前でプールが作成されていることが確認できます。

14.png

続いて、Dataset の作成を行います。 tank を選択し、 Add Dataset を選択します。

15.png

今回は、Namenas に設定し、Dataset PresetGeneral に設定します。 Save で作成します。

16.png

これで、ストレージプールとデータセットの作成は完了です。

SMB用の設定

SMBとして利用する前にアカウントの作成を行います。ここで作成したアカウントでSMBの認証を行います。 Credentials > Users を選択します。

17.png

右上の Add を選択します。

18.png

UsernamePassword を設定し SMB Access を有効にします。 Save で作成します。

19.png

これでアカウントの作成は完了です。続いてSMBの設定を行います。左タブの Shares を選択します。

20.png

デフォルトだと全て STOPPED になっていると思います。今回はSMBだけ利用します。 Windows (SMB) SharesAdd を選択します。

21.png

PurposeDefault share type のままで問題ありません。 Path は、先ほど作成した Dataset のパスを指定します。今回の場合は /mnt/tank/nas を指定します。 Name は任意の名前を設定します。今回は nas にしています。

22.png

Saveを選択すると、 Start SMB Service のポップアップが表示され、自動でSMBサービスを有効化するかどうかを聞かれます。今回は自動で有効化するので、 Enable this service to start automatically を有効化し、 Start を選択します。

最後に作成したSMBの権限を設定します。左タブの Shares を選択します。

23.png

作成した nas を選択し、 PermissionsEdit を選択します。

24.png

OwnerUserGroup を先ほど作成したアカウントに設定します。 それぞれ Apply UserApply Group を有効化し、 Save を選択します。

25.png

これでSMBの設定は完了です。Windowsからアクセスしてみます。

30.png

エクスプローラーのメニューの三点リーダーを選択し、 ネットワークドライブの割り当て を選択します。

31.png

ドライブ は任意のアルファベットを指定します。 フォルダ にはNASのIPアドレスと Dataset 名をパスで指定します。

32.png

ポップアップで ネットワークの資格情報の入力 を求められます。ここでさきほど作成した ユーザー名パスワード を入力し 資格情報を記憶する にチェックをいれて OK をクリックします。

33.png

アクセスできることが確認できました。

S.M.A.R.T.テストのスケジューリング

HDDの状態を監視するための設定を行います。

40.png

System -> Advanced Settings を開きます。

下にスクロールすると Cron Jobs があるので、 Add を選択します。

41.png

Warning
Changing Advanced settings can be dangerous when done incorrectly. Please use caution before saving.

以下日本語訳
警告
詳細設定の変更は、誤って行うと危険を伴う可能性があります。設定を保存する際は十分にご注意ください。

初回選択時は上記の警告が出ると思います。 Close で閉じます。

42.png

DescriptionS.M.A.R.T. Short Test とし、 Command に以下のものを記述します。

midclt call disk.smart_test SHORT '["*"]'

続いて、 Schedule から定期実行する時間を指定します。

43.png

今回は、毎朝6時に実行するようにしました。右下のところで、次にいつ実行されるかがプレビュー表示されるので確認してください。

Save で保存します。

44.png

続いてLongTest版も作成します。 Command に以下のものを記述します。

midclt call disk.smart_test LONG '["*"]'

45.png

実行間隔は、毎週土曜日の朝6時にしました。

これで S.M.A.R.T. テストの設定は完了です。続いて通知設定を行います。

通知設定

既存の設定でメール通知などがありますが、今回は Discord を利用します。個人的にサーバー関係の通知は Webhook 経由で Discord にまとめているのもあり、この方法で設定します。

TrueNAS側でWebhook+フォーマットを決めて送信、、、といったものは用意されていませんが、SlackにWebhookとして送信するという機能があるので、今回はSlack用のものをDiscordに流すという方法をとっています。現状、Webhookを利用するにはこの方法しかありませんが、将来的には用意されるかもしれないそうです(Milestoneには登録されているそうです)。

50.png

Discord の通知を行いたいチャンネルへ移動し、右クリック > Edit Channel を選択し、 Integrations へ移動します。現在はなにも作成していないので、 Create Webhook で新しく作成します。

51.png

ここでアイコンや名前などを設定します(後からでも変更できます)。設定が終わったら、 Copy Webhook URL をクリックしURLをコピーします。

52.png

TrueNASのWebUIへ戻り、 System > Alert Settings へ移動し Alert ServicesAdd をクリックします。

53.png

NameDiscord notification とし、 TypeSlack とします。そして、 Webhook URL に先ほどコピーしたものを貼り付けて、末尾に /slack を足します。

ここまで設定したら、一度テスト送信してみます。 Send Test Alert をクリックします。

54.png

Discord で受信できているのが確認できました。

Replication 設定

最後に、重要なバックアップ手順である Replication の設定を行います。

Replication とは datasetsnapshot をそのまま別の pool にコピーする機能です。自身の環境を定期的にクローンするようなイメージです。なのでこの機能を利用するには実効容量と同じストレージを用意する必要があります。

今回の環境では実効容量は24TiBなので同じ容量のストレージが必要ですが、手元に14TBのHDDしかないため今回はこれを利用します。通常は同じ容量のストレージを用意してください。
設定上はストレージ容量の差異があっても保存されているデータがそれ未満であれば、正常にReplicationは完了します。

個人的には、Replication 先には別のマシンを用意し、単一ストレージに保存する構成がおすすめです。

別のマシンを指定する理由は、HDDの故障だけでなく、マザーボードや電源など、ストレージ以外のハードウェア障害によってデータへアクセスできなくなるリスクにも備えられるためです。

一方、Replication 先を単一ストレージとする理由は、主にコストパフォーマンスです。もちろん、Replication元とReplication先の両方が同時に故障する可能性はゼロではありません。しかし、その可能性の低さと、Replication先でもRAIDやMirrorを構成するためのコストを考慮すると、用途によっては単一ストレージでも十分だと考えています。

ただし、これはあくまでコストパフォーマンスを優先した構成です。データの信頼性や可用性を最優先する場合は、Replication先でもMirrorを構成するなど、より冗長性の高い構成を検討してください。

Replication は送信側と受信側で設定項目が分かれており、それぞれ

送信側:これまでセットアップしてきた新しいPC
受信側:Hyper-VであらかじめTrueNASをインストールし、HDDをパススルーでマウント済み

を前提に進めていきます。

受信側の設定

まず、送信側と接続するために SSH の設定が必要なので、そのセットアップを行っていきます。

60.png

Credentials > Users を開き、 truenas_admin > Edit をクリックします。

SSH Access にチェックをいれ、 Allow SSH Login with Password (not recommended) にチェックを入れます。文章の通り推奨されるものではないですが、セットアップに必要な手順で一時的なものなので、後ほどオフにします。

さらにスクロールしたところにある Sudo Commands を編集し、 Allow all sudo commands with no password にもチェックを入れます。これは恒久的に必要な設定です。

61.png

System > Services を開き、 SSH を有効化します。設定などは特に変更しなくて大丈夫です。

62.png

Replication の受け皿となる pool を作成します。 dataset は自動的に作成されるので作成しないでください。

送信側の設定

受信側と接続するための SSH の設定を行っていきます。

63.png

Credentials > Backup Credentials を開きます。 SSH ConnectionsAdd をクリックします。

64.png

Connection Name :なんでもいいです。ここでは NAS-Replication としました。
Setup MethodSemi-automatic (TrueNAS only) のままにします。
TrueNAS URL :受信側のIPアドレスを指定します。
Admin Usernametruenas_admin を指定します。
Admin Password :受信側のWebUIにアクセスする際のパスワードを指定します。
UsernameAdmin Username と同様の truenas_admin を指定します。

ここまで設定したら、 Save をクリックします。

65.png

追加された NAS-ReplicationEdit をクリックすると、設定が正しければ Remote Host Key に公開鍵が自動でセットされています。

これで SSH のセットアップは完了です。

ここまで進めたら受信側でチェックした Allow SSH Login with Password (not recommended) は外してください。

66.png

Data Protection へ移動します。 Replication には Snapshot が必要なので、まず Periodic Snapshot Tasks > AddSnapshot 作成スケジュールの設定を行います。

67.png

Dataset には tank/nas を指定します。 Snapshot Lifetime などはお好みで変更してください。ここでは1ヶ月分を保存するようにしています。 Save で保存します。

次に Replication TasksAdd をクリックします。

68.png

Source LocationOn this System を選択します。
Destination LocationOn a Different System を選択します。
Source / Destination : 同じ Dataset パスを指定します。ここでは tank/nas を指定します。
SSH ConnectionSSH Connections で作成した NAS-Replication を指定します。このとき、次の画面が表示される場合があります。

69.png

Sudo Enabled
Selected SSH connection uses non-root user. Would you like to use sudo with /usr/sbin/zfs commands? Passowrdless sudo must be enabled on the remote system. If not checked, zfs allow must be used to grant non-user permissions to perform ZFS tasks. Mounting ZFS filesystems by non-root still would not be possible due to Linux restrictions.

以下日本語訳
Sudo を有効化する
選択したSSH接続では、root以外のユーザーが使用されています。/usr/sbin/zfs コマンドの実行時に sudo を使用しますか?
リモートシステムでは、パスワードなしで sudo を実行できるように設定されている必要があります。
このオプションを有効にしない場合は、zfs allow を使用して、ZFS関連の操作を実行するために必要な権限をユーザーへ付与する必要があります。
なお、Linuxの制限により、root以外のユーザーがZFSファイルシステムをマウントすることはできません。

Use Sudo ZFS Commands を選択して有効化してください。

そしてスケジュールの設定では

Replication ScheduleRun On a Schedule
Destination Snapshot LifetimeSame as source

とします。

70.png

実行スケジュールは Periodic Snapshot Task よりも後になるようにずらしてください。 Snapshot の作成は通常数分で終わるはずですが、ここでは3時間後を指定しています。

Snapshotがひとつも生成されていない場合は、Replication Taskを追加した時点でもう一つPeriodic Snapshot Taskが生成される場合があります。その時は、Edit > Periodic Snapshot Tasks を先ほど手動で追加したものに変更し、自動で追加された Periodic Snapshot Tasks は削除してください。

これで、時間になればそれぞれ実行されると思います。初回はまるまる送信するので保存容量が多い場合は時間がかかると思います。

これで Replication の設定は完了です。

おわりに

さて、もともとこのような記事を書く予定ではなかったのですが、原因不明のRAID崩壊によりデータの一部を失うという事件があったため、セットアップついでにこのような記事を書きました。一部で済んだので良かったですが、同時に二度と戻らないデータでもありました。これを読んでいる皆さんはRAIDを組んでるからと安心せずにReplicateやrsyncなどで高可用性なNAS構築をおすすめします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?