ZFS 池因磁盘故障而降级,导出和替换不起作用

ZFS 池因磁盘故障而降级,导出和替换不起作用

在尝试向我的 Ubuntu 服务器设备添加更多磁盘后,我遇到了麻烦。作为一个完全的初学者,我关闭了服务器,添加了两个磁盘并重新启动系统,结果却发现现有镜像中的一个磁盘“有故障”。


matsojala@amatson:~$ zpool status -v
  pool: tank
 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 0B in 21h20m with 0 errors on Fri Feb  8 14:15:04 2019
config:

        NAME                      STATE     READ WRITE CKSUM
        tank                      DEGRADED     0     0     0
          mirror-0                DEGRADED     0     0     0
            sdb                   ONLINE       0     0     0
            12086301109920570165  FAULTED      0     0     0  was /dev/sdb1

errors: No known data errors

我尝试根据这个答案进行导出和导入(ZFS 池在重启时降级)但导出失败


matsojala@amatson:~$ sudo zpool export -f tank
umount: /tank: target is busy.
cannot unmount '/tank': umount failed

我不确定应该尝试哪种方式来替换磁盘,因为系统上的磁盘是“活动池的一部分”。


matsojala@amatson:~$ sudo zpool replace -f tank 12086301109920570165 sdc1
invalid vdev specification
the following errors must be manually repaired:
/dev/sdc1 is part of active pool 'tank'

也尝试过这个。


matsojala@amatson:~$ sudo zpool replace tank sdb
/dev/sdb is in use and contains a unknown filesystem.

有什么帮助吗?关闭电源之前,磁盘完全正常工作,它在系统中名为 /dev/sdc1,ID 为“12086301109920570165”。我该怎么办?

谢谢。

答案1

看起来您一直在使用诸如 之类的名称来引用磁盘。这通常不是一个好主意,因为如果您的磁盘在重新启动或拔出-重新插入循环后被分配了不同的名称,那么 ZFS 可能会感到困惑。相反,您应该使用、或/dev/sda中的设备文件来创建池。/dev/disk/by-id/.../by-uuid/.../by-label/

对于您的情况,我并不完全确定,但它看起来像是在重启后被/dev/sdb1重新标记为,这就是为什么它看起来像是池的一部分,即使它没有出现在中。您可以尝试通过拔下您添加的额外磁盘来修复它——这可能会让标签恢复到原来的状态——然后执行 ,然后执行,以强制 ZFS 根据磁盘名称重新标记池。/dev/sdc1/dev/sdc1zpool statusexportzpool import -d /dev/disk/by-id tankby-id

如果由于繁忙而导致导出失败,请确保没有进程正在访问池中的文件,然后重试。我不是 Linux 用户,但似乎还有一些配置文件可用于帮助您在重启期间执行此操作:Github 上的这篇文章建议设置USE_DISK_BY_ID='yes'/etc/default/zfs在重启时强制执行。最坏的情况是您可以设置并重启——重启会自动运行导出/导入。

话虽如此,如果你还是想更换磁盘,Oracle 文档很好地解释了“更换镜像中的一个故障磁盘”用例。(只需忽略有关使用 取消磁盘配置的 Solaris 特定说明cfgadm。)我认为您错过的主要步骤是zpool offline tank <faulted disk>在运行 之前运行zpool replace tank <new disk>

相关内容