Mal*_*ous 5 linux zfs iscsi cache open-iscsi
我已将单个磁盘导出为targetcli
Linux 主机上使用的 iSCSI 目标。在远程计算机上,我已连接到该设备,并在其上放置了一个 ZFS 卷(作为带有 的复制目标zrepl
)。
但是,每当我重新启动 iSCSI 目标计算机时,运行 ZFS 的启动器计算机就会失败并出现写入错误。经过一些研究后,这种类型的故障仅在 ZFS 向设备发送写入时发生,它被告知写入成功完成,但随后写入丢失。
这意味着 iSCSI 目标必须缓存写入并在实际写入磁盘之前返回成功,并且当计算机重新启动时,这些缓存的写入并不总是会被刷新。
有没有办法targetcli
禁用此写入缓存,以便写入在实际写入物理磁盘之前不会成功返回?
我尝试将物理磁盘导出为pscsi
后备存储,但这只会导致 iSCSI 目标内核在访问磁盘后立即崩溃。(没有使用虚拟机,只有两个本机 Linux 服务器,因此不应使用不常见的 SCSI 命令。)
/> ls
o- / .............................................................................................. [...]
o- backstores ................................................................................... [...]
| o- block ....................................................................... [Storage Objects: 1]
| | o- ar0 .......... [/dev/disk/by-id/ata-ST22000NT001-3LS101_ZX20XTYG (20.0TiB) write-thru activated]
| | o- alua ........................................................................ [ALUA Groups: 1]
| | o- default_tg_pt_gp ............................................ [ALUA state: Active/optimized]
| o- fileio ...................................................................... [Storage Objects: 0]
| o- pscsi ....................................................................... [Storage Objects: 0]
| o- ramdisk ..................................................................... [Storage Objects: 0]
o- iscsi ................................................................................. [Targets: 1]
| o- iqn.2023-07.com.example.host:sn.zx20xtyg ............................................... [TPGs: 1]
| o- tpg1 .................................................................... [no-gen-acls, no-auth]
| o- acls ............................................................................... [ACLs: 1]
| | o- iqn.2023-07.com.example.client:783af16f240 ................................ [Mapped LUNs: 1]
| | o- mapped_lun0 ........................................................ [lun0 block/ar0 (rw)]
| o- luns ............................................................................... [LUNs: 1]
| | o- lun0 ..... [block/ar0 (/dev/disk/by-id/ata-ST22000NT001-3LS101_ZX20XTYG) (default_tg_pt_gp)]
| o- portals ......................................................................... [Portals: 1]
| o- 0.0.0.0:3260 .......................................................................... [OK]
o- loopback .............................................................................. [Targets: 0]
o- vhost ................................................................................. [Targets: 0]
o- xen-pvscsi ............................................................................ [Targets: 0]
Run Code Online (Sandbox Code Playgroud)
pool: iscsi
state: ONLINE
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-JQ
config:
NAME STATE READ WRITE CKSUM
iscsi ONLINE 0 0 0
wwn-0x60014050b85f5b1d12d4875bdb68f41a ONLINE 3 153 0
errors: List of errors unavailable: pool I/O is currently suspended
$ zpool clear iscsu
$ zpool status -v
pool: iscsi
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
scan: resilvered 360K in 00:00:02 with 0 errors on Fri Jul 28 12:58:10 2023
config:
NAME STATE READ WRITE CKSUM
iscsi ONLINE 0 0 0
wwn-0x60014050b85f5b1d12d4875bdb68f41a ONLINE 0 0 0
errors: Permanent errors have been detected in the following files:
<metadata>:<0x0>
<metadata>:<0x101>
<metadata>:<0x104>
<metadata>:<0x105>
<metadata>:<0x33>
<metadata>:<0x34>
<metadata>:<0x3d>
<metadata>:<0xe8d>
<metadata>:<0x1e1f9>
<metadata>:<0x1e1fb>
Run Code Online (Sandbox Code Playgroud)
El *_*ro 3
您需要使用 iSCSI 目标发送设置了 FUA(强制单位注意)标志的写入,或者在提交写入之后发出 \xe2\x80\x9cSynchronize Cache\xe2\x80\x9d,然后再向调用者发送写入确认。如果您 \xe2\x80\x9cmap\xe2\x80\x9d 整个物理磁盘原始。
\n