概要とか https://openzfs.org/wiki/Main_Page?utm_source=chatgpt.com
ドキュメント https://openzfs.github.io/openzfs-docs/
github https://github.com/openzfs/zfs
高速なストレージ、小さいファイルにも十分対応できて大きなファイルにも対応。HPC用途とかで。 小規模向けかな。大規模ならcephやlustre、IBM Storage Scale(GPFS)とかでしょうか
cephでクラスターファイルシステムがスケーラブルなのでしょうけど、初期費用が高い。っで1台で収められてそこそここ早いのがとなるとこれかなと。
HDDが飛んだ際にはメール通知、slack通知が可能です. 設定次第ではbeep音も出せるそうな.
最近のadaptec SmartRAIDは無口になってアラート音はなしです. LED点灯やメール通知のみですね。双璧のBroadcom MegaRAIDシリーズも最近の製品は無口になっているそうな
ここでは rockylinux9 に OpenZFS を入れてみたいと思います
専用のリポジトリを追加します. 参照先 https://openzfs.github.io/openzfs-docs/Getting%20Started/RHEL-based%20distro/index.html
[root@zfs ~]# cat /etc/redhat-release
Rocky Linux release 9.7 (Blue Onyx)
[root@zfs ~]# uname -r
5.14.0-611.5.1.el9_7.x86_64
[root@zfs ~]# dnf install https://zfsonlinux.org/epel/zfs-release-3-0$(rpm --eval "%{dist}").noarch.rpm
[root@zfs ~]# ls /etc/yum.repos.d/
rocky-addons.repo rocky-devel.repo rocky-extras.repo rocky.repo zfs.repo
[root@zfs ~]#zfsのカーネルモジュールですが、dkms版とkABI版がある. dkms版ならkernel updateの際に自動的にそのkernelにあったkernel moduleをコンパイルして用意してくれます.
まぁそれはそれでいいのですが、そのkernel向けとして特化したkABI版の方がまぁー安定かなぁ.
ここでは kABI版を使います
そして現時点(2026.04)で最新版の zfs-2.4.1 を使いたいと思います.
[root@zfs ~]# dnf repolist --all
:
zfs OpenZFS for EL9 - dkms enabled
:
zfs-latest-kmod OpenZFS latest for EL9 - kmod disabled
:
[root@zfs ~]# dnf config-manager --disable zfs
[root@zfs ~]# dnf config-manager --enable zfs-latest-kmodここで、「dnf install zfs」でkernel moduleらがインストールされるのですが、どうもrockylinux9.7の初回のkernel version「5.14.0-611.5.1」向けの zfs-2.4.1 はないようなのでkernel updateします
[root@zfs ~]# dnf update kernel kernel-core kernel-modules kernel-modules-core kernel-tools kernel-tools-libs
[root@zfs ~]# grubby --update-kernel ALL --args selinux=0
[root@zfs ~]# grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
[root@zfs ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@zfs ~]# reboot
(再ログイン)
[root@zfs ~]# uname -r
5.14.0-611.47.1.el9_7.x86_64
[root@zfs ~]# dnf install zfs
[root@zfs ~]# ls -l /lib/modules/$(uname -r)/weak-updates/zfs/
total 0
lrwxrwxrwx. 1 root root 58 Apr 26 03:01 spl.ko -> /lib/modules/5.14.0-611.34.1.el9_7.x86_64/extra/zfs/spl.ko
lrwxrwxrwx. 1 root root 58 Apr 26 03:01 zfs.ko -> /lib/modules/5.14.0-611.34.1.el9_7.x86_64/extra/zfs/zfs.ko
[root@zfs ~]#と、5.14.0-611.47.1 なのですが、5.14.0-611.34.1 に入ったkernel moduleが、weak-updatesで 5.14.0-611.47.1 に提供されている
色々調べて、小さいファイルにも大きなファイルにも有効にしたいと願い
| 項目 | 要件 | 300TBなストレージなら | 備考 |
| HDD | vdevを複数作る. 多い方がいい | 実用量の80%が約300TBになるなら384TBほど盛る ミラー構成: 24TB x(2-1)*16=384TB, 16vdev(32slot必要) RAIDZ構成:24TB x(3-1)*8=384TB, 8vdev(24slot) RAIDZ2構成:24TB x(6-2)*4=384TB, 4vdev(24slot) | 32slotマシンで前面24slotはHDDで埋めて 背面12slotは下記目的のSSDで埋めるのがいいかも あるいは1UのフロントU.2 slot搭載マシン+24 HDD slot JBODとかで |
| special device | metadataと小さいファイルを置く | 8TB ミラーで2組 8TB x(2-1)*2= 16TB (8TB 4枚) | ミラー構成必須 小さいファイルであふれるなら、同じミラー構成(8TB*2枚)を追加 |
| SLOG | NFSで同期書き込みなら有効、非同期なら微妙. 20GBほどあればいいみたい | 480GB PLP付 nvme ミラー | 小さいPLP nvmeってある? |
| L2ARC | キャッシュ. 主メモリーの5倍から10倍以内 | 主メモリー256GBなら 2TB nvme | RAID0構成でも可. 10倍以内にすること |
| 主メモリ | 一次キャッシュ | 256GBとか 128GB | |
| CPU | クロック高め、core数そこそこ | 3.0から3.5GHz, 24-48コア | チェックサム計算,RAIDZパリティ計算が嵩むので |
| nic | 25GbEか100GbE | 100GbE | swithing HUBのuplinkポートに繋げるとか. bondingもいいかも |
1Uのフロントに12slotsなnvme U.2とHBAを付けて、24bay JBOD構成かな.
一応拡張は可能っぽいけど、初めに作った構成を変更せず使うって感じに思えた. 大きくしたいなら別のシステムを用意するって感じかなぁ
っでこのようなストレージは作れないので仮想マシンで手順だけ試した
HDDは3本RAIDZ単位で2つ(2vdev). 合計6HDD
special deviceは SSDで2枚のmirrorで1vdev
SLOGもSSD2枚でmirrorで
L2ARCはSSD1枚
ってな感じで仮想マシンを作ってみた
[root@zfs ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 32G 0 disk
├sda1 8:1 0 1M 0 part
├sda2 8:2 0 1G 0 part /boot
├sda3 8:3 0 128M 0 part [SWAP]
├sda4 8:4 0 1K 0 part
└sda5 8:5 0 30.9G 0 part /
sdb 8:16 0 100G 0 disk sdbからsdqの100Gは HDD として
sdc 8:32 0 100G 0 disk
sdd 8:48 0 100G 0 disk
sde 8:64 0 100G 0 disk
sdf 8:80 0 100G 0 disk
sdg 8:96 0 100G 0 disk
sdh 8:112 0 50G 0 disk special device
sdi 8:128 0 50G 0 disk special device
sdj 8:144 0 64G 0 disk SLOG
sdk 8:160 0 64G 0 disk SLOG
sdl 8:176 0 32G 0 disk L2ARC
[root@zfs ~]#なので
zpool create -o ashift=12 tank \
raidz sdb sdc sdd \
raidz sde sdf sdg \
special mirror sdh sdi \
log mirror sdj sdk \
cache sdlで完成になるが、
「PATHのデバイス名での指定はよくなく、「/dev/disk/by-id」か「/dev/disk/by-path」で指定する事。
[root@zfs ~]# ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:01.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx. 1 root root 10 Apr 26 13:29 pci-0000:09:01.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Apr 26 13:29 pci-0000:09:01.0-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx. 1 root root 10 Apr 26 13:29 pci-0000:09:01.0-scsi-0:0:0:0-part3 -> ../../sda3
lrwxrwxrwx. 1 root root 10 Apr 26 13:29 pci-0000:09:01.0-scsi-0:0:0:0-part4 -> ../../sda4
lrwxrwxrwx. 1 root root 10 Apr 26 13:29 pci-0000:09:01.0-scsi-0:0:0:0-part5 -> ../../sda5
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:02.0-scsi-0:0:0:1 -> ../../sdb
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:03.0-scsi-0:0:0:2 -> ../../sdc
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:04.0-scsi-0:0:0:3 -> ../../sdd
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:05.0-scsi-0:0:0:4 -> ../../sde
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:06.0-scsi-0:0:0:5 -> ../../sdf
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:07.0-scsi-0:0:0:6 -> ../../sdg
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:08.0-scsi-0:0:0:7 -> ../../sdh
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:09.0-scsi-0:0:0:8 -> ../../sdi
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:0a.0-scsi-0:0:0:9 -> ../../sdj
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:0b.0-scsi-0:0:0:10 -> ../../sdk
lrwxrwxrwx. 1 root root 9 Apr 26 13:29 pci-0000:09:0c.0-scsi-0:0:0:11 -> ../../sdl
[root@zfs ~]#実機では「/dev/disk/by-id」が望ましい。
理由はHDD/SSD/nvmeのシリアル番号で指定することになるので。
zfsはHDDの障害時にLEDランプなんて異常を提示しないので、デバイスのシリアル番号をslotにテプラで付けておくのがいいみたい
なので実際には
[root@zfs ~]# modprobe zfs
[root@zfs ~]# zpool create -o ashift=12 tank \
raidz pci-0000:09:02.0-scsi-0:0:0:1 \
pci-0000:09:03.0-scsi-0:0:0:2 \
pci-0000:09:04.0-scsi-0:0:0:3 \
raidz pci-0000:09:05.0-scsi-0:0:0:4 \
pci-0000:09:06.0-scsi-0:0:0:5 \
pci-0000:09:07.0-scsi-0:0:0:6 \
special mirror pci-0000:09:08.0-scsi-0:0:0:7 \
pci-0000:09:09.0-scsi-0:0:0:8 \
log mirror pci-0000:09:0a.0-scsi-0:0:0:9 \
pci-0000:09:0b.0-scsi-0:0:0:10 \
cache pci-0000:09:0c.0-scsi-0:0:0:11
[root@zfs ~]# zpool status tank
pool: tank
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
pci-0000:09:02.0-scsi-0:0:0:1 ONLINE 0 0 0
pci-0000:09:03.0-scsi-0:0:0:2 ONLINE 0 0 0
pci-0000:09:04.0-scsi-0:0:0:3 ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
pci-0000:09:05.0-scsi-0:0:0:4 ONLINE 0 0 0
pci-0000:09:06.0-scsi-0:0:0:5 ONLINE 0 0 0
pci-0000:09:07.0-scsi-0:0:0:6 ONLINE 0 0 0
special
mirror-2 ONLINE 0 0 0
pci-0000:09:08.0-scsi-0:0:0:7 ONLINE 0 0 0
pci-0000:09:09.0-scsi-0:0:0:8 ONLINE 0 0 0
logs
mirror-3 ONLINE 0 0 0
pci-0000:09:0a.0-scsi-0:0:0:9 ONLINE 0 0 0
pci-0000:09:0b.0-scsi-0:0:0:10 ONLINE 0 0 0
cache
pci-0000:09:0c.0-scsi-0:0:0:11 ONLINE 0 0 0
errors: No known data errors
[root@zfs ~]#となる
作ったzfsボリュームをmountします
zfs の ストレージプール名を「tank」にしたので、ファイルシステム上には/tankとしてmountされます
[root@zfs ~]# df -lTht zfs
Filesystem Type Size Used Avail Use% Mounted on
tank zfs 386G 128K 386G 1% /tank
[root@zfs ~]#
(zfsコマンドからの確認としては)
[root@zfs ~]# zfs get mountpoint
NAME PROPERTY VALUE SOURCE
tank mountpoint /tank default
[root@zfs ~]#初期構築時なので、作った名称がそのまま使われてますが、「zfs set mountpoint」で変更も可能です
[root@zfs ~]# zfs set mountpoint=/home tank
[root@zfs ~]# zfs get mountpoint
NAME PROPERTY VALUE SOURCE
tank mountpoint /home local
[root@zfs ~]# df -lTht zfs
Filesystem Type Size Used Avail Use% Mounted on
tank zfs 386G 128K 386G 1% /home
[root@zfs ~]#と変更が可能です。従来の /etc/fstab らの調整は不要です。
加えて/appsと/homeを同じプール(tank)で賄い事も可能で、まず/homeのmountを解除して、tank/homeとtank/appsを作ります。
そしてmountpointで場所を指定します
[root@zfs ~]# zfs set mountpoint=none tank
[root@zfs ~]# zfs create tank/home
[root@zfs ~]# zfs create tank/apps
(確認)
[root@zfs ~]# zfs list -r tank
NAME USED AVAIL REFER MOUNTPOINT
tank 792K 385G 96K none
tank/apps 96K 385G 96K none
tank/home 96K 385G 96K none
[root@zfs ~]#
[root@zfs ~]# zfs set mountpoint=/home tank/home
[root@zfs ~]# zfs set mountpoint=/apps tank/apps
[root@zfs ~]# df -lTht zfs
Filesystem Type Size Used Avail Use% Mounted on
tank/home zfs 386G 128K 386G 1% /home
tank/apps zfs 386G 128K 386G 1% /apps
[root@zfs ~]#これらをnfsでexportする際ですが、疑似ファイルシステムを作らずに単に「/etc/exports」に
/home 192.168.1.0/24(rw,sync,no_subtree_check)
/apps 192.168.1.0/24(rw,sync,no_subtree_check)で十分.
ZFSならではの「sharenfs」プロパティで公開する方法もありますが、「/etc/exports」に慣れていればそれを使った方がいいみたい
zfs set sharenfs="rw=@192.168.1.0/24" tank/homezfsコマンドで調整する形になりますが、まぁー「/etc/exports」でいいかな。
あとスナップショットに関してですが、
[root@zfs ~]# zfs create tank/home/userA
[root@zfs ~]# zfs create tank/home/userB
[root@zfs ~]# zfs set mountpoint=/home/userA tank/home/userA
[root@zfs ~]# zfs set mountpoint=/home/userB tank/home/userB
[root@zfs ~]# mkdir /home/userCと/home/userCだけデータセットからの切り出しではなくmkdirで作ったとします。
っで
zfs snapshot tank/home@backup1とすると/home/userAと/home/userBを含まない形でスナップショットが取れます。
もし/home全体のスナップショットが欲しければ
zfs snapshot -r tank/home@monday_backupと「-r」を付ける。
透過的圧縮。ファイルをそこに置いておくと自動的に内部で圧縮されます。表には元のファイル名ですが、裏では圧縮されて空き容量を増やす仕組みです
データセットを指定して行います
zfs set compression=lz4 tank/home/userAこれで/home/userAに集まるファイルはすべて透過的圧縮の対象となります。
クオート設定
zfs set quota=1T tank/home/userA
zfs set quota=200G tank/home/userAとデータセットを作った領域に設けられます。単に「mkdir /home/userC」には適用されないです
解除方法は
zfs set quota=none tank/home/userA残り幾つ使えるかは「zfs list」で見れて
[root@zfs ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 996K 385G 96K none
tank/apps 96K 385G 96K /apps
tank/home 288K 385G 96K /home
tank/home/userA 96K 385G 96K /home/userA
tank/home/userB 96K 200G 96K /home/userB
[root@zfs ~]#と表示される。「AVAIL」に出ます
ZFSでは使っているエンクロージャ、JBODによりますが、HDD/nvme/SSDらが飛ぶとLEDが点灯します
でもそれだけでは不十分でメール通知を有効にしてみます
使用するのはzed. zfs-zed.service です。
でもこのzedは「ローカルのメール送信コマンドを叩くのみ」なので、マシンにメール送信機能(MTA)を準備する必要があります
ここでは簡易な方法として msmtp での構築を行ってみます. っでパッケージをインストールします
[root@zfs ~]# dnf install epel-release
[root@zfs ~]# dnf install msmtp s-nail
(確認)
[root@zfs ~]# alternatives --list
:
mta auto /usr/bin/msmtp
mailx auto /usr/bin/mailx.s-nail
[root@zfs ~]#そして設定ファイル「/etc/smtprc」を作成します
下記はGmailを使った場合です。
Gamilのpasswordは「アプリパスワード」という物で
1.Googleアカウントに入って
2.「セキュリティーとログイン」ページに行って
3.「Googleにログインする方法」欄の「2段階認証プロセス」をクリックします
4.「アプリパスワード」欄がでますので、そこで「>」をクリックして、例えば msmtp とアプリ固有名を付けて「作成」ボタンを押下すると文字列がでます。それが「アプリパスワード」です。
「アプリパスワード」はその「作成」ボタンを押下した瞬間しか表示されないです。閉じると2度と見れません。見落とした、忘れたなら再度作成して作ってください。
[root@zfs ~]# vi /etc/msmtprc
defaults
auth on
tls on
tls_trust_file /etc/pki/tls/certs/ca-bundle.crt
logfile /var/log/msmtp.log
account gmail
host smtp.gmail.com
port 587
from xxxxxxxxxxxxxxxxxxxxxxx@gmail.com
user xxxxxxxxxxxxxxxxxxxxxxx@gmail.com
password aaaabbbbccccdddd
account default : gmailっでテストメールを出してみる。
[root@zfs ~]# echo "test mail" | mail -s "test" xxxxxxxxxxxxxxxxxxxxxxx@gmail.comこれでメールが届いたらok
そしてzedの設定を行います
[root@zfs ~]# vi /etc/zfs/zed.d/zed.rc
[root@zfs ~]# sed -e '/^#/d' -e '/^$/d' /etc/zfs/zed.d/zed.rc
ZED_EMAIL_ADDR="xxxxxxxxxxxxxxxxxxxxxxx@gmail.com"
ZED_NOTIFY_VERBOSE=1 <-- これを1にしないと「zpool scrub tank」程度の内容でメールが来ない. けどテストのために有効にしておく
ZED_USE_ENCLOSURE_LEDS=1
ZED_SYSLOG_SUBCLASS_EXCLUDE="history_event"
[root@zfs ~]# systemctl restart zfs-zed.serviceテストとしては「zpool scrub tank」とかで。
[root@zfs ~]# zpool scrub tankっで、メールが届くか確認します。
「ZED_NOTIFY_VERBOSE=1」ですが、「/etc/zfs/zed.d/zed.rc」には下記のように書かれてます
# Notification verbosity.
# If set to 0, suppress notification if the pool is healthy.
# If set to 1, send notification regardless of pool health.pool自体に問題がなければ通知しない。ZED_NOTIFY_VERBOSEを有効にすれば、poolに問題がなくても通知する。テスト目的なら有効にして、
本番は無効でいいのかなと。
zedの設定ファイル「/etc/zfs/zed.d/zed.rc」には
「ZED_USE_ENCLOSURE_LEDS=1」との設定項目がある. 該当部分は
# Turn on/off enclosure LEDs when drives get DEGRADED/FAULTED. This works for
# device mapper and multipath devices as well. This works with JBOD enclosures
# and NVMe PCI drives (assuming they're supported by Linux in sysfs).と書かれているので、多分システム次第で飛んだHDDの場所が分かるようになっているかと.
Broadcom の HBA に接続していると
[root@zfs ~]# ls /sys/class/enclosure/1\:0\:14\:0/Slot11/device/block/
sdn
[root@zfs ~]#とデバイス名がでます。なので、zedによるLED点灯は行けるかなと思われます
[root@zfs ~]# zpool status
pool: tank
state: ONLINE
scan: scrub repaired 0B in 00:00:00 with 0 errors on Fri May 1 01:30:35 2026
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
pci-0000:09:02.0-scsi-0:0:0:1 ONLINE 0 0 0
pci-0000:09:03.0-scsi-0:0:0:2 ONLINE 0 0 0
pci-0000:09:04.0-scsi-0:0:0:3 ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
pci-0000:09:05.0-scsi-0:0:0:4 ONLINE 0 0 0
pci-0000:09:06.0-scsi-0:0:0:5 ONLINE 0 0 0
pci-0000:09:07.0-scsi-0:0:0:6 ONLINE 0 0 0
special
mirror-2 ONLINE 0 0 0
pci-0000:09:08.0-scsi-0:0:0:7 ONLINE 0 0 0
pci-0000:09:09.0-scsi-0:0:0:8 ONLINE 0 0 0
logs
mirror-3 ONLINE 0 0 0
pci-0000:09:0a.0-scsi-0:0:0:9 ONLINE 0 0 0
pci-0000:09:0b.0-scsi-0:0:0:10 ONLINE 0 0 0
cache
pci-0000:09:0c.0-scsi-0:0:0:11 ONLINE 0 0 0
errors: No known data errors
[root@zfs ~]#この状態で事象発生させてみる (proxmoxでOSDノードのHDDを選択して detach 操作を行う)
「pci-0000:09:06.0-scsi-0:0:0:5」の部分をDetachさせてみた
[root@zfs ~]# zpool status
pool: tank
state: DEGRADED
status: One or more devices have been removed.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using zpool online' or replace the device with
'zpool replace'.
scan: scrub repaired 0B in 00:00:00 with 0 errors on Fri May 1 01:30:35 2026
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 ONLINE 0 0 0
pci-0000:09:02.0-scsi-0:0:0:1 ONLINE 0 0 0
pci-0000:09:03.0-scsi-0:0:0:2 ONLINE 0 0 0
pci-0000:09:04.0-scsi-0:0:0:3 ONLINE 0 0 0
raidz1-1 DEGRADED 0 0 0
pci-0000:09:05.0-scsi-0:0:0:4 ONLINE 0 0 0
pci-0000:09:06.0-scsi-0:0:0:5 REMOVED 0 0 0
pci-0000:09:07.0-scsi-0:0:0:6 ONLINE 0 0 0
special
mirror-2 ONLINE 0 0 0
pci-0000:09:08.0-scsi-0:0:0:7 ONLINE 0 0 0
pci-0000:09:09.0-scsi-0:0:0:8 ONLINE 0 0 0
logs
mirror-3 ONLINE 0 0 0
pci-0000:09:0a.0-scsi-0:0:0:9 ONLINE 0 0 0
pci-0000:09:0b.0-scsi-0:0:0:10 ONLINE 0 0 0
cache
pci-0000:09:0c.0-scsi-0:0:0:11 ONLINE 0 0 0
errors: No known data errors
[root@zfs ~]#これは意図的に抜いても同じようになります。
実機では恐らくそのHDDに問題があって利用できなくなるとzfsからは「FAULTED」と付けられます。そうなった際はそのHDDをzfsの管理から外させるコマンド(zpool offline)を実行します
[root@zfs ~]# zpool offline tank pci-0000:09:06.0-scsi-0:0:0:5
[root@zfs ~]# zpool status
:
raidz1-1 DEGRADED 0 0 0
pci-0000:09:05.0-scsi-0:0:0:4 ONLINE 0 0 0
pci-0000:09:06.0-scsi-0:0:0:5 OFFLINE 0 0 0
pci-0000:09:07.0-scsi-0:0:0:6 ONLINE 0 0 0
:
[root@zfs ~]#次に、飛んだHDDを抜いて、新しいHDDをシステムに入れます。
この際、追加するHDDがどこかのzfsで使っていたHDDなら大事故になるようで、要注意。
その際は「ZFSラベルを消す」ことが大事。
[root@zfs ~]# zpool labelclear -f "/dev/disk/by-path/pci-0000:09:06.0-scsi-0:0:0:5"
あるいは
[root@zfs ~]# wipefs -a "/dev/disk/by-path/pci-0000:09:06.0-scsi-0:0:0:5"
[root@zfs ~]# sgdisk --zap-all "/dev/disk/by-path/pci-0000:09:06.0-scsi-0:0:0:5"でラベルを消す
その上で差し替え操作を行います
[root@zfs ~]# zpool replace tank "pci-0000:09:06.0-scsi-0:0:0:5" "pci-0000:09:06.0-scsi-0:0:0:5"今回は同じPATHになってますが、気にしなくてもいいみたい。新しいHDDには未使用なHDDなので大丈夫なそうな
デフォではPOSIX ACLは有効になっていないです。
なので有効にします
[root@zfs ~]# zfs set acltype=posixacl tank/home
[root@zfs ~]# zfs get acltype
NAME PROPERTY VALUE SOURCE
tank acltype off default
tank/apps acltype off default
tank/home acltype posix local
tank/home/userA acltype posix inherited from tank/home
tank/home/userB acltype posix inherited from tank/home
[root@zfs ~]#tank/homeでaclが有効ならそれが配下にも波及されるみたい
[root@zfs ~]# setfacl -m user:cryosparc:rx /home/saber
[root@zfs ~]# getfacl /home/saber/
getfacl: Removing leading '/' from absolute path names
# file: home/saber/
# owner: saber
# group: saber
user::rwx
user:cryosparc:r-x
group::---
mask::r-x
other::---
[root@zfs ~]#っとなるみたい.
nfs先では?
まずは
[root@zfs ~]# vi /etc/exports
/home 192.168.0.0/24(rw,sync,no_subtree_check)
/apps 192.168.0.0/24(rw,sync,no_subtree_check)
[root@zfs ~]# systemctl enable nfs-server --nowっでnfs-clientから
[root@rockylinux9 ~]# mount -t nfs zfs:/home /home
[root@rockylinux9 ~]# df -Tht nfs4
Filesystem Type Size Used Avail Use% Mounted on
zfs:/home nfs4 386G 1.0M 386G 1% /home
[root@rockylinux9 ~]#
[root@rockylinux9 ~]# ls -l /home
total 2
drwx------. 2 cryosparc cryosparc 5 May 3 00:10 cryosparc
drwxr-x---+ 2 saber saber 5 May 3 00:09 saber
drwxr-xr-x. 2 root root 2 May 2 04:18 userA
drwxr-xr-x. 2 root root 2 May 2 04:19 userB
[root@rockylinux9 ~]#
[root@rockylinux9 ~]# getfacl /home/saber/
getfacl: Removing leading '/' from absolute path names
# file: home/saber/
# owner: saber
# group: saber
user::rwx
group::r-x
other::---
[root@rockylinux9 ~]# umount /home
(nfs v3でmount)
[root@rockylinux9 ~]# mount -t nfs -o vers=3 zfs:/home /home
[root@rockylinux9 ~]# ls -l /home
total 2
drwx------. 2 cryosparc cryosparc 5 May 3 00:10 cryosparc
drwxr-x---+ 2 saber saber 5 May 3 00:09 saber
drwxr-xr-x. 2 root root 2 May 2 04:18 userA
drwxr-xr-x. 2 root root 2 May 2 04:19 userB
[root@rockylinux9 ~]#
[root@rockylinux9 ~]# getfacl /home/saber/
getfacl: Removing leading '/' from absolute path names
# file: home/saber/
# owner: saber
# group: saber
user::rwx
user:cryosparc:r-x <--- ACLが効いている
group::---
mask::r-x
other::---
[root@rockylinux9 ~]#zfsに関わらず、普通にnfs versiomn3でexportすれば、getfac/setfaclが使えます。NFSv4なら面倒なnfs4_setacl とかの出番になります