ZFS on NetBSD
ZFSは簡単に言えば高機能なファイルシステムです。ZFSはストレージのsnapshot/rollbackを簡単に実行できます。重要なデータのバックアップはもちろん、仮想マシンのディスクイメージに対してZFSの機能を活用することで、仮想マシン上でなにかしらのデータが壊れてもすぐに復元できます。
NetBSDではZFSがBase Systemにインストールされています。ここではUSB経由で外付けされたひとつのSSDをひとつのpoolとしてZFSを利用する手順を述べます。なお、NetBSD 8.1では古いZFSが使われており、新しいバージョンのZFSを使うにはNetBSD 8.99.37以降を使う必要があります[clarestudio.org][wiki.netbsd.org]。
パーツ名 | メーカ | 型番 |
---|---|---|
HDD/SSDケース | AOTECH | AOK-25CASE-U3C |
SSD | crucial | CT250MX500SSD1/JP |
接続したときのdmesg(8)
出力は次のとおりです。
[ 49.848242] umass0 at uhub0 port 2 configuration 1 interface 0
[ 49.848242] umass0: AOTECH (0x152d) AOTECH (0x578), rev 3.00/7.01, addr 1
[ 49.848242] umass0: using SCSI over Bulk-Only
[ 49.848242] scsibus0 at umass0: 2 targets, 1 lun per target
[ 49.858249] sd0 at scsibus0 target 0 lun 0: <AOTECH, , 0701> disk fixed
[ 49.868255] sd0: fabricating a geometry
[ 49.868255] sd0: 232 GB, 238475 cyl, 64 head, 32 sec, 512 bytes/sect x 488397168 sectors
[ 49.888268] sd0: fabricating a geometry
NetBSDバージョンの確認
前述のとおりNetBSD 8.99.37以降から新しいバージョンのZFSを使えます。まずはuname -r
を実行しバージョンを確認してください。8.99.37以前であればNetBSDのビルドと更新が必要です。2019年7月9日時点でcurrent版を使いたくないのであれば、古いZFSで我慢するか8.2や9.0のリリースを待つことになります。
本稿ではバージョン8.99.50で動作確認しました。
カーネルモジュールをロードする
ZFSを使うには、事前にzfsモジュールをロードする必要があります。modload(8)
にzfs.kmodを渡してください。
modload /stand/amd64/8.99.50/modules/zfs/zfs.kmod
このモジュールをロードすると、dmesg(8)
からWARNING: ZFS on NetBSD is under development
といった文字列を確認できます。またmodstat(8)
を実行してロードされたカーネルモジュールを確認することもできます。
NAME CLASS SOURCE FLAG REFS SIZE REQUIRES
...
zfs vfs filesys - 0 - solaris
...
ZFS poolを作成する
モジュールをロードできたら、ディスクを接続していよいよZFSを使います。ここでは接続したディスク全体(/dev/sd0)をひとつのZFSストレージプールと見立てます。プールを作るにはzpool(8)
をroot権限で実行します。zpoolという名前のプールを作成します。
zpool create zpool /dev/sd0
このコマンドを実行すると、ルートディレクトリ(/)にzpoolディレクトリが自動的に作られ、プールがマウントされます。mount(8)
からマウントされているファイルシステムの一覧を見てみましょう。
mount
/dev/wd0a on / type ffs (local)
kernfs on /kern type kernfs (local)
ptyfs on /dev/pts type ptyfs (local)
procfs on /proc type procfs (local)
tmpfs on /var/shm type tmpfs (local)
zpool on /zpool type zfs (local)
ZFSファイルシステムを作成する
次にzfs(8)
でこのプールにファイルシステムを作成します。たとえばshareというファイルシステムを作ります。
zfs create zpool/share
zfs list
からシステムのZFSファイルシステムの一覧を取得できます。
zfs list
NAME USED AVAIL REFER MOUNTPOINT
zpool 103K 228G 22K /zpool
zpool/share 21K 228G 21K /zpool/share
作成したファイルシステムは自動的にマウントされるため、作成後はすぐにマウントポイント/zpool/shareを参照できます。
ここではshareという名前でファイルシステムを作りましたが、用途に応じて任意の名前のファイルシステムを作成してください。ZFSではファイルシステム単位でスナップショット/ロールバックができます。そのような操作の対象となることを想定した粒度でファイルシステムを作るといいでしょう。
マウント・アンマウント
zfs umount -a
をすると、システムでマウントされているZFSファイルシステムがすべてアンマウントされます。一方zfs mount -a
はシステムから見えているプールのファイルシステムをすべてマウントします。
zpool upgradeとzfs upgradeの出力
参考までにzpool upgrade
とzfs upgrade
の出力結果を載せておきます。前述のとおり、NetBSDのバージョンは8.99.50です。
zpool upgrade
This system supports ZFS pool feature flags.
All pools are formatted using feature flags.
Every feature flags pool has all supported features enabled.
zfs upgrade
This system is currently running ZFS filesystem version 5.
All filesystems are formatted with the current version.
歴史
2009年8月7日、ZFSはAdam HamsikによってNetBSD-currentへ移植されました[hamsik2009]。2018年5月28日、Chuck Silversによって新しいバージョンのdtraceとZFSが取り込まれました[chs2018]。
参考文献
- ZFS
- https://www.clarestudio.org/netbsd/zfs.html
- 2019/07/07 閲覧
- Finish ZFS
- https://wiki.netbsd.org/projects/project/zfs/
- 2019/07/07 閲覧
- [HEADS UP] zfs import
- https://mail-index.netbsd.org/current-users/2009/08/07/msg010283.html
- 2019/07/21 閲覧
- src/external/cddl/osnet/lib/libzfs/Makefile - view - 1.9
- http://cvsweb.netbsd.org/bsdweb.cgi/src/external/cddl/osnet/lib/libzfs/Makefile?rev=1.9&content-type=text/x-cvsweb-markup&only_with_tag=MAIN
- 2019/07/21 閲覧