背景
autoreplace
记录如下:
自动替换=打开 | off 控制自动设备更换。如果设置为“off”,则必须由管理员使用“zpool replace”命令启动设备更换。如果设置为“on”,则在与以前属于池的设备相同的物理位置找到的任何新设备都会自动格式化和替换。默认行为是“关闭”。此属性也可以通过其缩短的列名“replace”来引用。
以下是我感兴趣的池中该设置的当前状态:
root@[...]:/# zpool get autoreplace zfs-pool
NAME PROPERTY VALUE SOURCE
zfs-pool autoreplace on local
所以它似乎已启用。
观察
由于与 SMART 相关的错误,一个磁盘已被移除,并且 ZFS 正确地识别出该设备不再可用。使用过磁盘的镜像改为DEGRADED
etc。因为我有多个备用磁盘,所以我曾经zpool replace zfs-pool FAULTY_DISK SPARE_DISK
临时放置一个备用磁盘。这是必要的,因为对于我正在使用的 UB 16.04,自动使用备件无法正常工作,甚至根本无法正常工作。
在镜像再次同步并且新磁盘已物理连接后,我重新启动了系统,否则使用的控制器会阻止访问新磁盘。在启动过程中,控制器会识别新磁盘,询问是否应启用这些磁盘,在前一种情况下,新磁盘随后可供操作系统使用。磁盘已初始化,分区已创建等,并且完全可用,就像之前在同一物理插槽中的故障磁盘一样。重要的是操作系统也像以前一样对磁盘使用相同的命名:/dev/sdf
和/dev/disk/by-path/pci-0000:15:00.0-scsi-0:1:0:1-part*
尽管如此,ZFS 并没有自动使用新磁盘来替换以前的磁盘。尽管池的状态输出提到了旧磁盘的序列号丢失以及它过去的路径,这与新磁盘同时获得的相同。我需要使用zpool replace zfs-pool pci-0000:15:00.0-scsi-0:1:0:1-part3
. 这使得 ZFS 将新磁盘放入正确的镜像中,因为路径相同,并且在重新同步后,备用磁盘也已自动删除。
NAME STATE READ WRITE CKSUM
zfs-pool DEGRADED 0 0 0
mirror-0 ONLINE 0 0 0
pci-0000:05:00.0-scsi-0:1:0:0-part3 ONLINE 0 0 0
pci-0000:15:00.0-scsi-0:1:0:0-part3 ONLINE 0 0 0
mirror-1 DEGRADED 0 0 0
pci-0000:05:00.0-scsi-0:1:0:1-part3 ONLINE 0 0 0
spare-1 DEGRADED 0 0 0
replacing-0 DEGRADED 0 0 0
11972718311040401135 UNAVAIL 0 0 0 was /dev/disk/by-path/pci-0000:15:00.0-scsi-0:1:0:1-part3/old
pci-0000:15:00.0-scsi-0:1:0:1-part3 ONLINE 0 0 0 (resilvering)
pci-0000:15:00.0-scsi-0:1:0:3-part3 ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
pci-0000:05:00.0-scsi-0:1:0:2-part3 ONLINE 0 0 0
pci-0000:15:00.0-scsi-0:1:0:2-part3 ONLINE 0 0 0
spares
pci-0000:05:00.0-scsi-0:1:0:3-part3 AVAIL
pci-0000:15:00.0-scsi-0:1:0:3-part3 INUSE currently in use
问题
虽然使用的命令是文档以这种方式工作,但我想知道为什么autoreplace
启用它是必要的?新磁盘分区成功后不应该立即完成这一步骤吗?还是所autoreplace
发出的命令完全需要该属性?没有记录依赖该设置:
如果池不是冗余的,则需要zpool replace [-f] pool old_device [new_device] [...] new_device。如果未指定 new_device,则默认为 old_device。这种替换形式在现有磁盘发生故障并被物理替换后很有用。在这种情况下,新磁盘可能与旧设备具有相同的 /dev/dsk 路径,即使它实际上是不同的磁盘。ZFS 认识到这一点。
ZFS 依靠ZED来处理自动更换故障/断开连接的磁盘,因此您必须确保 ZED 正在运行。但是,最新的 0.8.x ZED 版本存在一个错误,该错误会阻止 ZFS 正确地对替换的磁盘进行自动分区。请注意,此错误在 0.7.x ZFS/ZED 版本中不存在。
编辑:根据您在下面的评论的一些答案:
ZED 是否会以某种方式“内部”自动替换,或者是否需要使用热备件和其他操作的脚本?ZED 在其 FMA(故障管理代理)内部处理自动替换。换句话说,代理目录中不需要脚本。这些脚本通常在 FMA之后运行,并且应该启动相应的操作,例如启动清理、记录到 syslog 等
在自动替换的情况下,我在哪里可以找到有关应用自动分区的详细信息?我将单个分区而不是整个磁盘转发到 ZFS。自动分区仅在将整个磁盘传递给 ZFS 时起作用(请注意,它是 ZFS 本身,而不是 ZED,对受影响的磁盘进行分区)。将现有分区传递给 ZFS(即:
sda1
用作 vdev)时,根本不会触及分区表。