Debian 8 重启后 ZFS 池消失

Debian 8 重启后 ZFS 池消失

我刚刚开始使用 ZFS,并且掌握了基础知识,但在保持其运行方面遇到了问题。

池已创建,挂载已创建,我可以保存数据并查看磁盘活动……一切看起来都很好。但是,重新启动后zpool list报告“没有可用的池”。

我在 CentOS 上找到了几篇关于此问题的文章,其中讨论了用于 zfs 的启动脚本作为修复方法,但到目前为止我还没有在 Debian 上找到。

我正在使用 Debian 反向移植zfs-dkms包,其依赖项包括libzfs2linux、、和。我也在 SysV 模式下运行,libzpool2linux而不是。bfs-zedzfsutils-linuxinitsystemd

/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-idalways,因为它是最不麻烦的设置。

由于我不知道您的设置(池/数据集),我将举一个示例:

  1. 首先列出你想要的数据集:zfs list 获取你想要的数据集,例如storagepool/backup
  2. 如果已安装,请卸载storagepool/backupzfs。(您可以通过mount | grep zfs或检查zfs mount
  3. 使用以下命令列出您的挂载点zfs get mountpoint
NAME                    PROPERTY    VALUE                   SOURCE
storagepool/backup      mountpoint  /storagepool/backup     default
  1. 更改挂载点zfs set mountpoint=legacy storagepool/backup

  2. 现在您必须/etc/fstab通过sudoroot输入第二行进行编辑(第一行用于解释详细信息)

    <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,这不太可能,我建议使用noatimeafterdefaults选项。

现在,当您重新启动时,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

相关内容