ZFS作成

前項で、SSH接続まで行い、この画面表示であるものとする。

Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.  All rights reserved.

FreeBSD ?.?.?  (UNKNOWN)

Welcome to FreeBSD!

Before seeking technical support, please use the following resources:

o  Security advisories and updated errata information for all releases are
   at http://www.FreeBSD.org/releases/ - always consult the ERRATA section
   for your release first as it's updated frequently.

o  The Handbook and FAQ documents are at http://www.FreeBSD.org/ and,
   along with the mailing lists, can be searched by going to
   http://www.FreeBSD.org/search/.  If the doc distribution has
   been installed, they're also available formatted in /usr/share/doc.

If you still have a question or problem, please take the output of
`uname -a', along with any relevant error messages, and email it
as a question to the questions@FreeBSD.org mailing list.  If you are
unfamiliar with FreeBSD's directory layout, please refer to the hier(7)
manual page.  If you are not familiar with manual pages, type `man man'.

You may also use sysinstall(8) to re-enter the installation and
configuration utility.  Edit /etc/motd to change this login announcement.

#

今回作成する環境はSSD+HDDでAHCI有効、SSDのパーティション切って、ZILとL2ARCを作成する。


ディスク準備

Initialize

接続されているドライブのデバイス名を、起動ログからGrepして調査
# dmesg | grep "[ad][ad][0-9]"
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <C300-MTFDDAC064MAG 0002> ATA-9 SATA 3.x device
ada0: 600.000MB/s transfers (SATA 3.x, UDMA5, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 61057MB (125045424 512 byte sectors: 16H 63S/T 16383C)
ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
ada1: <WDC WD10TPVT-00HT5T1 01.01A01> ATA-8 SATA 2.x device
ada1: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada1: Command Queueing enabled
ada1: 953869MB (1953525168 512 byte sectors: 16H 63S/T 16383C)
da0 at umass-sim0 bus 0 scbus3 target 0 lun 0
da0: <I-O DATA USB Flash Disk BC01> Removable Direct Access SCSI-0 device
da0: 40.000MB/s transfers
da0: 1912MB (3915776 512 byte sectors: 255H 63S/T 243C)
GEOM: da0: media size does not match label.
# dmesg | grep "[ad][ad][0-9]"
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <WDC WD10EALX-009BA0 15.01H15> ATA-8 SATA 3.x device
ada0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 953869MB (1953525168 512 byte sectors: 16H 63S/T 16383C)
ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
ada1: <WDC WD10EALX-009BA0 15.01H15> ATA-8 SATA 3.x device
ada1: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
ada1: Command Queueing enabled
ada1: 953869MB (1953525168 512 byte sectors: 16H 63S/T 16383C)
ada2 at ahcich2 bus 0 scbus2 target 0 lun 0
ada2: <C400-MTFDDAC064MAM 0002> ATA-9 SATA 3.x device
ada2: 300.000MB/s transfers (SATA 2.x, UDMA5, PIO 8192bytes)
ada2: Command Queueing enabled
ada2: 61057MB (125045424 512 byte sectors: 16H 63S/T 16383C)
da0 at umass-sim0 bus 0 scbus6 target 0 lun 0
da0: <Sony Storage Media 0100> Removable Direct Access SCSI-0 device
da0: 40.000MB/s transfers
da0: 1935MB (3962880 512 byte sectors: 255H 63S/T 246C)
GEOM: da0: media size does not match label.
作成済みのパーティションを削除 ※新規インストールの場合は不要
# gpart show
=>       34  125045357  ada0  GPT  (60G)
         34        128     1  freebsd-boot  (64K)
        162  125045229     2  freebsd-zfs  (60G)

=>        34  1953525101  ada1  GPT  (932G)
          34         128        - free -  (64K)
         162  1950351360     1  freebsd-zfs  (930G)
  1950351522     3173613        - free -  (1.5G)

=>      0  3915776  da0  BSD  (1.9G)
        0       16       - free -  (8.0K)
       16  2124544    1  !0  (1.0G)
  2124560  1791216       - free -  (875M)

# gpart delete -i 1 ada0
ada0p1 deleted
# gpart delete -i 2 ada0
ada0p2 deleted
# gpart delete -i 1 ada1
ada1p1 deleted
# gpart destroy ada0
ada0 destroyed
# gpart destroy ada1
ada1 destroyed
ディスクを初期化
# dd if=/dev/zero bs=1m count=1 of=/dev/ada0
1+0 records in
1+0 records out
1048576 bytes transferred in 0.012154 secs (86273422 bytes/sec)
# dd if=/dev/zero bs=1m count=1 of=/dev/ada1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.006032 secs (173835830 bytes/sec)
# gpart show
=>      0  3962880  da0  BSD  (1.9G)
        0       16       - free -  (8.0K)
       16  2124544    1  !0  (1.0G)
  2124560  1838320       - free -  (898M)

# dd if=/dev/zero bs=1m count=1 of=/dev/ada0
1+0 records in
1+0 records out
1048576 bytes transferred in 0.003596 secs (291589638 bytes/sec)
# dd if=/dev/zero bs=1m count=1 of=/dev/ada1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.003614 secs (290127747 bytes/sec)
# dd if=/dev/zero bs=1m count=1 of=/dev/ada2
1+0 records in
1+0 records out
1048576 bytes transferred in 0.007912 secs (132527165 bytes/sec)

Partitioning

パーティションの作成
# gpart create -s gpt ada0
ada0 created
# gpart create -s gpt ada1
ada1 created
# gpart add -s 64K -t freebsd-boot ada0
ada0p1 added
# gpart add -s 99879405 -t freebsd-zfs -l ssd0 ada0
ada0p2 added
# gpart add -s 4G -t freebsd-zfs -l cache0 ada0
ada0p3 added
# gpart add -s 8G -t freebsd-zfs -l log0 ada0
ada0p4 added
# gpart add -b 40 -t freebsd-zfs -l hdd0 ada1
ada1p1 added
# gpart create -s gpt ada0
ada0 created
# gpart create -s gpt ada1
ada1 created
# gpart create -s gpt ada2
ada2 created
# gpart add -s 64K -t freebsd-boot ada0
ada0p1 added
# gpart add -s 64K -t freebsd-boot ada1
ada1p1 added
# gpart add -t freebsd-zfs -l hdd0 ada0
ada0p2 added
# gpart add -t freebsd-zfs -l hdd1 ada1
ada1p2 added
# gpart add -s 32G -t freebsd-zfs -l cache0 ada2
ada2p1 added
# gpart add -t freebsd-zfs -l log0 ada2
ada2p2 added
尚、cache0とlog0をssd0より先に作成してしまうと、起動出来なくなるらしいので注意。
bootcode埋め込み
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
bootcode written to ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
bootcode written to ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
bootcode written to ada1
パーティションの確認
# gpart show
=>      0  3915776  da0  BSD  (1.9G)
        0       16       - free -  (8.0K)
       16  2124544    1  !0  (1.0G)
  2124560  1791216       - free -  (875M)

=>       34  125045357  ada0  GPT  (60G)
         34        128     1  freebsd-boot  (64K)
        162   99879405     2  freebsd-zfs  (48G)
   99879567    8388608     3  freebsd-zfs  (4.0G)
  108268175   16777216     4  freebsd-zfs  (8.0G)

=>        34  1953525101  ada1  GPT  (932G)
          34           6        - free -  (3.0K)
          40  1953525095     1  freebsd-zfs  (932G)
# gpart show
=>      0  3962880  da0  BSD  (1.9G)
        0       16       - free -  (8.0K)
       16  2124544    1  !0  (1.0G)
  2124560  1838320       - free -  (898M)

=>        34  1953525101  ada0  GPT  (932G)
          34         128     1  freebsd-boot  (64K)
         162  1953524973     2  freebsd-zfs  (932G)

=>        34  1953525101  ada1  GPT  (932G)
          34         128     1  freebsd-boot  (64K)
         162  1953524973     2  freebsd-zfs  (932G)

=>       34  125045357  ada2  GPT  (60G)
         34   67108864     1  freebsd-zfs  (32G)
   67108898   57936493     2  freebsd-zfs  (28G)

ZFS

Load Module

ZFSをFreeBSDで扱うためのカーネルモジュールを読み込む
# kldload zfs.ko
# kldstat
Id Refs Address            Size     Name
 1   14 0xffffffff80100000 c9fe20   kernel
 2    1 0xffffffff811a0000 ffb0     ahci.ko
 3    1 0xffffffff81222000 104a7a   zfs.ko
 4    1 0xffffffff81327000 1a22     opensolaris.ko
# kldload zfs.ko
# kldstat
Id Refs Address            Size     Name
 1   14 0xffffffff80100000 c9fe20   kernel
 2    1 0xffffffff811a0000 ffb0     ahci.ko
 3    1 0xffffffff81222000 104a7a   zfs.ko
 4    1 0xffffffff81327000 1a22     opensolaris.ko
zfs.koとopensolaris.koがあればおk。

Storage Pool

zpoolでストレージプールを作成。
# zpool create -f zroot /dev/gpt/ssd0
# zpool create -f tank /dev/gpt/hdd0
# zpool create -f zroot mirror /dev/gpt/hdd0 /dev/gpt/hdd1
データストレージ(HDD)のZILとL2ARCを予め切っておいたSSDのパーティションに設定
# zpool add -f tank log /dev/gpt/log0
# zpool add -f tank cache /dev/gpt/cache0
# zpool add -f zroot log /dev/gpt/log0
# zpool add -f zroot cache /dev/gpt/cache0

ZFS Setting

チェックサムの変更
ZFSのデフォルト?のチェックサムアルゴリズム「fletcher2」にはバグがあるらしいので、「fletcher4」か「sha256」に変更。
ここでは「fletcher4」に設定する。
# zfs set checksum=fletcher4 zroot
# zfs set checksum=fletcher4 tank
# zfs set checksum=fletcher4 zroot
atime(access time)無効化
SSD使用の場合は特に必須かも。
# zfs set atime=off zroot
# zfs set atime=off tank
# zfs set atime=off zroot
自動マウントを無効化し、レガシーマウントに変更
# zfs set mountpoint=legacy zroot
# zfs set mountpoint=legacy tank
# zfs set mountpoint=legacy zroot
ストレージプールを確認
# zpool iostat -v
               capacity     operations    bandwidth
pool         used  avail   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
tank        88.5K   928G      0      0     98  5.30K
  gpt/hdd0  88.5K   928G      0      0     77  2.88K
  gpt/log0      0  7.94G      0      0     23  2.74K
cache           -      -      -      -      -      -
  gpt/cache0  1010K  3.99G      0      0    137  1.02K
----------  -----  -----  -----  -----  -----  -----
zroot         87K  47.5G      0      0     73  1.64K
  gpt/ssd0    87K  47.5G      0      0     73  1.64K
----------  -----  -----  -----  -----  -----  -----

# zpool status
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME          STATE     READ WRITE CKSUM
        tank          ONLINE       0     0     0
          gpt/hdd0    ONLINE       0     0     0
        logs
          gpt/log0    ONLINE       0     0     0
        cache
          gpt/cache0  ONLINE       0     0     0

errors: No known data errors

  pool: zroot
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          gpt/ssd0  ONLINE       0     0     0

errors: No known data errors
# zpool iostat -v
                 capacity     operations    bandwidth
pool           used  avail   read  write   read  write
------------  -----  -----  -----  -----  -----  -----
zroot           90K   928G      0      2     86  9.96K
  mirror        90K   928G      0      2     21  2.54K
    gpt/hdd0      -      -      0      1    236  8.90K
    gpt/hdd1      -      -      0      1     64  8.90K
  gpt/log0        0  27.5G      0      0     86  9.88K
cache             -      -      -      -      -      -
  gpt/cache0   698K  32.0G      0      0    512  2.66K
------------  -----  -----  -----  -----  -----  -----

# zpool status
  pool: zroot
 state: ONLINE
 scrub: none requested
config:

        NAME          STATE     READ WRITE CKSUM
        zroot         ONLINE       0     0     0
          mirror      ONLINE       0     0     0
            gpt/hdd0  ONLINE       0     0     0
            gpt/hdd1  ONLINE       0     0     0
        logs
          gpt/log0    ONLINE       0     0     0
        cache
          gpt/cache0  ONLINE       0     0     0

errors: No known data errors

Make ZFS

ファイルシステムを作成
/tmp, /var/tmp, /var/logはtmpfsを使用します。
/var/tmpはFilesystem Hierarchy Standardの規格違反になるらしい。念の為、zrootに割り当てるように変更 --makimaki 2011/2/26 13:18:31
# zfs create zroot/system
# zfs create zroot/system/sysroot
# zfs create zroot/system/usr
# zfs create zroot/system/var
# zfs create zroot/system/var/crash
# zfs create zroot/system/var/db
# zfs create zroot/system/var/db/pkg
# zfs create zroot/system/var/empty
# zfs create zroot/system/var/mail
# zfs create zroot/system/var/run
# zfs create zroot/system/var/tmp
# zfs create tank/src
# zfs create tank/ports
# zfs create tank/ports/distfiles
# zfs create tank/ports/packages
# zfs create tank/home
# zfs create zroot/system
# zfs create zroot/system/sysroot
# zfs create zroot/system/usr
# zfs create zroot/system/var
# zfs create zroot/system/var/crash
# zfs create zroot/system/var/db
# zfs create zroot/system/var/db/pkg
# zfs create zroot/system/var/empty
# zfs create zroot/system/var/log
# zfs create zroot/system/var/mail
# zfs create zroot/system/var/run
# zfs create zroot/system/var/tmp
# zfs create zroot/src
# zfs create zroot/ports
# zfs create zroot/ports/distfiles
# zfs create zroot/ports/packages
# zfs create zroot/home
圧縮設定
適当に設定。
# zfs set compression=gzip-5 zroot/system/var/crash
# zfs set compression=gzip-3 zroot/system/var/db/pkg
# zfs set compression=gzip-5 zroot/system/var/mail
# zfs set compression=lzjb zroot/system/var/tmp
# zfs set compression=gzip-9 tank/src
# zfs set compression=lzjb tank/ports
# zfs set compression=gzip-5 zroot/system/var/crash
# zfs set compression=gzip-3 zroot/system/var/db/pkg
# zfs set compression=gzip-5 zroot/system/var/mail
# zfs set compression=lzjb zroot/system/var/tmp
# zfs set compression=gzip-9 zroot/src
# zfs set compression=lzjb zroot/ports
# zfs set compression=gzip-9 zroot/ports/distfiles
# zfs set compression=gzip-3 zroot/ports/packages
実行権無効化
# zfs set exec=off zroot/system/var/crash
# zfs set exec=off zroot/system/var/db
# zfs set exec=on zroot/system/var/db/pkg
# zfs set exec=off zroot/system/var/empty
# zfs set exec=off zroot/system/var/mail
# zfs set exec=off tank/src
# zfs set exec=off tank/ports/distfiles
# zfs set exec=off tank/ports/packages
# zfs set exec=off zroot/system/var/crash
# zfs set exec=off zroot/system/var/db
# zfs set exec=on zroot/system/var/db/pkg
# zfs set exec=off zroot/system/var/empty
# zfs set exec=off zroot/system/var/log
# zfs set exec=off zroot/system/var/mail
# zfs set exec=off zroot/src
# zfs set exec=off zroot/ports/distfiles
# zfs set exec=off zroot/ports/packages
setuid無効化
# zfs set setuid=off zroot/system/var/crash
# zfs set setuid=off zroot/system/var/db
# zfs set setuid=off zroot/system/var/db/pkg
# zfs set setuid=off zroot/system/var/empty
# zfs set setuid=off zroot/system/var/mail
# zfs set setuid=off zroot/system/var/tmp
# zfs set setuid=off tank/src
# zfs set setuid=off tank/ports
# zfs set setuid=off tank/ports/distfiles
# zfs set setuid=off tank/ports/packages
# zfs set setuid=off zroot/system/var/crash
# zfs set setuid=off zroot/system/var/db
# zfs set setuid=off zroot/system/var/db/pkg
# zfs set setuid=off zroot/system/var/empty
# zfs set setuid=off zroot/system/var/log
# zfs set setuid=off zroot/system/var/mail
# zfs set setuid=off zroot/system/var/tmp
# zfs set setuid=off zroot/src
# zfs set setuid=off zroot/ports
# zfs set setuid=off zroot/ports/distfiles
# zfs set setuid=off zroot/ports/packages
Swap領域の作成
# zfs create -V 16G tank/swap
# zfs set org.freebsd:swap=on tank/swap
# zfs set checksum=off tank/swap
# zfs create -V 8G zroot/swap
# zfs set org.freebsd:swap=on zroot/swap
# zfs set checksum=off zroot/swap
ブートルート設定
# zpool set bootfs=zroot/system/sysroot zroot
# zpool set bootfs=zroot/system/sysroot zroot

参考