更换zpool中的死磁盘


31

我正在使用本机ZFS运行64位Ubuntu Server 13.04。我有一个zpool,它由4个硬盘驱动器组成,其中一个硬盘昨天就死掉了,现在不再被OS或BIOS识别。

不幸的是我只能在下次重新启动后才看到问题,所以现在驱动器标签丢失了,我无法根据这里这里的官方说明更换磁盘。

zpool status hermes -x

版画

root@zeus:~# zpool status hermes -x
  pool: hermes
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  UNAVAIL      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

我已经用新的驱动器(标有/dev/disk/by-id/ata-ST3500320AS_9QM03ATQ)替换了驱动器

任一命令

zpool replace hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
zpool detatch hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X

失败于

root@zeus:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool

因为死掉的驱动器的标签不再存在于系统中。我还尝试了上述命令,省略了驱动器标签的路径,但没有用。

如何更换“ ghost”磁盘?

Answers:


38

经过一夜无休的挖掘之后,我终于找到了解决方案。简短的答案是您可以通过命令使用磁盘的GUID(即使在断开驱动器连接后,GUID仍然存在)zpool

长答案:我使用zdb命令获得了磁盘的GUID,该命令给了我以下输出

root@zeus:/dev# zdb
hermes:
    version: 28
    name: 'hermes'
    state: 0
    txg: 162804
    pool_guid: 14829240649900366534
    hostname: 'zeus'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 14829240649900366534
        children[0]:
            type: 'raidz'
            id: 0
            guid: 5355850150368902284
            nparity: 1
            metaslab_array: 31
            metaslab_shift: 32
            ashift: 9
            asize: 791588896768
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 11426107064765252810
                path: '/dev/disk/by-id/ata-ST3300620A_5QF0MJFP-part2'
                phys_path: '/dev/gptid/73b31683-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 15935140517898495532
                path: '/dev/disk/by-id/ata-ST3300831A_5NF0552X-part2'
                phys_path: '/dev/gptid/746c949a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 7183706725091321492
                path: '/dev/disk/by-id/ata-ST3200822A_5LJ1CHMS-part2'
                phys_path: '/dev/gptid/7541115a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 17196042497722925662
                path: '/dev/disk/by-id/ata-ST3200822A_3LJ0189C-part2'
                phys_path: '/dev/gptid/760a94ee-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
    features_for_read:

我一直在寻找的GUID 15935140517898495532使我能够执行

root@zeus:/dev# zpool offline hermes 15935140517898495532
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        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 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  OFFLINE      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

然后

root@zeus:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sun Jun  9 01:44:36 2013
    408M scanned out of 419G at 20,4M/s, 5h50m to go
    101M resilvered, 0,10% done
config:

        NAME                            STATE     READ WRITE CKSUM
        hermes                          DEGRADED     0     0     0
          raidz1-0                      DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP     ONLINE       0     0     0
            replacing-1                 OFFLINE      0     0     0
              ata-ST3300831A_5NF0552X   OFFLINE      0     0     0
              ata-ST3500320AS_9QM03ATQ  ONLINE       0     0     0  (resilvering)
            ata-ST3200822A_5LJ1CHMS     ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C     ONLINE       0     0     0

errors: No known data errors

重新同步完成后,一切恢复正常。这本来是不错的,包括这些信息,您可以使用磁盘的GUID获得通过zdb使用zpool命令,用的zpool的联机帮助页。

编辑

正如下面的durval所指出的那样,该zdb命令可能不会输出任何内容。然后,您可以尝试使用

zdb -l /dev/<name-of-device>

明确列出有关设备的信息(即使系统中已经缺少该信息)。


酷,然后在运行之前使用-nswitch 添加,而且-gswitch也将以这种方式捕获uuid。
布莱恩·托马斯

谢谢,这非常有用,因为在网络上闲逛时我找不到从zdb收集内容的信息。
xamox

我一直在搜索数周,终于这个答案成功了。但是,zpool status(名称(如sdab)列出的ID )与/dev/disk/by-id(疯狂的长ID名称)中的路径不同。但是ls -la /dev/disk/by-id发现它们都是链接,/dev/...因此我找到了一个指向我的UNAVAIL(然后是OFFLINE)磁盘的磁盘,我能够成功完成这些步骤。现在正在重新同步。谢谢!
马特

获取GUID的另一种较短的方法是zpool status -g使用每个设备的GUID显示状态。同样,对于@Matt,zpool status -L将使用基本设备名称而不是长/dev/disk/by-id名称来显示状态。
StarNamer

您是解决方案的真正MVP。这对我有用。
6

3

问题是磁盘是由ID而不是由设备引用的。

这是一种可行的解决方法:

ln -s /dev/null /dev/ata-ST3300831A_5NF0552X
zpool export hermes
zpool import hermes
zpool status
# note the new device name that should appear here
zpool offline hermes xxxx
zpool replace hermes xxxx /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ

编辑:我迟了30秒...


谢谢。我试图创建一个到丢失驱动器的空链接,但它一直在说no such device in pool
Marcus 2013年

我的建议与您所做的几乎相同。唯一的区别是获取设备GUID的方法。创建到/ dev / null的符号链接(不同于空链接)并导出/导入池后,它出现在zpool status
jlliagre 2013年

使用这种方法其实我设法拿到了“缺陷”驱动器重新联机,而无需更换它(这样我就跳过offlinereplace步骤)。删除空链接后,我第二次导入了池。也许这只是驱动器标签的问题?实际上,驱动器名称保持不变。之后,我进行了彻底的擦洗,没有发现错误。
塞拉诺

2

@Marcus:感谢您为您自己的问题发布了出色的答案,这对我很有帮助。

前几天,我发现了一个可能会引起您(以及将来出现在这里的其他人)感兴趣的转折:由于相同的错误,我有一个缓存设备从池中删除(并标记为“ UNAVAIL”) (ZFS-8000-4J,“标签丢失或无效”),并尝试使其脱机/删除/替换失败,并显示完全相同的“池中无此设备”消息。

但是,当我试图以应用解决方案,简单的“ZDB”(不带参数)并没有列出设备,更不用说它的GUID。

经过一番挖掘后,我发现“ zdb -l / dev / DEVICENAME”列出了GUID(直接从设备而不是从池记录中获取),并使用该GUID进行了替换(实际上我做了一个“ zpool offline”,然后依次执行“ zpool remove”和“ zpool add”,效果非常理想)。


谢谢!在我自己接受的答案中添加了一个提示,并引用了您的评论。
Marcus

对我来说,zdb -l /dev/...总是显示“无法打开标签包装”。
马特

0

我有一个类似的问题:

驱动器发生故障,以致它不再在BIOS中注册(完全失效)。该zpool status指出,这是UNAVAILABLE

我放入了一个类似的容量驱动器,然后设法将其分配为新的驱动器spareINUSE并重新分配了该驱动器。但是,它实际上不是zpool的一部分,而是该池对丢失的驱动器有一个记忆,认为它有一天会再次出现。

解决方案是首先从zpool中删除丢失的驱动器

[root@hactar ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094  

然后,将驱动器spare-1 INUSE也标记为:

[root@hactar ~]# zpool detach hactar_data /dev/gptid/f2089b59-2654-11e5-8d99-00241d738094

完成此操作后,FreeNAS似乎无需我执行replace命令即可解决该问题,但是,如果您的系统本身无法解决问题,则以下命令应将其中一台设备替换为另一台设备:

zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}

例如:

zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
  • gptid来自我的zpool status命令。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.