FreeBSD で ZFS を試す2009年03月13日 01時28分37秒

一度は ZFS を諦めたディスクで、USB quirk を加えた後に、再度 ZFS を試してみることにした。FreeBSD-7.1-RELEASE を使っている。

zfs は zpool と対になって使う。zpool で仮想デバイスを管理し、zfs でファイルシステムを作る。よく、この様にまとめられる。FreeBSD で言うと、zpool は GEOM、つまりデバイスレベルの制御、zfs は ufs 等のファイルシステムレベルの制御の様だ。 一つの zpool の特徴的な動作としては、zpool が提供するにはファイルシステムだと言うこと。GEOM だと、デバイスしか提供しないので、その上にファイルシステムを作る必要がある。zpool は既にファイルシステムを提供するので、そのままでも使えるし、その中から別途ファイルシステムに割り当てる事も出来る。

zfs モジュールを読み込む。


$ kldload zfs

常用するのなら、echo 'zfs_enable="YES"' >> /etc/rc.conf を行なう。

既に GPT で切られているパーティションをそのまま使う。何か失敗した時に、再度パーティションを切る手間を省く為だ。もちろん、ディスク全体を使うことも出来る。


$ gpt show da0
    start     size  index  contents
        0        1         PMBR
        1        1         Pri GPT header
        2       32         Pri GPT table
       34  7600000      1  GPT part - FreeBSD UFS/UFS2
  7600034   407485      2  GPT part - FreeBSD UFS/UFS2
  8007519       32         Sec GPT table
  8007551        1         Sec GPT header
$ gpart modify -i 1 -t freebsd-zfs da0
da0p1 modified
$ gpart modify -i 2 -t freebsd-zfs da0
da0p2 modified
$ gpart show da0
=>     34  8007485  da0  GPT  (3.8G)
       34  7600000    1  freebsd-zfs  (3.6G)
  7600034   407485    2  freebsd-zfs  (199M)
$ gpt show da0
gpt show: unable to open device 'da0': Operation not permitted
$ gpart show da0
=>     34  8007485  da0  GPT  (3.8G)
       34  7600000    1  freebsd-zfs  (3.6G)
  7600034   407485    2  freebsd-zfs  (199M)
$ gpt show da0
    start     size  index  contents
        0        1         PMBR
        1        1         Pri GPT header
        2       32         Pri GPT table
       34  7600000      1  GPT part - FreeBSD ZFS
  7600034   407485      2  GPT part - FreeBSD ZFS
  8007519       32         Sec GPT table
  8007551        1         Sec GPT header

scratch と言う名で、zpool を作った。


$ zpool create scratch /dev/da0p1 /dev/da0p2
$ df /scratch
Filesystem 1K-blocks Used   Avail Capacity  Mounted on
scratch      3904896  128 3904768     0%    /scratch
$ zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
scratch                3.78G    112K   3.78G     0%  ONLINE     -

既に、/scratch としてマウントされている。

圧縮を有効にする。


$ zfs set compression=on scratch

zpool の様子を調べてみた。


$ zfs get all scratch
NAME     PROPERTY       VALUE                  SOURCE
scratch  type           filesystem             -
scratch  creation       Wed Mar  4 13:03 2009  -
scratch  used           142K                   -
scratch  available      3.72G                  -
scratch  referenced     18K                    -
scratch  compressratio  1.00x                  -
scratch  mounted        yes                    -
scratch  quota          none                   default
scratch  reservation    none                   default
scratch  recordsize     128K                   default
scratch  mountpoint     /scratch               default
scratch  sharenfs       off                    default
scratch  checksum       on                     default
scratch  compression    on                     local
scratch  atime          on                     default
scratch  devices        on                     default
scratch  exec           on                     default
scratch  setuid         on                     default
scratch  readonly       off                    default
scratch  jailed         off                    default
scratch  snapdir        hidden                 default
scratch  aclmode        groupmask              default
scratch  aclinherit     secure                 default
scratch  canmount       on                     default
scratch  shareiscsi     off                    default
scratch  xattr          off                    temporary
scratch  copies         1                      defaul
$ zfs get compression
NAME         PROPERTY     VALUE        SOURCE
scratch      compression  on           local
$ zpool status
  pool: scratch
 state: ONLINE
 scrub: none requested
config: 

        NAME        STATE     READ WRITE CKSUM
        scratch     ONLINE       0     0     0
          da0p1     ONLINE       0     0     0
          da0p2     ONLINE       0     0     0

errors: No known data errors

取り敢えず、これで /scratch として使う準備は整った。