ZFS on Linux を設定する(2) - ファイルシステムの作成

[続き](http://qiita.com/flny/items/861e37bddf69bddffae9)

# ファイルシステムを作成する
zfs createコマンドでファイルシステムを作成します。
[前回](http://qiita.com/flny/items/861e37bddf69bddffae9)作ったtankという名称のストレージプールに、homeという名称のファイルシステムを作成します。

```
$ sudo zfs create tank/home
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        94G  1.5G   92G   2% /
(略)
tank            1.3T  128K  1.3T   1% /tank
tank/home       1.3T  128K  1.3T   1% /tank/home
```

一瞬で作成され、そのままマウントもされます。

# ファイルシステムのプロパティを変更する
ファイルシステムには様々なプロパティがあり、プロパティを設定することで動作を変更することができます。zfs get allコマンドでプロパティの一覧を見てみましょう。

```
$ sudo zfs get all tank/home
NAME       PROPERTY              VALUE                  SOURCE
tank/home  type                  filesystem             -
tank/home  creation              Wed Nov 11  0:38 2015  -
tank/home  used                  140K                   -
tank/home  available             1.28T                  -
tank/home  referenced            140K                   -
tank/home  compressratio         1.00x                  -
tank/home  mounted               yes                    -
tank/home  quota                 none                   default
tank/home  reservation           none                   default
tank/home  recordsize            128K                   default
tank/home  mountpoint            /tank/home             default
tank/home  sharenfs              off                    default
tank/home  checksum              on                     default
tank/home  compression           off                    default
tank/home  atime                 on                     default
tank/home  devices               on                     default
tank/home  exec                  on                     default
tank/home  setuid                on                     default
tank/home  readonly              off                    default
tank/home  zoned                 off                    default
tank/home  snapdir               hidden                 default
tank/home  aclinherit            restricted             default
tank/home  canmount              on                     default
tank/home  xattr                 on                     default
tank/home  copies                1                      default
tank/home  version               5                      -
tank/home  utf8only              off                    -
tank/home  normalization         none                   -
tank/home  casesensitivity       sensitive              -
tank/home  vscan                 off                    default
tank/home  nbmand                off                    default
tank/home  sharesmb              off                    default
tank/home  refquota              none                   default
tank/home  refreservation        none                   default
tank/home  primarycache          all                    default
tank/home  secondarycache        all                    default
tank/home  usedbysnapshots       0                      -
tank/home  usedbydataset         140K                   -
tank/home  usedbychildren        0                      -
tank/home  usedbyrefreservation  0                      -
tank/home  logbias               latency                default
tank/home  dedup                 off                    default
tank/home  mlslabel              none                   default
tank/home  sync                  standard               default
tank/home  refcompressratio      1.00x                  -
tank/home  written               140K                   -
tank/home  logicalused           40K                    -
tank/home  logicalreferenced     40K                    -
tank/home  filesystem_limit      none                   default
tank/home  snapshot_limit        none                   default
tank/home  filesystem_count      none                   default
tank/home  snapshot_count        none                   default
tank/home  snapdev               hidden                 default
tank/home  acltype               off                    default
tank/home  context               none                   default
tank/home  fscontext             none                   default
tank/home  defcontext            none                   default
tank/home  rootcontext           none                   default
tank/home  relatime              off                    default
tank/home  redundant_metadata    all                    default
tank/home  overlay               off                    default
```

mountpointプロパティを設定して、tank/home を /home としてマウントしてみます。まずは既存の/homeにあるファイルをtank/homeへコピーします。

```
$ sudo cp -a /home/* /tank/home/
```

次に mountpointプロパティを設定すると /homeの中身がカラじゃないと警告が出ますが、設定自体は成功します。

```
$ sudo zfs set mountpoint=/home tank/home
cannot mount '/home': directory is not empty
property may be set but unable to remount filesystem
$ sudo zfs get mountpoint tank/home
NAME       PROPERTY    VALUE       SOURCE
tank/home  mountpoint  /home       local
```

この状態でサーバ再起動すると、tank/home が /home にマウントされます。

```
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        94G  1.5G   92G   2% /
(略)
tank            1.3T  128K  1.3T   1% /tank
tank/home       1.3T  128K  1.3T   1% /home
```

ちなみに mountpoint=legacy と設定すると、mountコマンドや/etc/fstabでマウントする 従来の方式になります。

ついでにあと2つプロパティを設定します。

```
$ sudo zfs set atime=off  tank/home
$ sudo zfs set compression=on tank/home
```
atimeプロパティは [マウントオプションでお馴染みのアレ](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/659noatime.html)です。
compressionプロパティをonにすると、これ以降 tank/home に作成されるデータがzip圧縮されるようになります。onにした時点で存在するデータは圧縮されないとのこと。[^1]

各プロパティの解説は[本家のドキュメント](https://docs.oracle.com/cd/E26924_01/html/E25824/gazss.html#scrolltoc)が詳しいです。

[続く](http://qiita.com/flny/items/ee3d443f84128b0202a7)

[^1]: なので本当は cp -a /home/* /tank/home/ を実行する前に compression=onにしたほうがよかったです