#author("2023-07-21T18:04:21+00:00","default:sysosa","sysosa")
#author("2023-07-21T18:12:20+00:00","default:sysosa","sysosa")
&color(red){かいていちゅう};

&size(10){過去記事:[[CentOS/zfs]]};

zfsはオラクル様で作られたファイルシステム.  &size(10){本当はSun Microsystems かな}; 現在はOpenZFSが音頭を取ってる. Linux向けには ZFS on Linux としてリリースされている.
本家様 [[https://openzfs.org/wiki/Main_Page>+https://openzfs.org/wiki/Main_Page]]
ドキュメント [[https://openzfs.github.io/openzfs-docs/>+https://openzfs.github.io/openzfs-docs/]]
ZFS on Linux: [[https://zfsonlinux.org/>+https://zfsonlinux.org/]]


ここでは&color(lightseagreen){RockyLinux8};にOpenZFSを入れてみる.

***導入 [#na15a1d6]
専用のリポジトリを追加します.
導入にはdkms版とkABI版がある. ここでは dkms 版を使います. &size(10){kABI版はよく分からん};

まずはdkms環境を準備します
#code(nonumber){{
[root@rockylinux8zfs ~]# dnf install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
[root@rockylinux8zfs ~]# dnf groupinstall "Development Tools"
[root@rockylinux8zfs ~]# dnf install epel-release
[root@rockylinux8zfs ~]# dnf install dkms
}}

次にOpenZFSのリポジトリを導入します.
OSバージョン毎のリポジトリは[[https://openzfs.github.io/openzfs-docs/Getting%20Started/RHEL-based%20distro/index.html>+https://openzfs.github.io/openzfs-docs/Getting%20Started/RHEL-based%20distro/index.html]]を参照して下記のように入れる.
#code(nonumber){{
[root@rockylinux8zfs ~]# dnf install https://zfsonlinux.org/epel/zfs-release-2-3$(rpm --eval "%{dist}").noarch.rpm
}}

そしてzfsカーネルモジュールを導入します
#code(nonumber){{
[root@rockylinux8zfs ~]# dnf install zfs
}}
関連パッケージのインストール後に dkms経由で zfs カーネルモジュールが作成されます
#code(nonumber){{
[root@rockylinux8zfs ~]# ls -l /lib/modules/$(uname -r)/extra
total 1364
-rw-r--r--. 1 root root 100316 Jul 21 13:44 icp.ko.xz
-rw-r--r--. 1 root root  40044 Jul 21 13:44 spl.ko.xz
-rw-r--r--. 1 root root   4904 Jul 21 13:44 zavl.ko.xz
-rw-r--r--. 1 root root  29464 Jul 21 13:44 zcommon.ko.xz
-rw-r--r--. 1 root root 921160 Jul 21 13:44 zfs.ko.xz
-rw-r--r--. 1 root root  68996 Jul 21 13:44 zlua.ko.xz
-rw-r--r--. 1 root root  23716 Jul 21 13:44 znvpair.ko.xz
-rw-r--r--. 1 root root  32500 Jul 21 13:44 zunicode.ko.xz
-rw-r--r--. 1 root root 161824 Jul 21 13:44 zzstd.ko.xz

[root@rockylinux8zfs ~]# dkms status
zfs/2.1.12, 4.18.0-477.10.1.el8_8.x86_64, x86_64: installed

[root@rockylinux8zfs ~]#
}}

作ったカーネルモジュールを組み込んでみます
#code(nonumber){{
[root@rockylinux8zfs ~]# modprobe zfs
[root@rockylinux8zfs ~]# lsmod |grep zfs
zfs                  3887104  0
zunicode              335872  1 zfs
zzstd                 512000  1 zfs
zlua                  176128  1 zfs
zavl                   16384  1 zfs
icp                   319488  1 zfs
zcommon               102400  2 zfs,icp
znvpair                90112  2 zfs,zcommon
spl                   114688  6 zfs,icp,zzstd,znvpair,zcommon,zavl
[root@rockylinux8zfs ~]#
}}
もし「modprobe zfs」で
「&color(red){modprobe: ERROR: could not insert 'zfs': Required key not available};」
と表示されるなら、、これはセキュアブート関連で、セキュアブートを無効いすれば大丈夫みたい.

これでzfsのカーネルモジュールの組み込みが完了しました

***構築 [#yf7800e2]
次に複数のHDDを使ったzfsストレージプールを作成します. 
windows10らと同じようにまずはストレージプールを作ってそこからマウント領域を切り出して使う感じです.
ストレージプールの作成段階でそのプールの性質というか筋が決まります.
ストライプにするかパリティーを持たせるかとかです. &size(10){RAIDで言うなら RAID10, RAID1, RAID5, RAID6..とか};

ここでは4つのドライブがあるのでRAIDZ構成で作ってみる
ドライブの指定方法は、ドキュメントによれば10個以内なら /dev/disk/by-id/ を使い、10個以上なら /dev/disk/by-path/ の使用を推奨している.

また44 slotsとか90slotsのJBODとかなら別途 /etc/zfs/vdev_id.conf ファイルを作成して簡便に済ますことも可能みたい.

&color(red){*};この選択が非常に重要... もしHDDが飛んだ際、交換対象がどこであるかと示しやすいように. &size(10){/dev/sdXだと最悪かな. JBOD装置だとこの辺は楽かな};

#code(nonumber){{
[root@centos8-zfs ~]# ls -l /dev/disk/by-path/
[root@rockylinux8zfs ~]# ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx. 1 root root  9 Jul 23 18:13 pci-0000:00:07.1-ata-2 -> ../../sr0
lrwxrwxrwx. 1 root root  9 Jul 23 18:13 pci-0000:03:00.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx. 1 root root 10 Jul 23 18:13 pci-0000:03:00.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Jul 23 18:13 pci-0000:03:00.0-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx. 1 root root 10 Jul 23 18:13 pci-0000:03:00.0-scsi-0:0:0:0-part3 -> ../../sda3
lrwxrwxrwx. 1 root root  9 Jul 23 18:13 pci-0000:13:00.0-scsi-0:0:0:0 -> ../../sdb
lrwxrwxrwx. 1 root root  9 Jul 23 18:13 pci-0000:13:00.0-scsi-0:0:1:0 -> ../../sdc
lrwxrwxrwx. 1 root root  9 Jul 23 18:13 pci-0000:13:00.0-scsi-0:0:2:0 -> ../../sdd
lrwxrwxrwx. 1 root root  9 Jul 23 18:13 pci-0000:13:00.0-scsi-0:0:3:0 -> ../../sde
lrwxrwxrwx. 1 root root  9 Jul 21 14:06 pci-0000:02:02.0-ata-1 -> ../../sr0
lrwxrwxrwx. 1 root root  9 Jul 21 14:06 pci-0000:03:00.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx. 1 root root 10 Jul 21 14:06 pci-0000:03:00.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Jul 21 14:06 pci-0000:03:00.0-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx. 1 root root 10 Jul 21 14:06 pci-0000:03:00.0-scsi-0:0:0:0-part3 -> ../../sda3
lrwxrwxrwx. 1 root root 10 Jul 21 14:06 pci-0000:03:00.0-scsi-0:0:0:0-part4 -> ../../sda4
lrwxrwxrwx. 1 root root  9 Jul 21 14:06 pci-0000:03:00.0-scsi-0:0:1:0 -> ../../sdb
lrwxrwxrwx. 1 root root  9 Jul 21 14:06 pci-0000:03:00.0-scsi-0:0:2:0 -> ../../sdc
lrwxrwxrwx. 1 root root  9 Jul 21 14:06 pci-0000:03:00.0-scsi-0:0:3:0 -> ../../sdd
lrwxrwxrwx. 1 root root  9 Jul 21 14:06 pci-0000:03:00.0-scsi-0:0:4:0 -> ../../sde
[root@rockylinux8zfs ~]#

(raid-zでストレージプールを作成)
[root@centos8-zfs ~]# zpool create tank raidz \
           pci-0000:13:00.0-scsi-0:0:0:0 \
           pci-0000:13:00.0-scsi-0:0:1:0 \
           pci-0000:13:00.0-scsi-0:0:2:0 \
           pci-0000:13:00.0-scsi-0:0:3:0
[root@rockylinux8zfs ~]# zpool create tank raidz \
           pci-0000:03:00.0-scsi-0:0:1:0 \
           pci-0000:03:00.0-scsi-0:0:2:0 \
           pci-0000:03:00.0-scsi-0:0:3:0 \
           pci-0000:03:00.0-scsi-0:0:4:0

(確認)
[root@centos8-zfs ~]# zpool status tank
[root@rockylinux8zfs ~]# zpool status tank
  pool: tank
 state: ONLINE
  scan: none requested
config:

        NAME                               STATE     READ WRITE CKSUM
        tank                               ONLINE       0     0     0
          raidz1-0                         ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:0:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:1:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:2:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:3:0  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:2:0  ONLINE       0     0     0
            pci-0000:03:00.0-scsi-0:0:3:0  ONLINE       0     0     0
            pci-0000:03:00.0-scsi-0:0:4:0  ONLINE       0     0     0

errors: No known data errors

[root@centos8-zfs ~]#
[root@rockylinux8zfs ~]#
}}
&color(red){*};&size(10){ESXiでby-idで構築するなら、「構成パラメータ」で「disk.EnableUUID = TRUE」を入れる必要がある};

***mount [#y698daea]
「zpool create」で用意したストレージプール名称がmountポイントとなる.
&size(10){この作ったストレージプールから必要量を切り出して、特定のmountpointに配置するのが一般的みたい};

#code(nonumber){{
[root@centos8-zfs ~]# df -lTh -F zfs
[root@rockylinux8zfs ~]# df -lTh -F zfs
Filesystem     Type  Size  Used Avail Use% Mounted on
tank           zfs    23G  128K   23G   1% /tank
[root@centos8-zfs ~]#
tank           zfs    93G  128K   93G   1% /tank
[root@rockylinux8zfs ~]#
}}
この場所を変更するには「zfs set mountpoint」で行います。事前に現在のmountpointは「zfs get mountpoint」で得られる
#code(nonumber){{
[root@centos8-zfs ~]# zfs get mountpoint
NAME  PROPERTY    VALUE       SOURCE
tank  mountpoint  /tank       default

[root@centos8-zfs ~]# zfs set mountpoint=/data tank

[root@centos8-zfs ~]# zfs get mountpoint
NAME  PROPERTY    VALUE       SOURCE
tank  mountpoint  /data       local

[root@centos8-zfs ~]# df -lTh -F zfs
Filesystem     Type  Size  Used Avail Use% Mounted on
tank           zfs    23G  128K   23G   1% /data
[root@centos8-zfs ~]#
}}
データを流し込んでみた
#code(nonumber){{
[root@centos8-zfs ~]# df -lTh -F zfs
Filesystem     Type  Size  Used Avail Use% Mounted on
tank           zfs    23G   13G   11G  55% /data

[root@centos8-zfs ~]# ls -lh /data
total 13G
-rw-r--r--. 1 root root 7.7G Jul 22 23:42 CentOS-8.2.2004-x86_64-dvd1.iso
-rw-r--r--. 1 root root 4.8G Aug  9  2017 en_visual_studio_community_2013_with_update_5_x86_dvd_6816332.iso

[root@centos8-zfs ~]#
}}

***ストレージプールにディスクを追加 [#d2a3267a]
一旦マシンを止めて、新に 16GBのHDDを追加して再起動します.
新規のHDDは/dev/sdbとして認識され、by-pathでは「pci-0000:04:00.0-scsi-0:0:0:0」と認識されている.
#code(nonumber){{
[root@centos8-zfs ~]# cat /proc/partitions
major minor  #blocks  name

   8       16   16777216 sdb
   8        0    8388608 sda
 :
[root@centos8-zfs ~]# ls -l /dev/disk/by-path/ |grep sdb
lrwxrwxrwx. 1 root root  9 Jul 25 05:38 pci-0000:04:00.0-scsi-0:0:0:0 -> ../../sdb
}}
まあ、失敗するのだが、HDD4本で作ったRAID-ZなストレージプールにHDDを1個追加はできない.
#code(nonumber){{
[root@centos8-zfs ~]# zpool add tank raidz pci-0000:04:00.0-scsi-0:0:0:0
invalid vdev specification: raidz requires at least 2 devices

(二個なら)
[root@centos8-zfs ~]# zpool add tank raidz pci-0000:04:00.0-scsi-0:0:0:0 pci-0000:04:00.0-scsi-0:0:1:0
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: pool uses 4-way raidz and new vdev uses 2-way raidz

(三個なら)
[root@centos8-zfs ~]# zpool add tank raidz pci-0000:04:00.0-scsi-0:0:0:0 pci-0000:04:00.0-scsi-0:0:1:0 pci-0000:04:00.0-scsi-0:0:2:0
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: pool uses 4-way raidz and new vdev uses 3-way raidz

[root@centos8-zfs ~]#
}}
このようなエラーが生じされる。っで4個だと
#code(nonumber){{
[root@centos8-zfs ~]# zpool add tank raidz \
     pci-0000:04:00.0-scsi-0:0:0:0 \
     pci-0000:04:00.0-scsi-0:0:1:0 \
     pci-0000:04:00.0-scsi-0:0:2:0 \
     pci-0000:04:00.0-scsi-0:0:3:0

[root@centos8-zfs ~]#
}}
とエラーなく完了して

#code(nonumber){{
[root@centos8-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
            pci-0000:13:00.0-scsi-0:0:0:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:1:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:2:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:3:0  ONLINE       0     0     0
          raidz1-1                         ONLINE       0     0     0
            pci-0000:04:00.0-scsi-0:0:0:0  ONLINE       0     0     0
            pci-0000:04:00.0-scsi-0:0:1:0  ONLINE       0     0     0
            pci-0000:04:00.0-scsi-0:0:2:0  ONLINE       0     0     0
            pci-0000:04:00.0-scsi-0:0:3:0  ONLINE       0     0     0

errors: No known data errors
[root@centos8-zfs ~]#
}}
と新たな「raidz1-1」として構成され、ストレージプール「tank」に組み込まれる

***ストレージプールの構成要素を外してみる...できない [#q5fdeca3]
ここで
#code(nonumber){{
[root@centos8-zfs ~]# zpool list -v
NAME                                SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank                                 95G  16.6G  78.4G        -         -     0%    17%  1.00x    ONLINE  -
  raidz1                           31.5G  16.6G  14.9G        -         -     0%  52.8%      -  ONLINE
    pci-0000:13:00.0-scsi-0:0:0:0      -      -      -        -         -      -      -      -  ONLINE
    pci-0000:13:00.0-scsi-0:0:1:0      -      -      -        -         -      -      -      -  ONLINE
    pci-0000:13:00.0-scsi-0:0:2:0      -      -      -        -         -      -      -      -  ONLINE
    pci-0000:13:00.0-scsi-0:0:3:0      -      -      -        -         -      -      -      -  ONLINE
  raidz1                           63.5G    49K  63.5G        -         -     0%  0.00%      -  ONLINE
    pci-0000:04:00.0-scsi-0:0:0:0      -      -      -        -         -      -      -      -  ONLINE
    pci-0000:04:00.0-scsi-0:0:1:0      -      -      -        -         -      -      -      -  ONLINE
    pci-0000:04:00.0-scsi-0:0:2:0      -      -      -        -         -      -      -      -  ONLINE
    pci-0000:04:00.0-scsi-0:0:3:0      -      -      -        -         -      -      -      -  ONLINE
[root@centos8-zfs ~]#
}}
で、新しく作った場所(raidz1-1)を外せるかなって思ったのだが、

#code(nonumber){{
[root@centos8-zfs ~]# zpool remove tank raidz1-1
cannot remove raidz1-1: invalid config; all top-level vdevs must have the same sector size and not be raidz.

[root@centos8-zfs ~]#
}}
とまだできないご様子。目下「zpool removal」ができるのはストライプとミラー構成だけのご様子.


***RAID-Zを構成する1つのHDDがこけた. [#j21b81dd]

#code(nonumber){{
[root@centos8-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
            pci-0000:13:00.0-scsi-0:0:0:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:1:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:2:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:3:0  ONLINE       0     0     0

errors: No known data errors
[root@centos8-zfs ~]#
}}
この状態で1個のHDDをわざと故障させてみる. っと言ってもesxiなので、この仮想マシンをshutdownしてRAID-Zを構成しているHDDを削除します
&ref(2020y07m26d_054126567.png,nolink);
ちょうどscsi1:2に該当する「pci-0000:13:00.0-scsi-0:0:2:0」に該当する部分を削除しました。
&size(10){scsi1:2は、仮想マシンのscsiボードの2chの3番目を使っている意味であるが、、、この辺はscsiの知識が必要};

それで再起動を掛けます

ファイルは存在しているものの、
#code(nonumber){{
[root@centos8-zfs ~]# ls -lh /data/
total 11G
-rw-r--r--. 1 root root 7.7G Jul 22 23:42 CentOS-8.2.2004-x86_64-dvd1.iso
-rw-r--r--. 1 root root 4.8G Aug  9  2017 en_visual_studio_community_2013_with_update_5_x86_dvd_6816332.iso

[root@centos8-zfs ~]#
}}
「zpool status」からはエラー表示となる
#code(nonumber){{
[root@centos8-zfs ~]# zpool status
  pool: tank
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: none requested
config:

        NAME                               STATE     READ WRITE CKSUM
        tank                               DEGRADED     0     0     0
          raidz1-0                         DEGRADED     0     0     0
            pci-0000:13:00.0-scsi-0:0:0:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:1:0  ONLINE       0     0     0
            4296232046464137477            UNAVAIL      0     0     0  was /dev/disk/by-path/pci-0000:13:00.0-scsi-0:0:2:0-part1
            pci-0000:13:00.0-scsi-0:0:3:0  ONLINE       0     0     0

errors: No known data errors
[root@centos8-zfs ~]#
}}
既にesxiでvmdkファイルを削除したので、再度HDDをesxiにて用意します。その際、同じくscsi1:2に用意します。別でも構わないが。
&color(white,blue){仮想マシンは起動中です}; &size(10){起動しながらHDDをリムーバブルslotに入れた状態でしょうか};
&ref(2020y07m26d_055144543.png,nolink);
その直後、dmesを確認すると、HDDが装着されたことが分かります。
#code(nonumber){{
[  802.174968] vmw_pvscsi: msg type: 0x0 - MSG RING: 1/0 (5)
[  802.174969] vmw_pvscsi: msg: device added at scsi0:2:0
[  802.175676] scsi 3:0:2:0: Direct-Access     VMware   Virtual disk     1.0  PQ: 0 ANSI: 2
[  802.176072] sd 3:0:2:0: Attached scsi generic sg5 type 0
[  802.176277] sd 3:0:2:0: [sde] 16777216 512-byte logical blocks: (8.59 GB/8.00 GiB)
[  802.176316] sd 3:0:2:0: [sde] Write Protect is off
[  802.176317] sd 3:0:2:0: [sde] Mode Sense: 61 00 00 00
[  802.176355] sd 3:0:2:0: [sde] Cache data unavailable
[  802.176356] sd 3:0:2:0: [sde] Assuming drive cache: write through
[  802.177481] sd 3:0:2:0: [sde] Attached SCSI disk
 :
}}
この「sde」は
#code(nonumber){{
[root@centos8-zfs ~]# ls -l /dev/disk/by-path/ | grep sde
lrwxrwxrwx. 1 root root  9 Jul 26 05:55 pci-0000:13:00.0-scsi-0:0:2:0 -> ../../sde

[root@centos8-zfs ~]#
}}
と認識されました。

&color(white,blue){留意};

元の場所に差し込んだから、自動的にre-buildされてRAID-Zが元に戻る....訳ではありません

自分で操作しないと正常には戻りません. &size(10){この辺、HW-RAIDカードが楽かなぁーって思う箇所かな};

っで作業は「zpool replace」コマンドを使います。
#code(nonumber){{
[root@centos8-zfs ~]# zpool replace tank pci-0000:13:00.0-scsi-0:0:2:0

(確認)
[root@centos8-zfs ~]# zpool status
  pool: tank
 state: DEGRADED
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 Sun Jul 26 06:04:44 2020
        13.6G scanned at 2.71G/s, 161M issued at 32.3M/s, 13.6G total
        36.2M resilvered, 1.16% done, 0 days 00:07:05 to go
config:

        NAME                                 STATE     READ WRITE CKSUM
        tank                                 DEGRADED     0     0     0
          raidz1-0                           DEGRADED     0     0     0
            pci-0000:13:00.0-scsi-0:0:0:0    ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:1:0    ONLINE       0     0     0
            replacing-2                      DEGRADED     0     0     0
              4296232046464137477            UNAVAIL      0     0     0  was /dev/disk/by-path/pci-0000:13:00.0-scsi-0:0:2:0-part1/old
              pci-0000:13:00.0-scsi-0:0:2:0  ONLINE       0     0     0  (resilvering)
            pci-0000:13:00.0-scsi-0:0:3:0    ONLINE       0     0     0

errors: No known data errors
[root@centos8-zfs ~]#
}}
っでre-buildが完了すると元に戻る
#code(nonumber){{
[root@centos8-zfs ~]# zpool status
  pool: tank
 state: ONLINE
  scan: resilvered 3.39G in 0 days 00:04:52 with 0 errors on Sun Jul 26 06:09:36 2020
config:

        NAME                               STATE     READ WRITE CKSUM
        tank                               ONLINE       0     0     0
          raidz1-0                         ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:0:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:1:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:2:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:3:0  ONLINE       0     0     0

errors: No known data errors
[root@centos8-zfs ~]#
}}

&color(red){*};autoreplaceを有効(zpool set autoreplace=on <pool名>)にすれば同じスロットに交換用HDDを入れると自動的にreplaceしてくれるようなのだが、仮想マシン環境では確認できなかった.

***Hotspare-HDDを設置 [#n084fc78]
仮想マシンにHDDを追加した.
#code(nonumber){{
[root@centos8-zfs ~]# cat /proc/partitions | grep sde
   8       64    8388608 sde
[root@centos8-zfs ~]# ls -l /dev/disk/by-path/|grep sde
lrwxrwxrwx. 1 root root  9 Jul 26 06:33 pci-0000:13:00.0-scsi-0:0:4:0 -> ../../sde
[root@centos8-zfs ~]#
}}
この「pci-0000:13:00.0-scsi-0:0:4:0」をtankのhot spareとして追加してみる
#code(nonumber){{
[root@centos8-zfs ~]# zpool add tank spare pci-0000:13:00.0-scsi-0:0:4:0
[root@centos8-zfs ~]# zpool status
  pool: tank
 state: ONLINE
  scan: resilvered 3.39G in 0 days 00:05:24 with 0 errors on Sun Jul 26 06:43:33 2020
config:

        NAME                               STATE     READ WRITE CKSUM
        tank                               ONLINE       0     0     0
          raidz1-0                         ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:0:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:1:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:2:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:3:0  ONLINE       0     0     0
        spares
          pci-0000:13:00.0-scsi-0:0:4:0    AVAIL

errors: No known data errors

[root@centos8-zfs ~]#
}}
「autoreplace」を有効にして、仮想マシンを一旦shutdownして、RAID-Zを構成するHDDを一つ削除してみる
#code(nonumber){{
[root@centos8-zfs ~]# zpool get autoreplace tank
NAME  PROPERTY     VALUE    SOURCE
tank  autoreplace  off      default

[root@centos8-zfs ~]# zpool set autoreplace=on tank

[root@centos8-zfs ~]# zpool get autoreplace tank
NAME  PROPERTY     VALUE    SOURCE
tank  autoreplace  on       local

[root@centos8-zfs ~]#
}}
っで再起動を行ったのだが、、、spareからの流用はなかった. 仮想マシンでは無理なのかな?
仕方ないので手動でreplaceを行った
「zpool replace <pool名> <元の場所> <交換するHDD>」
#code(nonumber){{
[root@centos8-zfs ~]# zpool replace tank   pci-0000:13:00.0-scsi-0:0:1:0    pci-0000:13:00.0-scsi-0:0:4:0
[root@centos8-zfs ~]# zpool status
  pool: tank
 state: DEGRADED
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 Sun Jul 26 07:10:38 2020
        13.6G scanned at 2.71G/s, 82.7M issued at 16.5M/s, 13.6G total
        17.9M resilvered, 0.60% done, 0 days 00:13:54 to go
config:

        NAME                                 STATE     READ WRITE CKSUM
        tank                                 DEGRADED     0     0     0
          raidz1-0                           DEGRADED     0     0     0
            pci-0000:13:00.0-scsi-0:0:0:0    ONLINE       0     0     0
            spare-1                          DEGRADED     0     0     0
              7173616995987023127            UNAVAIL      0     0     0  was /dev/disk/by-path/pci-0000:13:00.0-scsi-0:0:1:0-part1
              pci-0000:13:00.0-scsi-0:0:4:0  ONLINE       0     0     0  (resilvering)
            pci-0000:13:00.0-scsi-0:0:2:0    ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:3:0    ONLINE       0     0     0
        spares
          pci-0000:13:00.0-scsi-0:0:4:0      INUSE     currently in use

errors: No known data errors
[root@centos8-zfs ~]#
}}

re-buidが完了すると下記のようになる.
#code(nonumber){{
[root@centos8-zfs ~]# zpool status
  pool: tank
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: resilvered 3.39G in 0 days 00:05:57 with 0 errors on Sun Jul 26 07:16:35 2020
config:

        NAME                                 STATE     READ WRITE CKSUM
        tank                                 DEGRADED     0     0     0
          raidz1-0                           DEGRADED     0     0     0
            pci-0000:13:00.0-scsi-0:0:0:0    ONLINE       0     0     0
            spare-1                          DEGRADED     0     0     0
              7173616995987023127            UNAVAIL      0     0     0  was /dev/disk/by-path/pci-0000:13:00.0-scsi-0:0:1:0-part1
              pci-0000:13:00.0-scsi-0:0:4:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:2:0    ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:3:0    ONLINE       0     0     0
        spares
          pci-0000:13:00.0-scsi-0:0:4:0      INUSE     currently in use

errors: No known data errors
[root@centos8-zfs ~]#
}}
Hot spareが代替となったとしても「DEGRADED」の認識みたい. 一応「spare-1」にて問題は解消されているのだが、、
っで、故障とさせたslotにHDDを入れてみる
そして
#code(nonumber){{
[root@centos8-zfs ~]# zpool replace tank pci-0000:13:00.0-scsi-0:0:1:0
[root@centos8-zfs ~]# zpool status
  pool: tank
 state: DEGRADED
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 Sun Jul 26 07:31:25 2020
        13.6G scanned at 1.94G/s, 136M issued at 19.4M/s, 13.6G total
        29.8M resilvered, 0.98% done, 0 days 00:11:48 to go
config:

        NAME                                   STATE     READ WRITE CKSUM
        tank                                   DEGRADED     0     0     0
          raidz1-0                             DEGRADED     0     0     0
            pci-0000:13:00.0-scsi-0:0:0:0      ONLINE       0     0     0
            spare-1                            DEGRADED     0     0     0
              replacing-0                      DEGRADED     0     0     0
                7173616995987023127            UNAVAIL      0     0     0  was /dev/disk/by-path/pci-0000:13:00.0-scsi-0:0:1:0-part1/old
                pci-0000:13:00.0-scsi-0:0:1:0  ONLINE       0     0     0  (resilvering)
              pci-0000:13:00.0-scsi-0:0:4:0    ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:2:0      ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:3:0      ONLINE       0     0     0
        spares
          pci-0000:13:00.0-scsi-0:0:4:0        INUSE     currently in use

errors: No known data errors
[root@centos8-zfs ~]#
}}

暫くすと、
#code(nonumber){{
[root@centos8-zfs ~]# zpool status
  pool: tank
 state: ONLINE
  scan: resilvered 3.39G in 0 days 00:08:22 with 0 errors on Sun Jul 26 07:59:10 2020
config:

        NAME                               STATE     READ WRITE CKSUM
        tank                               ONLINE       0     0     0
          raidz1-0                         ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:0:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:1:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:2:0  ONLINE       0     0     0
            pci-0000:13:00.0-scsi-0:0:3:0  ONLINE       0     0     0
        spares
          pci-0000:13:00.0-scsi-0:0:4:0    AVAIL

errors: No known data errors
[root@centos8-zfs ~]#
}}
と元に戻る
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS