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


8

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

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

Answers:


5

在大量搜索此特定错误消息后,我得到了:

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在其上运行。


4

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

您是否看到过:为什么重新引导会导致ZFS镜像的一侧变为无效?


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

2

我试图在Debian Wheezy上升级到3.13系列内核时遇到了几乎这个确切的问题。您的评论正确无误;这是一个udev错误。不幸的是,我从未进行过排序,但是值得探索其他内核,尤其是3.11系列,以与ZOL 0.6.2版本兼容。只需使用较旧的内核,直到出现0.6.3。


udev以这种方式破坏是非常不可接受的。我不使用Ubuntu,但是与RHEL提供的产品相比,类似Ubuntu的产品看起来确实没有打磨。
ewwhite
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.