无法更换 raidz 中丢失的磁盘

无法更换 raidz 中丢失的磁盘

更换主板后,我的 raidz 性能下降 - 找不到磁盘。丢失的磁盘以前是 /dev/sdh,但现在名为 /dev/sdg - 这是问题的原因。

在降级的 zpool 中,我设法使用其 uid(我使用 zdb 命令找到的)将丢失的磁盘脱机。因此,现在降级的池如下所示:

pool: Media
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'.
scrub: scrub completed after 2h10m with 0 errors on Thu May  1 14:02:43 2014 
config:

    NAME                                                      STATE     READ WRITE CKSUM
    Media                                                     DEGRADED     0     0     0
      raidz1-0                                                ONLINE       0     0     0
        disk/by-id/ata-WDC_WD2003FYYS-02W0B0_WD-WMAY00171958  ONLINE       0     0     0
        disk/by-id/ata-WDC_WD2003FYYS-02W0B1_WD-WCAY00424060  ONLINE       0     0     0
        disk/by-id/ata-WDC_WD2003FYYS-02W0B1_WD-WMAY04082675  ONLINE       0     0     0
      raidz1-1                                                DEGRADED     0     0     0
        sde                                                   ONLINE       0     0     0
        sdf                                                   ONLINE       0     0     0
        sdh                                                   OFFLINE      0     0     0

但是,我无法成功用 /dev/sdg 替换 /dev/sdh:

zpool replace Media 3840188586753206212 /dev/disk/by-id/ata-WDC_WD20EZRX-00D8PB0_WD-WMC4M1843609 -f
invalid vdev specification
the following errors must be manually repaired:
/dev/disk/by-id/ata-WDC_WD20EZRX-00D8PB0_WD-WMC4M1843609 is part of active pool 'Media'

... 我怎么解决这个问题?

答案1

发出命令

sudo blkid

您可能会发现您正在尝试使用 raidz 1-0 的成员或为 raidz 1-0 保留的备用成员来修复 raidz 1-1。无论如何,您都应该确保将来通过 id 而不是 /dev/sdx 来组装 raid 阵列

回应关于无视会员资格的评论。这是一个危险的做法。确保您的备份是最新的且可访问。这不是我的强项但我发现:

这个问题显然已经在这里被问到并回答过了更换 zpool 中的坏磁盘

我还在这里找到了可能相关或不相关的信息:

http://docs.oracle.com/cd/E19253-01/819-5461/gaypw/index.html

删除 zpool 的成员

zpool remove pool vdev

来源:http://manpages.ubuntu.com/manpages/lucid/man1/zpool.1M.html

答案2

我解决了这个问题。虽然不太清楚是怎么解决的。在某个时候(我想是在导出池并以不同的名称再次导入之后),驱动器不是通过其传统名称“/dev/sd*”来寻址的,而是通过其 ID 来寻址的。我没有做任何事情来强制 ID 寻址方案 - 它就这样发生了。

        NAME                                                      STATE     READ WRITE CKSUM
    Media                                                     ONLINE       0     0     0
      raidz1-0                                                ONLINE       0     0     0
        disk/by-id/ata-WDC_WD2003FYYS-02W0B0_WD-WMAY00171958  ONLINE       0     0     0
        disk/by-id/ata-WDC_WD2003FYYS-02W0B1_WD-WCAY00424060  ONLINE       0     0     0
        disk/by-id/ata-WDC_WD2003FYYS-02W0B1_WD-WMAY04082675  ONLINE       0     0     0
      raidz1-1                                                ONLINE       0     0     0
        disk/by-id/ata-WDC_WD2003FYYS-02W0B1_WD-WCAY00788302  ONLINE       0     0     0
        disk/by-id/ata-WDC_WD2003FYYS-02W0B1_WD-WCAY01088068  ONLINE       0     0     0
        disk/by-id/ata-WDC_WD20EZRX-00D8PB0_WD-WMC4M1843609   OFFLINE       0     0   0

每当我尝试用 /dev/sdg 替换上述故障设备时,计算机都会返回设备 /dev/sdg 忙的错误。事实证明,由于更改了 ID 寻址,池在某种程度上“自我修复”了。

当我意识到 zpool 中的条目已经指向我试图设置的设备 /dev/sdg 的 ID 时,我只需要将驱动器联机即可

zpool online Media /dev/disk/by-id/ata-WDC_WD20EZRX-00D8PB0_WD-WMC4M1843609 

并且池开始重新镀银。

顺便说一句:我还尝试从驱动器 /dev/sdg 中擦除数据以清除所有标签,并使驱动器忘记它已经是活动池的一部分。我不认为这有帮助,但也许它产生了我不知道的效果。dd 清除在上面提到的线程中进行了描述。

我希望这能帮助遇到类似问题的人。感谢花时间阅读我的问题的每个人。

相关内容