首先要说的是,我的所有数据都在其他地方备份了,所以一切都没有丢失(这只是很烦人,我想从错误中吸取教训)。
几个月来,我设置了 2 个驱动器 zfs 镜像池,没有出现任何问题。我最近添加了一个较旧的 2TB 驱动器来录制我的 CCTV 录像。为了避免设置第二个 samba 共享,我想将驱动器安装在现有路径下。
我用 ext4 格式化了 2TB 的驱动器,然后尝试手动将驱动器安装到我想要的位置。一切似乎都很好:原始目录树都在那里,新驱动器的 lost+found 文件夹也出现在新路径中。到目前为止一切顺利!
然后我进入 fstab 以使挂载永久化(第二行):
UUID=e82b3fae-dce5-4b41-bd87-1f7bbd5f8039 / ext4 errors=remount-ro 0 1
UUID=6b35ec61-13aa-46f9-b6b7-dfd4b264318f /zpool_primary/Media/CCTV ext4 defaults 0 0
我重新启动了,服务器恢复了运行,然后我就去睡觉了(我不确定我是否检查了路径/网络共享)。
今天晚上,我发现里面唯一的目录现在是 CCTV 文件夹。
我最初的假设是,当我安装驱动器时,我破坏了池,但是如果你看下面的内容,它报告说其中一个驱动器曾经作为不同的设备安装:
root@gomez:/zpool_primary# zpool status
pool: zpool_primary
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zpool_primary DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
sdb ONLINE 0 0 0
15142782844563214281 UNAVAIL 0 0 0 was /dev/sdf1
errors: No known data errors
lsblk的结果:
root@gomez:/home/nick# lsblk -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 111.8G 0 disk
sda1 8:1 0 111.8G 0 part /
sdb 8:16 0 7.3T 0 disk
sdb1 8:17 0 7.3T 0 part
sdb9 8:25 0 8M 0 part
sdc 8:32 1 1.8T 0 disk
sdc1 8:33 1 1.8T 0 part /zpool_primary/Media/CCTV
sdd 8:48 1 7.3T 0 disk
sdd1 8:49 1 7.3T 0 part
sdd9 8:57 1 8M 0 part
在我开始四处寻找并让事情变得更糟之前,有人能建议我如何恢复 zfs 池吗?我已经尝试注释掉 fstab 行并重新启动,但我只剩下路径(其中没有任何内容)。
顺便说一句,我印象中即使一个驱动器性能下降,zpool 也应该继续运行(事实并非如此)。
为了方便以后查看,以下是 blkid 的结果:
root@gomez:/zpool_primary# blkid
/dev/sda1: LABEL="OS" UUID="e82b3fae-dce5-4b41-bd87-1f7bbd5f8039" TYPE="ext4" PARTUUID="5805358e-01"
/dev/sdb1: LABEL="zpool_primary" UUID="9579775147971336578" UUID_SUB="6175940412684032547" TYPE="zfs_member" PARTLABEL="zfs-efd142ee34d8cfea" PARTUUID="018883e2-0067-ac4b-8126-a2c02d0cfa45"
/dev/sdc1: LABEL="CCTVPartition" UUID="6b35ec61-13aa-46f9-b6b7-dfd4b264318f" TYPE="ext4" PARTLABEL="primary" PARTUUID="a31f929b-0989-4baa-8faf-082be6fca607"
/dev/sdd1: LABEL="zpool_primary" UUID="9579775147971336578" UUID_SUB="15142782844563214281" TYPE="zfs_member" PARTLABEL="zfs-693944edaab7d9e6" PARTUUID="91203b94-8387-1e4e-8646-5ba2cb6c461f"
/dev/sdb9: PARTUUID="e18a4bf7-b4c9-2149-bcd2-19ab9ba2182c"
/dev/sdd9: PARTUUID="009580ae-4c61-ab4d-a923-b7dc6ba14faa"
fdisk:
root@gomez:/zpool_primary# fdisk -l
Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5805358e
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 234440703 234438656 111.8G 83 Linux
Disk /dev/sdb: 7.3 TiB, 8001563222016 bytes, 15628053168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 7FB97DF9-6B2B-4D4A-A086-4B53CBA65C6F
Device Start End Sectors Size Type
/dev/sdb1 2048 15628036095 15628034048 7.3T Solaris /usr & Apple ZFS
/dev/sdb9 15628036096 15628052479 16384 8M Solaris reserved 1
Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 205036C8-9CE4-4C1F-9FC5-0D8BF4B6EBB8
Device Start End Sectors Size Type
/dev/sdc1 2048 3907028991 3907026944 1.8T Linux filesystem
Disk /dev/sdd: 7.3 TiB, 8001563222016 bytes, 15628053168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: EA0DD0BF-B55E-4B4E-BA33-C74AAB6922F9
Device Start End Sectors Size Type
/dev/sdd1 2048 15628036095 15628034048 7.3T Solaris /usr & Apple ZFS
/dev/sdd9 15628036096 15628052479 16384 8M Solaris reserved 1
答案1
因此,看起来 dev id 已经更改。通过导出 zfs 池成功恢复了一半:
zpool export zpool_primary
并再次使用以下方式导入:
zpool import -d /dev/disk/by-id zpool_primary
我还没有设法恢复第二个驱动器,因为我不知道正确的 ID,但根本原因是使用 /dev 而不是唯一 ID 进行设置。
答案2
如果我没记错的话,/etc/fstab
是在 zfs 挂载其数据集之前处理的。修复降级驱动器后,如果您仍然无法挂载文件系统,我认为 zfs 很可能会因为其目标不为空(现在其中挂载了一个 ext4 文件系统)而无法挂载。
的输出是什么systemctl --failed
?
我打赌zfs-mount.service
失败了。
简单的解决方案是不在 zfs 系统树内挂载 ext4 系统。您可以删除该行/etc/fstab
并删除它可能创建的文件夹结构,以使 zfs 具有干净的挂载点。
如果必须将其安装在那里,您可以尝试zfs-mount.service
在行中添加依赖项/etc/fstab
,如下所示(下面的部分全部是一行):
UUID=6b35ec61-13aa-46f9-b6b7-dfd4b264318f /zpool_primary/Media/CCTV ext4 defaults,x-systemd.requires=zfs-mount.service 0 0