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

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

我刚刚升级了 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

中的符号链接/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

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

我在每个驱动器上运行了它zdb -l,将其转储到文件中,然后运行了 diff。这 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:

愚蠢的是,我没有这个池的近期备份。但是,在重启之前池是完好的,Linux 也能看到磁盘(我现在运行了 smartctl 来仔细检查)

总结一下:

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

我可以通过 zpool/zfs 调用某种黑魔法来将这些磁盘恢复到合理的阵列吗?我可以运行zpool create zraid ...而不会丢失数据吗?我的数据是否已经丢失?

答案1

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

root@kyou:/home/matt# zpool import -f storage
cannot import 'storage': one or more devices are already in use

(此处包含以供后人参考和搜索索引)我发现了这一点:

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]

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

root@kyou:/storage# mdadm --examine /dev/sd[a-z]

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

root@kyou:/home/matt# mdadm --stop /dev/md126
mdadm: stopped /dev/md126

并重新运行导入:

root@kyou:/home/matt# zpool import -f storage

已使阵列恢复在线。

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

答案2

Ubuntu 似乎有一些恼人的 udev 问题在 Red Hat/CentOS 端我们没有看到这种情况。如果可以,我建议使用基于 WWN 的设备名称,因为它们似乎不太容易受到这种影响。

你看过吗:为什么重新启动会导致我的 ZFS 镜像的一侧变为 UNAVAIL?

答案3

我在尝试将 Debian Wheezy 上的 3.13 系列内核升级时遇到了几乎完全相同的问题。您的评论是正确的;这是一个 udev 错误。不幸的是,我从未解决过这个问题,但值得探索其他内核,尤其是 3.11 系列,以兼容 0.6.2 版 ZOL。只需使用较旧的内核,直到 0.6.3 版发布。

相关内容