升级 Ubuntu,一个 zpool 中的所有驱动器都标记为不可用

Mat*_*ker 8 ubuntu zfsonlinux

我刚刚升级了 Ubuntu 14.04,服务器上有两个 ZFS 池。我在使用 ZFS 驱动程序和内核版本时遇到了一些小问题,但现在已经解决了。一个池上线,安装良好。另一个没有。该工具之间的主要区别是一个只是磁盘池(视频/音乐存储),另一个是 raidz 集(文档等)

我已经尝试导出和重新导入池,但无济于事,尝试导入让我得到这个:

root@kyou:/home/matt# zpool import -fFX -d /dev/disk/by-id/
   pool: storage
     id: 15855792916570596778
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

        storage                                      UNAVAIL  insufficient replicas
          raidz1-0                                   UNAVAIL  insufficient replicas
            ata-SAMSUNG_HD103SJ_S246J90B134910       UNAVAIL
            ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523  UNAVAIL
            ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969  UNAVAIL
Run Code Online (Sandbox Code Playgroud)

那些的符号链接/dev/disk/by-id也存在:

root@kyou:/home/matt# ls -l /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910* /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51*
lrwxrwxrwx 1 root root  9 May 27 19:31 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910 -> ../../sdb
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910-part9 -> ../../sdb9
lrwxrwxrwx 1 root root  9 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523 -> ../../sdd
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523-part1 -> ../../sdd1
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523-part9 -> ../../sdd9
lrwxrwxrwx 1 root root  9 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969 -> ../../sde
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969-part1 -> ../../sde1
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969-part9 -> ../../sde9
Run Code Online (Sandbox Code Playgroud)

检查/dev/sd*列出的各种设备,它们似乎是正确的(raidz 阵列中的 3 个 1TB 驱动器)。

我已经zdb -l在每个驱动器上运行,将其转储到文件中,然后运行差异。3 的唯一区别是 guid 字段(我认为这是预期的)。每一个上的3个标签基本相同,如下:

version: 5000
name: 'storage'
state: 0
txg: 4
pool_guid: 15855792916570596778
hostname: 'kyou'
top_guid: 1683909657511667860
guid: 8815283814047599968
vdev_children: 1
vdev_tree:
    type: 'raidz'
    id: 0
    guid: 1683909657511667860
    nparity: 1
    metaslab_array: 33
    metaslab_shift: 34
    ashift: 9
    asize: 3000569954304
    is_log: 0
    create_txg: 4
    children[0]:
        type: 'disk'
        id: 0
        guid: 8815283814047599968
        path: '/dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910-part1'
        whole_disk: 1
        create_txg: 4
    children[1]:
        type: 'disk'
        id: 1
        guid: 18036424618735999728
        path: '/dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523-part1'
        whole_disk: 1
        create_txg: 4
    children[2]:
        type: 'disk'
        id: 2
        guid: 10307555127976192266
        path: '/dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969-part1'
        whole_disk: 1
        create_txg: 4
features_for_read:
Run Code Online (Sandbox Code Playgroud)

愚蠢的是,我最近没有这个池的备份。但是,在重新启动之前池很好,Linux 认为磁盘很好(我现在运行 smartctl 来仔细检查)

所以,总结一下:

  • 我升级了 Ubuntu,但无法访问我的两个 zpool 之一。
  • 池之间的区别是出现的一个是 JBOD,另一个是 zraid。
  • 可卸载 zpool 中的所有驱动器都标记为 UNAVAIL,没有损坏数据的注释
  • 这些池都是使用从 引用的磁盘创建的/dev/disk/by-id/
  • 来自/dev/disk/by-id各种/dev/sd设备的符号链接似乎是正确的
  • zdb 可以从驱动器读取标签。
  • 已尝试导出/导入池,无法再次导入。

我可以通过 zpool/zfs 调用某种黑魔法将这些磁盘带回合理的阵列吗?我可以在zpool create zraid ...不丢失数据的情况下运行吗?反正我的数据没了?

Mat*_*ker 5

在对这个特定错误消息进行了大量谷歌搜索之后,我得到了:

root@kyou:/home/matt# zpool import -f storage
cannot import 'storage': one or more devices are already in use
Run Code Online (Sandbox Code Playgroud)

(包括在这里供后代和搜索索引)我发现了这个:

https://groups.google.com/a/zfsonlinux.org/forum/#!topic/zfs-discuss/VVEwd1VFDmc

它使用相同的分区,并在加载 ZFS 之前的任何引导期间将它们添加到 mdraid。

我记得在里面看到了一些 mdadm 行dmesg,果然:

root@kyou:/home/matt# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md126 : active raid5 sdd[2] sdb[0] sde[1]
      1953524992 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
Run Code Online (Sandbox Code Playgroud)

这些驱动器曾是软件 raid5 阵列的一部分。出于某种原因,在升级过程中,它决定重新扫描驱动器,发现驱动器曾经是 md 阵列的一部分,并决定重新创建它。这是通过以下方式验证的:

root@kyou:/storage# mdadm --examine /dev/sd[a-z]
Run Code Online (Sandbox Code Playgroud)

这三个驱动器显示了一堆信息。现在,停止阵列:

root@kyou:/home/matt# mdadm --stop /dev/md126
mdadm: stopped /dev/md126
Run Code Online (Sandbox Code Playgroud)

并重新运行导入:

root@kyou:/home/matt# zpool import -f storage
Run Code Online (Sandbox Code Playgroud)

已使阵列重新联机。

现在我制作该池的快照以进行备份,并mdadm --zero-superblock在它们上运行。


eww*_*ite 4

Ubuntu 似乎有一些令人讨厌的 udev 问题,而我们在 Red Hat/CentOS 方面没有看到这些问题。如果可以的话,我建议使用基于 WWN 的设备名称,因为它们似乎不太容易受到此影响。

您是否看到过:为什么重新启动会导致我的 ZFS 镜像的一侧变得 UNAVAIL?

  • 我已经看过这些,并阅读其中链接的线程,问题似乎是 udev 没有为设备上的所有分区创建符号链接。我刚刚检查了所有三个驱动器。它们各自具有分区号 1 和 9,并且这些驱动器在“/dev/disk/by-id”中具有这些驱动器的符号链接,并且一个设备的所有符号链接都指向同一“/dev/sd*”驱动器。我能找到的最接近的解决方案(使用 zpool replacement),我无法做到,因为我无法重新导入池。 (2认同)

归档时间:

查看次数:

2443 次

最近记录:

9 年,10 月 前