autoreplace是记录在案,如下所示:
autoreplace=on _ off控件自动更换设备。如果设置为"off",则设备替换必须由管理员通过使用"zpool替换“命令来启动。如果设置为"on",任何新设备(与以前属于该池的设备位于同一物理位置)都会自动格式化和替换。默认行为为"off“。此属性也可以通过其缩短的列名“替换”来引用。
下面是我感兴趣的池中该设置的当前状态:
root@[...]:/# zpool get autoreplace zfs-pool
NAME PROPERTY VALUE SOURCE
zfs-pool autoreplace on local所以它似乎被启用了。
由于S.M.A.R.T.相关错误,一个磁盘已被移除,ZFS正确地承认该设备不再可用。将磁盘更改为DEGRADED等的镜像。因为我有多个备用磁盘,所以我使用zpool replace zfs-pool FAULTY_DISK SPARE_DISK临时放置了一个备用磁盘。这是必要的,因为我使用的是UB16.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才能工作?没有文档证明它依赖于该设置:
如果池不是冗余的,则需要替换-f池old_device 新的_设备 ... new_device。如果未指定new_device,则默认为old_device。这种形式的替换是有用的,在一个现有的磁盘已经失败,并已被物理替换。在这种情况下,新磁盘可能具有与旧设备相同的/dev/dsk路径,尽管它实际上是一个不同的磁盘。ZFS认识到这一点。
发布于 2020-09-02 17:34:20
ZFS依赖于泽德来处理自动替换失败/断开连接的磁盘,因此您必须确保ZED正在运行。但是,最新的0.8.xZed发布了有臭虫,这使得ZFS无法正确地自动分区被替换的磁盘.请注意,在0.7.xZFS/ZED版本中不存在此bug。
编辑:以下是基于您的评论的一些答案:
sda1作为vdev)时,分区表根本不会被触及。https://serverfault.com/questions/1032419
复制相似问题