ZFS:设备 vdev 漫游导致 zpool 故障

ZFS:设备 vdev 漫游导致 zpool 故障

我有一个 zpool,在断电重启服务器后,现在显示为故障状态,设备名称也乱了。我知道我通过设备名称添加 vdev 搞砸了,但我不知道在创建和填充池后可以更改它。目前,池正在寻找“/dev/sde”(而不是“/dev/sdc”),而“/dev/sde”是根文件系统所在的设备,我不确定如何在不使情况变得更糟的情况下进行任何恢复。

希望有一种方法可以简单地重新配置 zpool 以使用“sdc”,从而能够以“by-id”命名导出和重新导入,以避免将来出现这种情况。

root@boxey:~# zpool status
  pool: data
 state: FAULTED
status: One or more devices could not be used because the label is missing
        or invalid.  There are insufficient replicas for the pool to continue
        functioning.
action: Destroy and re-create the pool from
        a backup source.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        data        UNAVAIL      0     0     0  insufficient replicas
          raidz1-0  UNAVAIL      0     0     0  insufficient replicas
            sda     ONLINE       0     0     0
            sde     UNAVAIL      0     0     0
            sdd     FAULTED      0     0     0  corrupted data
            sdb     FAULTED      0     0     0  corrupted data


root@boxey:~# lsblk --output=NAME,FSTYPE,LABEL,SIZE,UUID
NAME   FSTYPE     LABEL        SIZE UUID
sda                            2.7T
├─sda1 zfs_member data         2.7T 166412156792699288
└─sda9                           8M
sdb                            2.7T
├─sdb1 zfs_member data         2.7T 166412156792699288
└─sdb9                           8M
sdc                            2.7T
├─sdc1 zfs_member data         2.7T 166412156792699288
└─sdc9                           8M
sdd                            2.7T
├─sdd1 zfs_member data         2.7T 166412156792699288
└─sdd9                           8M
sde                           55.9G
├─sde1 ext4                   53.6G f2d9733a-846d-48c2-bb63-c7f4e0345ad5
├─sde2                           1K
└─sde5 swap                    2.3G 6c34cadd-db42-4e14-a647-733e021c018e

root@boxey:~# zpool export -f data
cannot export 'data': one or more devices is currently unavailable

root@boxey:~# zdb
data:
    version: 5000
    name: 'data'
    state: 0
    txg: 23300202
    pool_guid: 166412156792699288
    errata: 0
    hostid: 8323329
    hostname: 'boxey'
    com.delphix:has_per_vdev_zaps
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 166412156792699288
        children[0]:
            type: 'raidz'
            id: 0
            guid: 1294813595973345307
            nparity: 1
            metaslab_array: 34
            metaslab_shift: 36
            ashift: 12
            asize: 12002313371648
            is_log: 0
            create_txg: 4
            com.delphix:vdev_zap_top: 39
            children[0]:
                type: 'disk'
                id: 0
                guid: 4873892069497714664
                path: '/dev/sda1'
                whole_disk: 1
                DTL: 101
                create_txg: 4
                com.delphix:vdev_zap_leaf: 40
            children[1]:
                type: 'disk'
                id: 1
                guid: 16241503886070383904
                path: '/dev/sde1'
                whole_disk: 1
                DTL: 100
                create_txg: 4
                com.delphix:vdev_zap_leaf: 41
            children[2]:
                type: 'disk'
                id: 2
                guid: 1910545688695459106
                path: '/dev/sdd1'
                whole_disk: 1
                DTL: 99
                create_txg: 4
                com.delphix:vdev_zap_leaf: 42
            children[3]:
                type: 'disk'
                id: 3
                guid: 2766829802450425996
                path: '/dev/sdb1'
                whole_disk: 1
                DTL: 98
                create_txg: 4
                com.delphix:vdev_zap_leaf: 43
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data

答案1

如果问题仅与设备名称有关,您可以通过以下命令重新导入具有稳定名称的池:

zpool import data -d /dev/disk/by-id/

然而,你有磁盘FAULTED/corrupted data,这让我认为你有点弄乱了数据本身,而不是“仅仅”弄乱了真实的设备名称。

请尝试上面建议的命令并分享任何其他输出。

编辑:OP 评论如下:

zpool import data -d /dev/disks/by-id/ 无法导入“data”:具有该名称的池已存在,请使用“zpool import <pool | id> ”格式为其指定新名称

root@boxey:~# zpool import data data2 -t 无法导入‘data’:没有可用的池

这意味着FAULTED在正常池操作期间,系统会发现 vdev。请执行以下操作:

  • 删除缓存文件/etc/zfs/zpool.cache
  • 重启系统
  • 显示输出zpool status 尝试任何导入
  • 如果zpool status显示没有导入池,请尝试发出zpool import data -d /dev/disk/by-id/

相关内容