#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 ~]# }} と元に戻る