2016年12月8日木曜日

FreeBSD 11のインストール(zfs root/mirrorの場合) - 3

FreeBSD 11のインストールの続きです。

swapを設定する

CDからのインストール時にはswapは0にしたので、現在はswapの設定がありません。
# swapinfo
Device          512-blocks     Used    Avail Capacity
[root@kona /usr/home/ss]# gpart show
=>        40  7814037088  ada0  GPT  (3.6T)
          40        1600     1  efi  (800K)
        1640        1024     2  freebsd-boot  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  freebsd-zfs  (3.6T)
  7814035456        1672        - free -  (836K)

=>        40  7814037088  ada1  GPT  (3.6T)
          40        1600     1  efi  (800K)
        1640        1024     2  freebsd-boot  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  freebsd-zfs  (3.6T)
  7814035456        1672        - free -  (836K)


#
zfs上にswapファイルを置くので、zfsコマンドで32GBのswap用のファイルを作ります。
# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
zkona00               1.60G  3.51T    96K  /zkona00
zkona00/ROOT           387M  3.51T    96K  none
zkona00/ROOT/default   387M  3.51T   387M  /
zkona00/tmp            484K  3.51T   484K  /tmp
zkona00/usr           1.22G  3.51T    96K  /usr
zkona00/usr/home       136K  3.51T   136K  /usr/home
zkona00/usr/ports      640M  3.51T   640M  /usr/ports
zkona00/usr/src        608M  3.51T   608M  /usr/src
zkona00/var            648K  3.51T    96K  /var
zkona00/var/audit       96K  3.51T    96K  /var/audit
zkona00/var/crash       96K  3.51T    96K  /var/crash
zkona00/var/log        168K  3.51T   168K  /var/log
zkona00/var/mail        96K  3.51T    96K  /var/mail
zkona00/var/tmp         96K  3.51T    96K  /var/tmp
# zfs create -V 32gb zkona00/var/swap
# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
zkona00               34.6G  3.48T    96K  /zkona00

zkona00/var/swap      33.0G  3.51T    64K  -

zkona00/var/tmp         96K  3.48T    96K  /var/tmp
#
次にzkona00/var/swapをスワップ領域として設定します。
# zfs set org.freebsd:swap=on zkona00/var/swap
# zfs get org.freebsd:swap zkona00/var/swap
NAME              PROPERTY          VALUE             SOURCE
zkona00/var/swap  org.freebsd:swap  on                local
# reboot

$ swapinfo -g
Device          1G-blocks     Used    Avail Capacity
/dev/zvol/zkona00/var/swap        32        0       32     0%
$

zfsで使用するパーティションをラベルで参照する

先日、以下のようなことを書きました。
追記: ZFSに使うパーティションをラベルで参照する
http://www.sakashita-net.jp/2016/11/freebsd-11zfs-rootmirror.html

bsd-installだとzfsに使うパーティションの参照が物理デバイス名になっています。
物理デバイス名は、接続されているディスク数によって変わってしまうので、故障のときにうまくありません。
以下に変更の手順を示します。

まず現状を確認します。
$ zpool status
  pool: zkona00
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    zkona00     ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        ada0p3  ONLINE       0     0     0
        ada1p3  ONLINE       0     0     0

errors: No known data errors
$ gpart show
=>        40  7814037088  ada0  GPT  (3.6T)
          40        1600     1  efi  (800K)
        1640        1024     2  freebsd-boot  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  freebsd-zfs  (3.6T)
  7814035456        1672        - free -  (836K)

=>        40  7814037088  ada1  GPT  (3.6T)
          40        1600     1  efi  (800K)
        1640        1024     2  freebsd-boot  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  freebsd-zfs  (3.6T)
  7814035456        1672        - free -  (836K)
$
zfsのプールはada0p3とada1p3のようにデバイス名で参照されています。これをパーティションテーブルに設定したラベルを参照するに変更します。

まずラベルが/dev/gptの下に見えるように設定を変更します。
# vi /boot/loader.conf

kern.geom.label.gptid.enable="1"

# reboot
現在のラベルを確認すると、まだ設定していないことがわかります。
# gpart show ada0 ada1
=>        40  7814037088  ada0  GPT  (3.6T)
          40        1600     1  efi  (800K)
        1640        1024     2  freebsd-boot  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  freebsd-zfs  (3.6T)
  7814035456        1672        - free -  (836K)

=>        40  7814037088  ada1  GPT  (3.6T)
          40        1600     1  efi  (800K)
        1640        1024     2  freebsd-boot  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  freebsd-zfs  (3.6T)
  7814035456        1672        - free -  (836K)

# gpart show -l ada0 ada1
=>        40  7814037088  ada0  GPT  (3.6T)
          40        1600     1  efiboot0  (800K)
        1640        1024     2  gptboot0  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  (null)  (3.6T)
  7814035456        1672        - free -  (836K)

=>        40  7814037088  ada1  GPT  (3.6T)
          40        1600     1  efiboot1  (800K)
        1640        1024     2  gptboot1  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  (null)  (3.6T)
  7814035456        1672        - free -  (836K)

#
3番目のパーティション、パーティションタイプがfreebsd-zfsとなっているところにラベル、disk0とdisk1を設定します。
# gpart modify -i 3 -l disk0 ada0
ada0p3 modified
# gpart modify -i 3 -l disk0 ada1
ada1p3 modified
# gpart show -l ada0 ada1
=>        40  7814037088  ada0  GPT  (3.6T)
          40        1600     1  efiboot0  (800K)
        1640        1024     2  gptboot0  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  disk0  (3.6T)
  7814035456        1672        - free -  (836K)

=>        40  7814037088  ada1  GPT  (3.6T)
          40        1600     1  efiboot1  (800K)
        1640        1024     2  gptboot1  (512K)
        2664        1432        - free -  (716K)
        4096  7814031360     3  disk0  (3.6T)
  7814035456        1672        - free -  (836K)

#
次にミラー構成のディスクの片側を外して(detach)、ふたたびラベル参照で取り付けます(attach)。最初にada0p3を外します。
# zpool status
  pool: zkona00
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    zkona00     ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        ada0p3  ONLINE       0     0     0
        ada1p3  ONLINE       0     0     0

errors: No known data errors
# zpool detach zkona00 ada0p3
# zpool status
  pool: zkona00
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    zkona00     ONLINE       0     0     0
      ada1p3    ONLINE       0     0     0

errors: No known data errors
 ada0p3の代わりにgpt/disk0というラベル名で取り付けます。
# ls /dev/gpt
disk0        efiboot1    gptboot1    swap1
efiboot0    gptboot0    swap0
# zpool attach zkona00 ada1p3 gpt/disk0
Make sure to wait until resilver is done before rebooting.

If you boot from pool 'zkona00', you may need to update
boot code on newly attached disk 'gpt/disk0'.

Assuming you use GPT partitioning and 'da0' is your new boot disk
you may use the following command:

    gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

# zpool status
  pool: zkona00
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
    continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Thu Dec  8 07:24:58 2016
        236M scanned out of 1.60G at 26.2M/s, 0h0m to go
        236M resilvered, 14.41% done
config:

    NAME           STATE     READ WRITE CKSUM
    zkona00        ONLINE       0     0     0
      mirror-0     ONLINE       0     0     0
        ada1p3     ONLINE       0     0     0
        gpt/disk0  ONLINE       0     0     0  (resilvering)

errors: No known data errors# zpool status
  pool: zkona00
 state: ONLINE
  scan: resilvered 1.60G in 0h0m with 0 errors on Thu Dec  8 07:25:39 2016
config:

    NAME           STATE     READ WRITE CKSUM
    zkona00        ONLINE       0     0     0
      mirror-0     ONLINE       0     0     0
        ada1p3     ONLINE       0     0     0
        gpt/disk0  ONLINE       0     0     0

errors: No known data errors
次にada1p3を外します。
# zpool detach zkona00 ada1p3
# zpool status
  pool: zkona00
 state: ONLINE
  scan: resilvered 1.60G in 0h0m with 0 errors on Thu Dec  8 07:25:39 2016
config:

    NAME         STATE     READ WRITE CKSUM
    zkona00      ONLINE       0     0     0
      gpt/disk0  ONLINE       0     0     0

errors: No known data errors
# ls /dev/gpt
disk0        efiboot0    gptboot0    swap0
disk1        efiboot1    gptboot1    swap1
ada1p3の代わりにgpt/disk1というラベル名で取り付けます。
# zpool attach zkona00 gpt/disk0  gpt/disk1
Make sure to wait until resilver is done before rebooting.

If you boot from pool 'zkona00', you may need to update
boot code on newly attached disk 'gpt/disk1'.

Assuming you use GPT partitioning and 'da0' is your new boot disk
you may use the following command:

    gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

# zpool status
  pool: zkona00
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
    continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Thu Dec  8 07:30:53 2016
        360M scanned out of 1.60G at 32.7M/s, 0h0m to go
        359M resilvered, 21.96% done
config:

    NAME           STATE     READ WRITE CKSUM
    zkona00        ONLINE       0     0     0
      mirror-0     ONLINE       0     0     0
        gpt/disk0  ONLINE       0     0     0
        gpt/disk1  ONLINE       0     0     0  (resilvering)

errors: No known data errors
#
これでzfsのプールに使うパーティションをラベルで参照するように変更できました。

FreeBSD 11ではインストール時にZFSで構成すると圧縮が有効になっているので、ついでに、ここで解除します。理由は性能とファイルシステムの空き容量の推測が難しくなるためです。
# zfs get compression      
NAME                  PROPERTY     VALUE     SOURCE
zkona00               compression  lz4       local
zkona00/ROOT          compression  lz4       inherited from zkona00
zkona00/ROOT/default  compression  lz4       inherited from zkona00
zkona00/tmp           compression  lz4       inherited from zkona00

# zfs set compression=off zkona00
# zfs get compression 
NAME                  PROPERTY     VALUE     SOURCE
zkona00               compression  off       local
zkona00/ROOT          compression  off       inherited from zkona00
zkona00/ROOT/default  compression  off       inherited from zkona00
zkona00/tmp           compression  off       inherited from zkona00
#