我刚刚开始使用 ZFS,并且掌握了基础知识,但在保持其运行方面遇到了问题。
池已创建,挂载已创建,我可以保存数据并查看磁盘活动……一切看起来都很好。但是,重新启动后zpool list
报告“没有可用的池”。
我在 CentOS 上找到了几篇关于此问题的文章,其中讨论了用于 zfs 的启动脚本作为修复方法,但到目前为止我还没有在 Debian 上找到。
我正在使用 Debian 反向移植zfs-dkms
包,其依赖项包括libzfs2linux
、、和。我也在 SysV 模式下运行,libzpool2linux
而不是。bfs-zed
zfsutils-linux
init
systemd
/dev/disk/by-id
我尝试使用标准设备重新创建池/dev/sdx
;我尝试编辑/etc/default/zfs
和设置(不是一次全部):
ZFS_MOUNT='yes'
ZPOOL_IMPORT_ALL_VISIBLE='yes'
ZPOOL_IMPORT_PATH="/dev/disk/by-vdev:/dev/disk/by-id"
ZPOOL_IMPORT_PATH="/dev"
ZFS_INITRD_POST_MODPROBE_SLEEP='5'
我看到了我的池配置名称/etc/zfs/zpool.cache
;我可以使用手动重新导入所有内容,zpool import <pool-name>
并且所有数据都在那里。
这是启动时的时间问题吗?我没什么可想的了,任何建议我都会很感激。
答案1
昨天晚上我偶然看到了一个邮件列表帖子,解决了这个谜团。它表明zfs_autoimport_disable
现在编译为默认设置为 1/true!因此,无论在 中配置了什么/etc/default/zfs
,池都不会在 zfs 模块加载时导入。
因此,对我来说,解决方法是添加一个/etc/modprobe.d/
配置文件(随便叫什么名字)并定义options zfs zfs_autoimport_disable=0
。现在池已导入,zfs 文件系统可以通过 zfs 或传统模式挂载。
我不理解这个决定,但是现在一切都按预期进行......
答案2
首先备份/etc/default/zfs
然后将其删除。
我建议采用这种legacy
方法。这将删除自动挂载 zfs 功能并依赖/etc/fstab
于挂载信息。我还建议使用/dev/disk/by-id
always,因为它是最不麻烦的设置。
由于我不知道您的设置(池/数据集),我将举一个示例:
- 首先列出你想要的数据集:
zfs list
获取你想要的数据集,例如storagepool/backup
- 如果已安装,请卸载
storagepool/backup
zfs。(您可以通过mount | grep zfs
或检查zfs mount
) - 使用以下命令列出您的挂载点
zfs get mountpoint
:
NAME PROPERTY VALUE SOURCE storagepool/backup mountpoint /storagepool/backup default
更改挂载点
zfs set mountpoint=legacy storagepool/backup
现在您必须
/etc/fstab
通过sudo
或root
输入第二行进行编辑(第一行用于解释详细信息)
<device alias dataset> <mountpoint> <filesystem type> <options> <dump> <fsckorder> storagepool/backup /mnt/backup zfs defaults 0 0
详细说明:
- 这第一个字段(存储池/备份)通常是需要描述的物理设备/远程文件系统,在您的情况下是池/数据集(注意:zfs 数据集没有前导反斜杠('/')!!(给我带来了很多麻烦))
- 这第二个字段
(/mnt/backup)指定文件系统将挂载的挂载点。 - 这第三场
(zfs)是第一个字段中设备上的文件系统类型。 - 这第四场(noauto,suid,ro,user) 是 mount 在挂载文件系统时应该使用的选项的(默认)列表。
- 这第五场(0)决定是否应备份文件系统。如果为零,则 dump 将忽略该文件系统。
- 这第六场(0)由 fsck(文件系统检查实用程序)使用来确定检查文件系统的顺序。
默认选项的意思是:
rw, suid, dev, exec, auto, nouser, and async
如果您使用 SSD,这不太可能,我建议使用noatime
afterdefaults
选项。
现在,当您重新启动时,zfs 文件系统应该根据该/etc/fstab
文件进行挂载。
重要的提示:如果你想安装一个zfs 遗留问题您必须使用mount -t zfs <dataset> <mountpoint>
而不是zfs mount
。
答案3
@Peter-B 您的解决方案解决了我重启时 zpool 无法导入的问题。非常感谢。对于不熟悉 modprobe conf 语法的人,有一点需要澄清:选项需要放在一行上,即。
options zfs zfs_autoimport_disable=0
答案4
我遇到了同样的问题,但另外,我使用了存储在 keylocation 中的密码加密。zfs mount -l -a
解决了我的问题。有关更详细的描述,请参阅此处https://github.com/openzfs/zfs/issues/8750