背景

背景

背景

autoreplace记录如下所示:

自动替换=开|关 控制自动设备替换。如果设置为“off”,则设备替换必须由管理员使用“zpool replace”命令启动。如果设置为“on”,则在与以前属于池的设备相同的物理位置找到的任何新设备都会自动格式化和替换。默认行为是“off”。此属性也可以通过其缩写列名“replace”来引用。

以下是我感兴趣的池中该设置的当前状态:

root@[...]:/# zpool get autoreplace zfs-pool
NAME      PROPERTY     VALUE    SOURCE
zfs-pool  autoreplace  on       local

因此它似乎已被启用。

观察结果

由于与 SMART 相关的错误,一个磁盘已被移除,并且 ZFS 正确识别该设备不再可用。使用该磁盘的镜像已更改为DEGRADED等。因为我有多个备用磁盘,所以我过去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] 池旧设备 [新设备] [...] 如果池不是冗余的,则需要 new_device。如果未指定 new_device,则默认为 old_device。现有磁盘发生故障并被物理替换后,这种替换形式很有用。在这种情况下,新磁盘可能具有与旧设备相同的 /dev/dsk 路径,即使它实际上是不同的磁盘。ZFS 可以识别这一点。

答案1

ZFS 依赖于零排放发展处理自动更换故障/断开连接的磁盘,因此您必须确保 ZED 正在运行。但是,最新的 0.8.x ZED 版本有一个错误这会阻止 ZFS 正确地对替换的磁盘进行自动分区。请注意,0.7.x ZFS/ZED 版本中不存在此错误。

编辑:根据您的以下评论做出一些回答:

  • ZED 是否以某种方式“内部”自动替换,或者是否需要脚本来使用热备和其他操作?ZED 在其 FMA(故障管理代理)中内部处理自动替换。换句话说,代理目录中不需要任何脚本。这些脚本通常运行FMA,并应启动相关操作,如启动清理、记录到系统日志等

  • 在哪里可以找到有关在自动替换的情况下应用自动分区的详细信息?我正在将单个分区转发到 ZFS,而不是整个磁盘。自动分区仅在将整个磁盘传递给 ZFS 时才有效(请注意,对受影响磁盘进行分区的是 ZFS 本身,而不是 ZED)。将现有分区传递给 ZFS(即用作sda1vdev)时,分区表根本不会受到影响。

相关内容