CentOS7でzfsを動かしてみる
FreeBSDでzfs FreeBSD/zfs

CentOS7のyumには登録されていないパッケージで、ライセンス的に?なのですが、使いたいから入れてみた。

minimumで仮想CentOS7を作り、そこにzfs向けとして256GB(Thin Provision)のHDD4本を追加した

[root@zfs ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@zfs ~]#
[root@zfs ~]# cat /proc/partitions
major minor  #blocks  name
 
   2        0          4 fd0
  11        0     470528 sr0
   8       32  268435456 sdc
   8       16  268435456 sdb
   8        0   16777216 sda
   8        1     524288 sda1
   8        2     524288 sda2
   8        3    2097152 sda3
   8        4   13629440 sda4
   8       64  268435456 sde
   8       48  268435456 sdd
[root@zfs ~]#

留意
この4つの仮想HDD(sdb,sdc,sdd,sde)は parted で mklabel gpt とします。(参照: ubuntu/zfs#fa90acb2)

[root@zfs ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) quit
Information: You may need to update /etc/fstab.
 
[root@zfs ~]#

リポジトリの登録

ZFS on Linuxhttp://zfsonlinux.org/にRHEL/CentOS向けのリポジトリがある。これを登録する

[root@zfs ~]# rpm -Uvh http://download.zfsonlinux.org/epel/zfs-release.el7_3.noarch.rpm
http://download.zfsonlinux.org/epel/zfs-release.el7_3.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.5XkOPb: ヘッダー V4 RSA/SHA256 Signature、鍵 ID f14ab620: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:zfs-release-1-4.el7_3.centos     ################################# [100%]
[root@zfs ~]#

すると、/etc/yum.repos.d にzfs.repoが配置される。

[root@zfs ~]# ls -l /etc/yum.repos.d/
合計 40
-rw-r--r--. 1 root root 1664 11月 30 03:12 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 11月 30 03:12 CentOS-CR.repo
-rw-r--r--. 1 root root  649 11月 30 03:12 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  630 11月 30 03:12 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 11月 30 03:12 CentOS-Sources.repo
-rw-r--r--. 1 root root 2893 11月 30 03:12 CentOS-Vault.repo
-rw-r--r--. 1 root root  314 11月 30 03:12 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 1056  7月 24 06:37 epel-testing.repo
-rw-r--r--. 1 root root  957  7月 24 06:37 epel.repo
-rw-r--r--  1 root root 1225 12月 13 08:27 zfs.repo
[root@zfs ~]#

次に、zfsにはepelリポジトリ提供の dkmsパッケージ が必要です。
なのでそのepelのリポジトリも登録します

[root@zfs ~]# yum install epel-release

zfsのインストール

次に、実際にzfs関連モジュールをインストールしますが、確認としてzfs.repoで提供される中身を見てみる

[root@zfs ~]# yum list |grep zfs
zfs-release.noarch                      1-4.el7_3.centos               installed
libnvpair1.x86_64                       0.6.5.8-1.el7_3.centos         zfs
libuutil1.x86_64                        0.6.5.8-1.el7_3.centos         zfs
libzfs2.x86_64                          0.6.5.8-1.el7_3.centos         zfs
libzfs2-devel.x86_64                    0.6.5.8-1.el7_3.centos         zfs
libzpool2.x86_64                        0.6.5.8-1.el7_3.centos         zfs
spl.x86_64                              0.6.5.8-1.el7_3.centos         zfs
spl-debuginfo.x86_64                    0.6.5.8-1.el7_3.centos         zfs
spl-dkms.noarch                         0.6.5.8-1.el7_3.centos         zfs
zfs.x86_64                              0.6.5.8-1.el7_3.centos         zfs
zfs-debuginfo.x86_64                    0.6.5.8-1.el7_3.centos         zfs
zfs-dkms.noarch                         0.6.5.8-1.el7_3.centos         zfs
zfs-dracut.x86_64                       0.6.5.8-1.el7_3.centos         zfs
zfs-test.x86_64                         0.6.5.8-1.el7_3.centos         zfs
[root@zfs ~]#

下記コマンドでzfsのインストールを行います。

[root@zfs ~]# yum install zfs

この直後にzpoolコマンドを実行すると

[root@zfs ~]# zpool list
The ZFS modules are not loaded.
Try running '/sbin/modprobe zfs' as root to load them.
[root@zfs ~]#

といわれます。/sbin/modprobe zfsを実行してzfsが利用可能になるのですが、再起動すると外れる。。。
それを回避するには

[root@zfs ~]# systemctl enable zfs-import-cache
[root@zfs ~]# systemctl enable zfs-mount
[root@zfs ~]# systemctl enable zfs-import.target

を有効にしておく
*zfsのマウントポイントが存在した場合、この方式で再起動後でもzfsカーネルモジュールが外れなく、zfsマウントが反映されるって感じかな

ストレージプール作成

まずは、zfsカーネルモジュール zfs.ko をロードします

[root@zfs ~]# /sbin/modprobe zfs

そして、zfsストレージプールを作成します。
プールの性格をストライピングにするなら

[root@zfs ~]# zpool create tank /dev/sdb /dev/sdc /dev/sdd /dev/sde

とします。確認は

[root@zfs ~]# zpool status tank
  pool: tank
 state: ONLINE
  scan: none requested
config:
 
        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          sdb       ONLINE       0     0     0
          sdc       ONLINE       0     0     0
          sdd       ONLINE       0     0     0
          sde       ONLINE       0     0     0
 
errors: No known data errors
[root@zfs ~]#

にて行える。
このストレージプールを作成すると同時にファイルシステムにも登録される

[root@zfs ~]# df -lTh -F zfs
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
tank           zfs      985G     0  985G    0% /tank
[root@zfs ~]#

この大本のストレージプールからサブボリュームを作成して、それを特定のマウントポイントにするには

[root@zfs ~]# zfs create tank/scratch
[root@zfs ~]# df -lTh -F zfs
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
tank           zfs      985G     0  985G    0% /tank
tank/scratch   zfs      985G     0  985G    0% /tank/scratch
[root@zfs ~]#
 
[root@zfs ~]# zfs umount tank/scratch
[root@zfs ~]# df -lTh -F zfs
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
tank           zfs      985G     0  985G    0% /tank
[root@zfs ~]#
 
[root@zfs ~]# mkdir /scratch
[root@zfs ~]# zfs set mountpoint=/scratch tank/scratch
[root@zfs ~]# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
tank            95K   984G    19K  /tank
tank/scratch    19K   984G    19K  /scratch
[root@zfs ~]#
 
[root@zfs ~]# df -lTh -F zfs
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
tank           zfs      985G     0  985G    0% /tank
[root@zfs ~]#
[root@zfs ~]# zfs mount tank/scratch
[root@zfs ~]# df -lTh -F zfs
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
tank           zfs      985G     0  985G    0% /tank
tank/scratch   zfs      985G     0  985G    0% /scratch
[root@zfs ~]#

ストレージプールの解消

作ったストレージプールを解消するには
zpool destroy <ストレージプール>
とする

scratch のパーミッション変更

一時ファイルの置き場所としてなのなら

[root@zfs ~]# chmod 1777 /scratch
 
[root@zfs ~]# ls -ld /scratch
drwxrwxrwt 3 root root 4 12月 21 22:38 /scratch
[root@zfs ~]#

とする

scrub

[root@ss1 ~]# crontab -e
55 23 * * 5 /usr/sbin/zpool scrub tank

(めも)

cat /proc/spl/kstat/zfs/arcstats
arcstat.py 10 10
zfs set atime=off tank

raid-z

[root@zfs ~]# zpool create tank raidz1 ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx1 \
                                       ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx2 \
                                       ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx3 \
                                       ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx4 \
                                       ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx5 \
                                       ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx6 \
                                       ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx7 \
                                       ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx8
 
[root@zfs ~]# zpool list
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank  43.5T  1.45M  43.5T         -     0%     0%  1.00x  ONLINE  -
 
[root@zfs ~]# zpool status
  pool: tank
 state: ONLINE
  scan: none requested
config:
 
        NAME                                          STATE     READ WRITE CKSUM
        tank                                          ONLINE       0     0     0
          raidz1-0                                    ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx1  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx2  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx3  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx4  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx5  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx6  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx7  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx8  ONLINE       0     0     0
 
errors: No known data errors
[root@zfs ~]# zfs get all tank
 :
tank  dedup                 off                      default
 :
[root@zfs ~]#

log

[root@zfs ~]# zpool add tank log -f /dev/sdi1
[root@zfs ~]# zpool status
  pool: tank
 state: ONLINE
  scan: none requested
config:
 
        NAME                                          STATE     READ WRITE CKSUM
        tank                                          ONLINE       0     0     0
          raidz1-0                                    ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx1  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx2  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx3  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx4  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx5  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx6  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx7  ONLINE       0     0     0
            ata-WDC_WD60EFRX-68L0BN1_WD-WXxxxxxxxxx8  ONLINE       0     0     0
        logs
          sdi1                                        ONLINE       0     0     0
 
errors: No known data errors
[root@zfs ~]#

zpool iostat

                                                capacity     operations     bandwidth
pool                                          alloc   free   read  write   read  write
--------------------------------------------  -----  -----  -----  -----  -----  -----
tank                                          30.1T  13.4T      0  19.4K      0   878M
  raidz1                                      30.1T  13.4T      0  19.4K      0   878M
    ata-WDC_WD60EFRX-68L0BN1_WD-WX41DA55Sxxx      -      -      0  2.49K      0   109M
    ata-WDC_WD60EFRX-68L0BN1_WD-WX41D95Pxxxx      -      -      0  2.15K      0   111M
    ata-WDC_WD60EFRX-68L0BN1_WD-WXN1H8xxxxxx      -      -      0  2.44K      0   110M
    ata-WDC_WD60EFRX-68L0BN1_WD-WXB1HB4xxxxx      -      -      0  2.21K      0   110M
    ata-WDC_WD60EFRX-68L0BN1_WD-WX21Dxxxxxxx      -      -      0  2.56K      0   110M
    ata-WDC_WD60EFRX-68L0BN1_WD-WXN1xxxxxxxW      -      -      0  2.48K      0   108M
    ata-WDC_WD60EFRX-68L0BN1_WD-WXB1xxxxxxxN      -      -      0  2.89K      0   110M
    ata-WDC_WD60EFRX-68L0BN1_WD-WXB1xxxxxxPK      -      -      0  2.17K      0   110M
logs                                              -      -      -      -      -      -
  sdi1                                            0   256G      0      0      0      0

めも

1.4TBのファイル削除に 52sec要した
18GBなら0.45sec
47GBなら1.5sec
80GBなら2.8sec

zpoolを /dev/sdX で作ってしまったら...

zpool を /dev/sdb, /dev/sdc とかで作ってしまい

[root@zfs ~]# zpool status
  pool: tank
 state: ONLINE
  scan: none requested
config:
 
        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          sdb       ONLINE       0     0     0
          sdc       ONLINE       0     0     0
 
errors: No known data errors
[root@zfs ~]#

この状態でデバイスを追加して sdc が sdd と変更されると zpool は構成できない.
このsdb, sdc をもっと固有の名前に変更するには

[root@zfs ~]# zpool export tank

と一旦プールをアンマウントさせて
「/dev/disk/by-id」か「/dev/disk/by-path」で再構成する

[root@zfs ~]# zpool import -d /dev/disk/by-path -aN
 
「-d」dir|device
        Uses device or searches for devices or files in dir.  The -d option can be specified multiple times.
「-a」Searches for and imports all pools found.
「-N」Import the pool without mounting any file systems.

これで下記のように切り替わる

[root@zfs ~]# zpool status
  pool: tank
 state: ONLINE
  scan: none requested
config:
 
        NAME                             STATE     READ WRITE CKSUM
        tank                             ONLINE       0     0     0
          pci-0000:03:00.0-scsi-0:0:1:0  ONLINE       0     0     0
          pci-0000:03:00.0-scsi-0:0:3:0  ONLINE       0     0     0
 
errors: No known data errors
[root@zfs ~]#

ただ「-N」を入れたのでmountは行われない。マウントするには

[root@zfs ~]# zfs mount tank

とする。これで正常に切り替わり、ファイルシステムが使えることを確認できる
この後にストレージを追加して sdc が sdd に変わっても問題なくzpoolが使える

最新の60件
2025-02-03 2025-02-02 2025-02-01 2025-01-27 2025-01-26 2025-01-25 2025-01-24 2025-01-23 2025-01-20 2025-01-13 2025-01-12 2025-01-08 2024-12-30 2024-12-29 2024-12-22 2024-12-20 2024-12-17 2024-12-15 2024-12-14 2024-12-12 2024-12-11 2024-12-10 2024-12-09 2024-12-08 2024-12-04 2024-11-28 2024-11-22 2024-11-15 2024-11-14 2024-11-12 2024-11-06 2024-11-05 2024-11-04 2024-11-02 2024-11-01 2024-10-28 2024-10-27 2024-10-23 2024-10-18 2024-10-17 2024-10-15 2024-10-14 2024-10-13 2024-10-11 2024-10-10

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-06-18 (金) 02:12:46