TrueNAS CORE 12 (旧PC-BSD) での、ストレージ設定について。
TrueNAS CORE は、システムドライヴ以外に、最低1台のディスクドライヴが必要。物理ドライヴをグルーピングした ZFS Storage Pool を作り、これをマウントする。
Web UIの画面で, Storage -> [Pools] を開くと、No pools になる (システムドライヴは表示されない)。
 
[ADD] ボタンを押すと、次の画面に。Create new pool を選ぶ。[CREATE POOL] ボタンで次へ。
 
Poolに加えられていないのが左側の Available Disks。pool に加えるのが右側。中央の[→]をクリックして、Data VDevs に加える。左上の Name にプール名を入力。[CREATE] ボタンで作成。
 
完了。すごく簡単。
 
  
中身について少し見ておこう。
ディスクドライブのパーティション(物理区画) は、次のようになっている。gpart コマンド。
# gpart show da0
=>      40  41942960  da0  GPT  (20G)
        40      1024    1  freebsd-boot  (512K)
      1064  41910272    2  freebsd-zfs  (20G)
  41911336     31664       - free -  (15M)
# gpart show da1
=>      40  41942960  da1  GPT  (20G)
        40        88       - free -  (44K)
       128   4194304    1  freebsd-swap  (2.0G)
   4194432  37748568    2  freebsd-zfs  (18G)
  ZFSでは、物理区画を束ねてZFSストレージプール (ZFSプール; zpool) を作る。ストレージプールの上に、ZFSファイルシステムを載せる。
Linux LVMでは, ファイルシステムが選べたりすることから, 下から 1) Physical Volume (PV) - 2) Volume Group (VG) - 3) Logical Volume (LV) - 4) ファイルシステム、と載せていく。LV とファイルシステムは分離している。ZFS では, ZFSストレージプールが LVM Volume Group に相当し、ZFSファイルシステムは LVM LV とファイルシステムが合わさったもの、と考える。
ストレージプールが操作の中心になる。物理ディスクを後から足して, ストレージプールを拡張できる。ディスクのミラーリングも ZFSプールのレベルでおこなう。
ZFSストレージプールを一覧する。zpool list コマンド。
# zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT boot-pool 19.5G 1.06G 18.4G - - 0% 5% 1.00x ONLINE - mypool 17.5G 7.42M 17.5G - - 0% 0% 1.00x ONLINE /mnt
先ほど作った "mypool" ZFSストレージプールは, /mnt にマウントされている。
ZFSストレージプールとディスク・パーティションとの関係を表示。
# zpool status mypool
  pool: mypool
 state: ONLINE
config:
        NAME                                          STATE     READ WRITE CKSUM
        mypool                                        ONLINE       0     0     0
          gptid/a1c40b82-3af8-11eb-97e0-000c29a3e797  ONLINE       0     0     0
errors: No known data errors    
GPT id で表示されているが、mypool ストレージプールは, da1ドライヴのパーティション2 (/dev/da1p2) だけから構成されている。
  
ZFSプールの上に載るのが ZFSファイルシステム。
Linux LVMでは、Logical Volume (LV) の上に ext3/4, XFSなどファイルシステムが載る形だが、ZFS ではファイルシステムが LVM LV を兼ねる.
ZFSはファイルシステムのスナップショットが取れる。Copy on Writeの仕組みを使っていて、違いが生じない限りディスクの内容はコピーされない。例えば, 数ギガbytes のファイルシステムにも関わらず、それぞれのスナップショットが 1Kずつしか消費していない, などになる。
Linux LVMでは, スナップショットはLVのレベルでおこなうので、ファイルシステムがスナップショットをサポートする形に比べて, 直感的ではない。
話を戻す。ZFSファイルシステムを一覧表示してみる。
# zfs list NAME USED AVAIL REFER MOUNTPOINT boot-pool 1.06G 17.8G 24K none boot-pool/ROOT 1.06G 17.8G 24K none boot-pool/ROOT/Initial-Install 1K 17.8G 1.06G legacy boot-pool/ROOT/default 1.06G 17.8G 1.06G legacy mypool 7.25M 16.9G 96K /mnt/mypool mypool/.system 6.47M 16.9G 104K mypool/.system/configs-17a88b624aa64e01b68939563b5fcb8c 96K 16.9G 96K legacy mypool/.system/cores 584K 1023M 584K legacy mypool/.system/rrd-17a88b624aa64e01b68939563b5fcb8c 4.98M 16.9G 4.98M legacy mypool/.system/samba4 316K 16.9G 316K legacy mypool/.system/services 96K 16.9G 96K legacy mypool/.system/syslog-17a88b624aa64e01b68939563b5fcb8c 228K 16.9G 228K legacy mypool/.system/webui 96K 16.9G 96K legacy
Mountpoint が legacy と書かれているものは、mount コマンドで見ると、実際にはどこかにマウントされている。
NAME欄を見ると、ZFSプール / ZFSファイルシステムという2階層ではなく, 3階層目としてサブヴォリュームが取れる。このサブヴォリュームをマウントする。
.system に設定ファイルなどが格納されている。
  
上の内容を踏まえて, "PC-BSDディスクマネジャー" を見てみよう。
ディスクタブは、ディスクドライブとそのパーティションが見れる。物理ディスクに限らないので, "スライス"という別の用語になっている。
 
ZFSプールタブでは、ZFSストレージプールが見れる。tank 一つだけ。
 
ZFSファイルシステムタブは、ZFSファイルシステムが見れる。
