我的 Debian 服务器在 Linux 上运行 ZFS。今天由于软件升级,我不得不重启两次。第一次重启是因为 ZFS 从 0.6.4-1.2-1-wheezy 更新到 0.6.5.2-2-wheezy,之后我访问了池中的主目录,一切顺利。最后一次重启后,zpool 无法导入池:
# zpool import
pool: storage
id: 4490463110120864267
state: FAULTED
status: The pool metadata is corrupted.
action: The pool cannot be imported due to damaged devices or data.
see: http://zfsonlinux.org/msg/ZFS-8000-72
config:
storage FAULTED corrupted data
logs
sda3 ONLINE
# zpool import storage
cannot import 'storage': I/O error
Destroy and re-create the pool from
a backup source.
# zpool import -F storage
cannot import 'storage': one or more devices is currently unavailable
我缺少我的完整池,它应该是这样的:
storage
mirror
scsi-SATA_WDC_WD30EFRX-68_WD-WMC1T2132687-part1
scsi-SATA_WDC_WD30EFRX-68_WD-WMC1T2194187-part1
我如何告诉 zpool 使用数据分区?我不敢尝试将磁盘连接到此池或新池,因为我担心磁盘及其元数据将被清除。
编辑/更新:
- 也许很重要:在重新阅读了 apt 的 history.log 和 wtmp 之后,我没有把握如果我在第一次 ZFS 更新相关重启后访问我的主目录。同时,我尝试返回到以前的版本,但除了最新版本之外,我找不到任何 ZFS 软件包。
- 我有两个用于存储数据的 HDD(sdb、sdc),采用 GPT 分区,并且两个主分区都已设置为 ZFS 上的镜像池,使用 /dev/disk/by-id。设备 sda 是一个安装了 Debian 的 SSD,还有一些 VM 空间,在单独的分区 /dev/sda3 中,还有 SLOG/ZIL。所有磁盘都直接连接到主板。
- 上面的 zfsonlinx-URL 还建议使用“zpool clear -F storage”,其回复“没有可用的池”。
答案1
鉴于 zpool 丢失是在常规重启期间发生的,我希望至少 zpool 导出已发生。即使它被不彻底关闭,我也更愿意对副本进行救援工作。因此,我向系统添加了一个大硬盘(作为设备 sdb 添加 - 感谢 udev),并使用两个与故障驱动器上的 zfs 分区大小相同的分区对其进行了格式化。因为这是一个镜像池,所以我将两个旧分区复制到了新分区:
dd if=/dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WMC1T2132687-part1 /dev/sdb1 bs=104800
dd if=/dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WMC1T2194187-part1 /dev/sdb2 bs=104800
现在我有一个具有两个相同镜像的系统。
# zpool import
pool: storage
id: 4490463110120864267
state: ONLINE
status: Some supported features are not enabled on the pool.
action: The pool can be imported using its name or numeric identifier, though
some features will not be available without an explicit zpool upgrade'.
config:
storage ONLINE
mirror-0 ONLINE
sdb1 ONLINE
ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T2194187-part1 ONLINE
logs
sda3 ONLINE
# zpool import storage
#
万岁!
同时,我备份了数据两次,并且正在恢复到全新的 zpool。
答案2
由于您在最初创建池时指定了 /dev/disk/by-id,因此池可能无法找到您的磁盘。请注意您的 slog 设备是认出…
有一个池导入标志,-d
它允许您将导入过程指向特定目录以查询设备。好建议这里。
尝试:
zpool import -F -d /dev/disk/by-id storage