ZFS:Ubuntu 从 13.04 升级到 13.10 后,帮助导入 zpool,设备 ID 已更改

ZFS:Ubuntu 从 13.04 升级到 13.10 后,帮助导入 zpool,设备 ID 已更改

我已将 Ubuntu 从 13.04 版本更新到 13.10 版本,却发现 SATA 磁盘 ID 已更改,并且我的 ZFS 池现在出现故障。

在新版 Ubuntu 13.10 上,磁盘 ID 现在是 ata-*,而不是 scsi-SATA_*。

这是更新后的池状态:

  pool: nestpool
 state: UNAVAIL
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
    nestpool                                            UNAVAIL      0     0     0  insufficient replicas
      raidz2-0                                          UNAVAIL      0     0     0  insufficient replicas
        scsi-SATA_WDC_WD4000F9YZ-_WD-WCC1F0046946       UNAVAIL      0     0     0
        scsi-SATA_WDC_WD4000F9YZ-_WD-WCC4A0026423       UNAVAIL      0     0     0
        scsi-SATA_WDC_WD4000F9YZ-_WD-WMC1F0011145       UNAVAIL      0     0     0
        scsi-SATA_WDC_WD4000F9YZ-_WD-WMC1F0049294       UNAVAIL      0     0     0
        scsi-SATA_WDC_WD4000F9YZ-_WD-WMC1F0051143       UNAVAIL      0     0     0
        scsi-SATA_WDC_WD4000F9YZ-_WD-WMC1F0051756       UNAVAIL      0     0     0
        scsi-SATA_WDC_WD4000F9YZ-_WD-WMC1F0056625       UNAVAIL      0     0     0
        scsi-SATA_WDC_WD4000F9YZ-_WD-WMC1F0200560       UNAVAIL      0     0     0
    logs
      mirror-1                                          UNAVAIL      0     0     0  insufficient replicas
        scsi-SATA_Samsung_SSD_840S1ATNEAD707062H-part2  UNAVAIL      0     0     0
        scsi-SATA_Samsung_SSD_840S1ATNEAD707066K-part3  UNAVAIL      0     0     0

在网上进行了很长时间的研究后,我开始按照以下步骤操作:

首先使用以下命令导出池:zpool 导出 nestpool

然后尝试使用以下命令重新导入池:zpool import -m -f -d /dev/disk/by-id nestpool

(我也尝试过使用和不使用 -m、-f 和 -d 的所有组合,以及使用 ID 代替 zpool 名称)

但导入失败并显示以下消息:无法导入“nestpool”:一个或多个设备当前不可用

这是当前输出zpool 导入

   pool: nestpool
     id: 3947768928242827823
  state: DEGRADED
 status: One or more devices contains corrupted data.
 action: The pool can be imported despite missing or damaged devices.  The
    fault tolerance of the pool may be compromised if imported.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
 config:

    nestpool                                                DEGRADED
      raidz2-0                                              ONLINE
        ata-WDC_WD4000F9YZ-09N20L0_WD-WCC1F0046946          ONLINE
        ata-WDC_WD4000F9YZ-09N20L0_WD-WCC4A0026423          ONLINE
        ata-WDC_WD4000F9YZ-09N20L0_WD-WMC1F0011145          ONLINE
        ata-WDC_WD4000F9YZ-09N20L0_WD-WMC1F0049294          ONLINE
        ata-WDC_WD4000F9YZ-09N20L0_WD-WMC1F0051143          ONLINE
        ata-WDC_WD4000F9YZ-09N20L0_WD-WMC1F0051756          ONLINE
        ata-WDC_WD4000F9YZ-09N20L0_WD-WMC1F0056625          ONLINE
        ata-WDC_WD4000F9YZ-09N20L0_WD-WMC1F0200560          ONLINE
    cache
      ata-Samsung_SSD_840_PRO_Series_S1ATNEAD707062H-part1
    logs
      mirror-1                                              UNAVAIL  insufficient replicas
        ata-Samsung_SSD_840_PRO_Series_S1ATNEAD707062H      UNAVAIL  corrupted data
        ata-Samsung_SSD_840_PRO_Series_S1ATNEAD707066K      UNAVAIL

日志分区未正确识别,应该ata-Samsung_SSD_840_PRO_Series_S1ATNEAD707062H-第 2 部分ata-三星_SSD_840_PRO_系列_S1ATNEAD707066K-第 3 部分. 争论-m导入期间没有帮助。

我无法找到方法来告诉zpool 导入使用不同的路径/ID 来处理日志设备。任何帮助和解决此问题的想法都将不胜感激。我还能做什么来恢复这个池?

(这是所有磁盘的 gdisk -l 的当前输出:http://pastebin.com/bBec21WN

答案1

由于一切仍然完好无损,并且阻止导入池的唯一问题是错误识别用于日志设备的分区,解决方案是在 /dev/disk/by-id 下为丢失的分区创建临时符号链接。

就我的情况来说:

ln -sf ../../sda2 ata-Samsung_SSD_840_PRO_Series_S1ATNEAD707062H
ln -sf ../../sdb3 ata-Samsung_SSD_840_PRO_Series_S1ATNEAD707066K

之后,就我而言zpool 导入将旧的错误 ID 更改为现在 Ubuntu 13.10 下的新 ID(每个磁盘和分区现在都有 2 个 ID),并且我还必须为这些 ID 创建符号链接,如下所示:

ln -sf ../../sda2 wwn-0x50025385503e8531
ln -sf ../../sdb3 wwn-0x50025385503e8535

在那之后zpool 导入自动开始识别正确的分区。

为了导入,我运行了以下命令:

zpool import -f nestpool

池已导入。不要忘记修复临时链接!服务器重启后,链接也会重新创建并修复。

就我而言在导入过程中确实识别了正确的分区,无需采取进一步行动。否则,必须先删除 ZIL 设备,然后再重新添加!

不要忘记运行清理,然后一切都会恢复原状。

未来的一个教训是,如果分区是磁盘上的第一个分区,ZFS 会识别该分区,例如,当 ZFS 使用完整磁盘时就是这种情况。因此,请尝试使用完整磁盘,或者尽可能只使用磁盘上的第一个分区。

相关内容