我已将 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 使用完整磁盘时就是这种情况。因此,请尝试使用完整磁盘,或者尽可能只使用磁盘上的第一个分区。