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ファイルシステムが見れる。