本文へ移動
購読
GUIDE#infra更新 2026.09.24

TrueNAS SCALEでNASを構築する:ZFSプール設計からSMB共有・スナップショットまで

4ベイPCにTrueNAS(Community Edition)を入れ、ミラー×2のプール設計、recordsizeと圧縮、SMB/NFS共有、スナップショット、SMARTとスクラブの運用までを解説します。

level
中級
time
約35分
stack
TrueNAS SCALE (Community Edition) / 4ベイ以上のPC
author
@ryoma_t
// 前提条件
Linuxの基本操作 / RAIDとファイル共有の基礎知識 / 空きディスク4本以上のPC

TrueNAS SCALEとは、iXsystems社が開発するDebianベースのオープンソースNAS用OSで、ZFSファイルシステムを中核に、SMB/NFS共有・スナップショット・レプリケーション・Dockerアプリをブラウザからまとめて管理できます。執筆時点では無償版の名称が「TrueNAS Community Edition」に統一されつつあり、SCALEはそのLinux系列を指す名前として残っています。

4ベイのPCにインストールし、ミラー2組のプールを作り、圧縮とrecordsizeを用途別に決めたデータセットにSMBとNFSで共有を切り、毎時スナップショットと週次SMART・月次スクラブを仕込むところまでを35分で通します。

この記事でわかること

  • CORE・SCALE・Community Editionの関係と、いま新規に選ぶべき系列
  • メモリ・ECC・HBA(ITモード)の要件と、ハードウェアRAIDやUSB接続を避ける理由
  • 4ベイでのミラー・RAIDZ1・RAIDZ2の実効容量と再構築時のリスク比較
  • データセットごとの compression / recordsize / atime の決め方と、dedupを切っておく理由
  • SMB/NFS共有、スナップショットとレプリケーション、SMARTとスクラブの運用スケジュール

TrueNASの整理:CORE・SCALE・Community Edition

系列ベース執筆時点の状況選ぶ場面
TrueNAS COREFreeBSD13系で新機能開発は終了し、メンテナンスのみ既存環境の維持だけ。新規には選ばない
TrueNAS SCALE → Community EditionDebian Linux24.10でアプリ基盤がk3sからDockerに移行。以後の無償版はCommunity Editionと呼ばれる新規構築はこれ一択
TrueNAS Enterprise同じコード商用サポート、HA(2コントローラー)構成企業で保守契約が要る場合

バージョンは「24.10」「25.04」のように年月で付き、魚の名前のコードネームが添えられます。ネット上の手順が「SCALE 22.12」のような古い版だとアプリの仕組み(k3s時代)が今と違うので、参照するときは24.10以降の記事かどうかを見てください。ダウンロードと現在の版は公式サイトで確認します。

ハードウェア要件:メモリ・ECC・HBA

部品最低推奨理由
メモリ8GB16GB以上(アプリも動かすなら32GB)ZFSは空きメモリを読み取りキャッシュ(ARC)に使う。多いほど共有が速い
ECC不要あれば望ましいZFSのチェックサムはディスク上の破損を検知するが、メモリ上のビット反転は検知できない
ディスク接続マザーボードのSATAITモードのHBA(LSI SAS2308/3008系)RAIDカード経由だとZFSから個々のディスクが見えず、SMARTもエラー処理も壊れる
起動ディスク16GB SSD小容量のSATA/NVMe SSDUSBメモリは書き込み耐性が足りず数か月で壊れる
HDDCMR方式NAS向けCMRSMR方式は再構築(resilver)が極端に遅く、途中でエラーを出す

ハードウェアRAIDカードのRAIDモードとUSB外付けディスクは、プール用に使わないでください。前者はZFSの自己修復が効かず、後者はUSBの切断で一瞬ディスクが消えるたびにプールがDEGRADEDになります。ProxmoxのVMで動かすなら、HBAをPCIパススルーで丸ごと渡し、仮想ディスクの上にプールを作らないのが同じ理由です。

NICは1GbEでも始められますが、HDD4本のミラー2組は連続読み出しで1GbEを超えるので、2.5GbEか10GbEがあれば活きます。Proxmox上での構成はProxmox VEの構築ガイドで作ったVMにHBAを渡す形になります。

インストールと初期設定

  1. 公式サイトのISOをUSBに書き込み、起動して「Install/Upgrade」を選びます。インストール先はデータ用HDDではなく起動用SSDを選びます(容量で見分けます)。
  2. 管理者ユーザーのパスワードを設定します。執筆時点の既定ユーザー名は truenas_admin で、rootでのWebログインは無効です。
  3. 再起動後、コンソールに表示されたURL(DHCPで取得したIP)にブラウザでアクセスします。
  4. Network → Interfaces で固定IP(例: 192.168.10.30/24)を設定し、「Test Changes」→ 60秒以内に「Save Changes」を押します。押し忘れると自動で元に戻ります。Network → Global Configuration でホスト名、ゲートウェイ、DNSを入れます。
  5. System → General Settings でタイムゾーンを Asia/Tokyo に、同じ画面の Email でSMTPを設定し、System → Alert Settings で通知先を登録します。ここを飛ばすとディスク故障に気づけません。

ZFSプール設計:ミラーとRAIDZの選び方

プールは1つ以上のvdev(仮想デバイス)をストライプしたもので、冗長性はvdevごとに持ちます。vdevを1つでも失えばプール全体が失われるので、設計とは「vdevをどう組むか」です。再構築(resilver)のとき、ミラーは生き残った1本を読んでコピーするだけですが、RAIDZは残り全ディスクを読んでパリティから計算するため時間がかかり、その間にもう1本が死ぬか読めないセクタが出るとRAIDZ1では取り返しがつきません。

4ベイ・8TB×4の構成実効容量耐えられる故障再構築後からの拡張
ミラー×2(2本ずつ)16TB各ミラーで1本ずつ(最大2本)速い(単純コピー)ミラーを1組追加、または2本だけ大容量に交換
RAIDZ1(4本)24TB1本遅く、再構築中の2本目の故障や読み取りエラーでプール喪失RAIDZ拡張で1本ずつ追加(24.10以降)。全交換で容量増
RAIDZ2(4本)16TB2本遅いが再構築中の1本故障に耐える同上

4ベイならミラー×2を選びます。RAIDZ2と同じ16TBで再構築が速く、2本の交換で段階的に容量を増やせるからです。RAIDZ1で24TBを取るのは、失っても再取得できるメディアライブラリに限ります。6ベイ以上で容量効率を上げたいならRAIDZ2にします。Storage → Create Pool で名前 tank、Data VDEVs の Layout を Mirror、Width 2、Number of VDEVs 2 にして作成します。Log(SLOG)やCache(L2ARC)のvdevは、NFS越しにVMを動かす、メモリを増やし切ってもキャッシュが足りない、という具体的な理由が出るまで足しません。

RAIDは冗長化であってバックアップではありません。誤削除、ランサムウェア、落雷、プール自体の破損には無力です。スナップショットで誤削除に、別筐体へのレプリケーションかPBSで残りに備えてください。プールの使用率は80%を超えると断片化で遅くなるので、その手前で増設します。

データセットと圧縮・重複排除の考え方

データセットはプール内のファイルシステムで、圧縮・recordsize・クォータ・スナップショットをそれぞれ別に持てます。用途ごとに分けておくと、写真だけ毎時スナップショット、バックアップ置き場だけ圧縮を強く、という運用ができます。Datasets → Add Dataset で、SMB共有用は Dataset Preset を SMB(大文字小文字を区別しない設定とNFSv4 ACLが入る)、それ以外は Generic にします。

データセット用途compressionrecordsizeatime
tank/home個人ファイル、書類lz4(既定)128K(既定)off
tank/media動画・写真(圧縮済みデータ)lz41Moff
tank/backupPCやPBSのバックアップzstd1Moff
tank/appsDockerアプリのデータ(DB含む)lz4128K(DB専用なら16K)off

recordsizeはファイルを分割して書く最大ブロック長です。動画のような大きな連続データは1Mにするとメタデータが減り、DBのようにランダムに小さく書き換えるものは16Kにしないと1回の更新で128K丸ごと書き直す増幅が起きます。lz4は圧縮できないデータを即座に見抜いて素通しするのでコストがほぼゼロ、常時onで構いません。atimeは読むたびに更新時刻を書く動作なので、offにして無駄な書き込みを止めます。

重複排除(dedup)はoffのままにします。重複判定のテーブルをメモリに置く必要があり、TBあたり数GBのメモリを食い、足りなくなると書き込みが激減します。家庭のデータで重複が多いのはバックアップくらいで、そこはPBSやrestic側の重複排除に任せる方が安全です。一度onにして書いたデータはoffにしても解消されません。

ユーザー・グループ・権限(ACL)

Credentials → Groups でグループ family を作り、Credentials → Users → Add でユーザーを作ります。このとき「SMB User」(Samba Authentication)にチェックが入っていないとWindowsからのログインが延々と失敗します。SMBはNTLMハッシュを別に持つため、後からチェックを入れた場合はパスワードを設定し直します。

権限はデータセットの「Edit Filesystem ACL」で付けます。SMBプリセットのデータセットはNFSv4 ACLで、NFS4_RESTRICTED(所有者のみ)を基本に、家族共有のデータセットだけグループ family に Modify を追加する形が管理しやすい構成です。Windowsのセキュリティタブからも変更できますが、TrueNAS側と二重管理になるので、権限はTrueNASの画面でだけ触ると決めておきます。

SMB共有(Windows/Mac)とNFS共有

Shares → SMB → Add で Path /mnt/tank/home、Name home、Purpose は「Default share parameters」にし、保存時に聞かれるSMBサービスの有効化と自動起動を受け入れます。MacのTime Machine用は別データセットを作り、Purposeで Time Machine を選ぶと必要な設定がまとめて入ります。Windowsは \\192.168.10.30\home、Macは Finder の「サーバへ接続」で smb://192.168.10.30/home です。SMB1は既定で無効なので、古いテレビや複合機のスキャン保存が失敗する場合は、その機器がSMB2以上に対応しているかを先に確認します。

NFSはProxmoxのバックアップ先やLinux機からのマウントに使います。Shares → NFS → Add で Path /mnt/tank/backup、Authorized Networks 192.168.10.0/24、Maproot User と Maproot Group を root にします。Maprootがないと、rootで書き込むProxmoxのvzdumpが権限エラーになります。

terminal (Linuxクライアント)
smbclient -L //192.168.10.30 -U alice          # 共有一覧に home が出る
showmount -e 192.168.10.30                     # /mnt/tank/backup 192.168.10.0/24
sudo mount -t nfs 192.168.10.30:/mnt/tank/backup /mnt/backup
# Proxmoxなら Datacenter → Storage → Add → NFS で Export に /mnt/tank/backup を選ぶ

スナップショットとレプリケーション

ZFSはコピーオンライトなので、スナップショットは一瞬で取れ、変更されたブロックの分しか容量を使いません。Data Protection → Periodic Snapshot Tasks → Add で、Dataset tank、Recursive にチェック、Lifetime 2 WEEK、Naming Schema auto-%Y-%m-%d_%H-%M、Schedule Hourly の毎時タスクと、Lifetime 3 MONTH の毎日タスクの2本を作ります。SMB共有では既定でシャドウコピーが有効なので、Windowsのファイルを右クリック →「以前のバージョン」から利用者が自分で復元できます。ランサムウェアがSMB越しに暗号化しても、スナップショットは共有経由では消せないため、直前の版に戻せます。

レプリケーションはスナップショットを別プールや別筐体へ zfs send | zfs receive で差分転送する機能です。Data Protection → Replication Tasks → Add で、Source tank/home、Destination に2台目のTrueNAS(Credentials → Backup Credentials で作ったSSH接続)か同一機の別プール、Recursive、Schedule Daily を指定します。クラウドのオブジェクトストレージへは Cloud Sync Tasks(rclone)で送れます。3-2-1の全体像はProxmox Backup Serverで3-2-1ルールを実現すると同じ考え方です。

アプリ(Docker)と監視・通知

Apps → Settings → Choose Pool で tank を選ぶと、アプリ用のデータセットが作られます。Discover Apps のカタログにImmich、Jellyfin、Syncthing、Nextcloudなどがあり、Custom App の「Install via YAML」でDocker Composeの定義もそのまま入れられます。アプリは既定でUID 568の apps ユーザーで動くため、既存データセットを渡すときはそのパスに apps の書き込み権限をACLで足しておきます。写真や動画のように「NASのデータを直接扱うアプリ」はここで、それ以外の実験的なコンテナはProxmoxのVMで動かす方が、NASの更新とアプリの更新を切り離せます。

System → Alert Settings で、Disk・Pool・SMART・Replication の各カテゴリを Warning 以上で通知に回し、Alert Services に Email か Slack を登録します。UPSがあれば System → Services → UPS でNUTを有効にし、停電時に安全停止させます。Reporting でディスク温度を見て、夏場に50℃を超える構成なら冷却を見直します。

SMARTとスクラブの運用

スクラブはプールの全ブロックを読んでチェックサムを検証し、不一致があればミラーのもう1本から直す処理です。SMARTテストはディスク自身の自己診断で、代替処理済みセクタや保留セクタの増加を早期に見つけます。役割が違うので両方を回します。Data Protection → Scrub Tasks に既定で作られる35日しきい値のタスクを月1回(例: 1日 03:00)に、S.M.A.R.T. Tests → Add で All Disks の SHORT を毎週日曜 02:00、LONG を毎月15日 03:00 にします。スクラブとLONGテストは同じ日に重ねません。

terminal (System → Shell)
zpool status tank            # state: ONLINE、errors: No known data errors
zpool list                   # CAP が 80% 未満か
zfs get -r compression,recordsize,atime tank
smartctl -a /dev/sda | grep -E 'Reallocated|Pending|Temperature'

動作確認

期待される出力
$ zpool status tank
  pool: tank
 state: ONLINE
config:
        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
errors: No known data errors

$ zfs list -t snapshot -o name | head -3
tank/home@auto-2026-09-23_10-00
$ smbclient -L //192.168.10.30 -U alice | grep home
        home            Disk

Windowsから \\192.168.10.30\home にファイルを置き、1時間後に「以前のバージョン」タブにスナップショットが並べば、共有・権限・スナップショットが揃っています。

つまずきポイント

  • Windowsで資格情報を何度入れてもログインできない: ユーザーの「SMB User」が未チェックか、チェック前に設定したパスワードのままです。チェックを入れてパスワードを設定し直し、Windows側は cmdkey /delete:192.168.10.30 で古い資格情報を消します。
  • zpool status が DEGRADED で One or more devices has experienced an unrecoverable error: READ/WRITEが増えていればディスク故障、CKSUMだけならケーブルやバックプレーンの接触不良が多いので、先にケーブルを差し直して zpool clear tank し、再発したら Storage → Manage Devices → Replace で交換します。
  • アプリのログに Permission denied: ホストパスの所有者がUID 568(apps)に許可を出していません。データセットのACLに apps ユーザーの Modify を追加します。
  • IPを変えたらWeb UIにつながらなくなった: 「Test Changes」後60秒以内に「Save Changes」を押さないと設定が戻ります。戻らずに詰まった場合は、本体のコンソールメニューからネットワーク設定をやり直します。

よくある質問

TrueNASは無料ですか?

Community Edition(旧SCALE)は無償で、ZFS・SMB/NFS・スナップショット・レプリケーション・アプリの全機能が使えます。有償のEnterpriseは同じソフトウェアに商用サポートとHAハードウェアを組み合わせたもので、家庭や検証用途で必要になることはありません。

ECCメモリは必須ですか?

必須ではありません。ZFSはディスク上の破損をチェックサムで検知・修復しますが、メモリ上でビット反転したデータは正しいものとして書かれてしまいます。その確率を下げたいならECC対応のCPUとマザーボードを選びます。ECCがない構成でも、スナップショットとレプリケーションを組む方が実際の事故には効きます。

RAIDZとミラーはどちらがよい?

4ベイまでならミラーです。再構築が単純コピーで速く、2本単位で容量を増やせます。6ベイ以上で容量効率を優先するならRAIDZ2にします。RAIDZ1は4TB以上のHDDでは再構築中の2本目の故障や読み取りエラーでプールを失う確率が無視できないため、再取得できるデータ以外には使いません。

まとめ

ITモードのHBAかSATA直結のCMRディスク4本をミラー×2で tank にし、用途別データセットに lz4・recordsize・atime off を設定し、dedupは触らない。SMBユーザーは「SMB User」を必ずチェックし、NFSはMaproot rootでProxmoxに渡す。毎時と毎日のスナップショット、週次SHORTと月次LONGのSMART、月1回のスクラブ、メール通知まで入れて初めてNASとして完成です。NASを置くネットワークをサーバー用VLANに分けるならVLANでネットワークを分離する手順、用途全体の中での位置づけは自宅サーバーの用途10選を参照してください。

次に読む

$ subscribe --weekly
毎週月曜、企業ITとホームラボの要点を5分で。