如何挂载 zfs 克隆

如何挂载 zfs 克隆

基于说明我应该能够使用如下命令克隆 zfs 卷:

$ sudo zfs snapshot -r zfs/logs/test@tmp-1236
$ sudo zfs clone zfs/logs/test@tmp-1236 zfs/logs/test-3

问题是它不起作用。克隆似乎已创建但尚未安装,我找不到安装它的方法:

$ ls -l /data/zfs-1/logs/test-3
ls: cannot access '/data/zfs-1/logs/test-3': No such file or directory

$ zfs list
NAME              USED  AVAIL     REFER  MOUNTPOINT
zfs               984K   674G      104K  /data/zfs-1
zfs/cache          96K   674G       96K  /data/zfs-1/cache
zfs/data           96K   674G       96K  /data/zfs-1/data
zfs/logs          280K   674G      104K  /data/zfs-1/logs
zfs/logs/test     176K   674G      104K  /data/zfs-1/logs/test
zfs/logs/test-2     0B   674G      104K  /data/zfs-1/logs/test-2
zfs/logs/test-3     0B   674G      104K  /data/zfs-1/logs/test-3

$ zfs get all zfs/logs/test-3
NAME             PROPERTY              VALUE                    SOURCE
zfs/logs/test-3  type                  filesystem               -
zfs/logs/test-3  creation              Wed Apr 20 17:41 2022    -
zfs/logs/test-3  used                  0B                       -
zfs/logs/test-3  available             674G                     -
zfs/logs/test-3  referenced            104K                     -
zfs/logs/test-3  compressratio         1.00x                    -
zfs/logs/test-3  mounted               no                       -
zfs/logs/test-3  origin                zfs/logs/test@tmp-1236   -
zfs/logs/test-3  quota                 none                     default
zfs/logs/test-3  reservation           none                     default
zfs/logs/test-3  recordsize            128K                     default
zfs/logs/test-3  mountpoint            /data/zfs-1/logs/test-3  inherited from zfs
zfs/logs/test-3  sharenfs              off                      default
zfs/logs/test-3  checksum              on                       default
zfs/logs/test-3  compression           on                       inherited from zfs/logs
zfs/logs/test-3  atime                 off                      inherited from zfs/logs
zfs/logs/test-3  devices               on                       default
zfs/logs/test-3  exec                  on                       default
zfs/logs/test-3  setuid                on                       default
zfs/logs/test-3  readonly              off                      default
zfs/logs/test-3  zoned                 off                      default
zfs/logs/test-3  snapdir               hidden                   default
zfs/logs/test-3  aclinherit            restricted               default
zfs/logs/test-3  createtxg             452830                   -
zfs/logs/test-3  canmount              on                       default
zfs/logs/test-3  xattr                 on                       default
zfs/logs/test-3  copies                1                        default
zfs/logs/test-3  version               5                        -
zfs/logs/test-3  utf8only              off                      -
zfs/logs/test-3  normalization         none                     -
zfs/logs/test-3  casesensitivity       sensitive                -
zfs/logs/test-3  vscan                 off                      default
zfs/logs/test-3  nbmand                off                      default
zfs/logs/test-3  sharesmb              off                      default
zfs/logs/test-3  refquota              none                     default
zfs/logs/test-3  refreservation        none                     default
zfs/logs/test-3  guid                  585396924087649129       -
zfs/logs/test-3  primarycache          all                      default
zfs/logs/test-3  secondarycache        all                      default
zfs/logs/test-3  usedbysnapshots       0B                       -
zfs/logs/test-3  usedbydataset         0B                       -
zfs/logs/test-3  usedbychildren        0B                       -
zfs/logs/test-3  usedbyrefreservation  0B                       -
zfs/logs/test-3  logbias               latency                  default
zfs/logs/test-3  objsetid              516                      -
zfs/logs/test-3  dedup                 off                      default
zfs/logs/test-3  mlslabel              none                     default
zfs/logs/test-3  sync                  standard                 default
zfs/logs/test-3  dnodesize             legacy                   default
zfs/logs/test-3  refcompressratio      1.02x                    -
zfs/logs/test-3  written               0                        -
zfs/logs/test-3  logicalused           0                        -
zfs/logs/test-3  logicalreferenced     47K                      -
zfs/logs/test-3  volmode               default                  default
zfs/logs/test-3  filesystem_limit      none                     default
zfs/logs/test-3  snapshot_limit        none                     default
zfs/logs/test-3  filesystem_count      none                     default
zfs/logs/test-3  snapshot_count        none                     default
zfs/logs/test-3  snapdev               hidden                   default
zfs/logs/test-3  acltype               off                      default
zfs/logs/test-3  context               none                     default
zfs/logs/test-3  fscontext             none                     default
zfs/logs/test-3  defcontext            none                     default
zfs/logs/test-3  rootcontext           none                     default
zfs/logs/test-3  relatime              off                      default
zfs/logs/test-3  redundant_metadata    all                      default
zfs/logs/test-3  overlay               on                       default
zfs/logs/test-3  encryption            off                      default
zfs/logs/test-3  keylocation           none                     default
zfs/logs/test-3  keyformat             none                     default
zfs/logs/test-3  pbkdf2iters           0                        default
zfs/logs/test-3  special_small_blocks  0                        default

$ sudo zfs set mounted=yes zfs/logs/test-3
cannot set property for 'zfs/logs/test-3': 'mounted' is readonly

$ sudo zfs mount zfs/logs/test-3
cannot mount 'zfs/logs/test-3': Dataset is not complete, was created by receiving a redacted zfs send stream.

看起来新卷有mounted: no阻止其安装的选项。
我尝试将其切换为是,但没有成功。
我不确定这是否zfs mount是正确的命令,或者它是否用于安装 zpools,但我出于绝望尝试了它。
我错过了什么?

我的目标是根据需要创建特定 zfs 卷的克隆。

答案1

你认为这mounted:no是罪魁祸首的假设是不正确的。该mounted属性,正如其名称所示,是只读的,它告诉你数据集当前已安装。因此,您不能直接更改它。

无法挂载它是另一个问题的结果,这个问题zfs已经告诉你了。终端会话的最后一行:

cannot mount 'zfs/logs/test-3': Dataset is not complete, was created by receiving a redacted zfs send stream.

这实际上是问题所在。我不知道你是如何创建你试图克隆的快照的,但显然该快照是从另一个(甚至是同一个)系统使用 接收的zfs receive,其中发送一方删除了该快照。

要了解有关编辑的信息,请查看man zfsman zfs-sendman zfs-redact(取决于您的 zfs 版本),或查看HTML 手册页。我无法在这里解释太多,因为我不使用该功能。但是,根据我的经验,以“正常”方式(不编辑)发送和接收快照始终可靠,并且不会导致安装收到的快照或它们的克隆时出现任何问题。

我知道仅有链接的答案不是最好的行为,但是手册中解释编辑的段落实在太长了,无法在此引用,即使是部分引用。

答案2

此行为是由 ZFS 工具与内核模块不匹配引起的。ZFS2.x应用程序与早于 的内核不兼容5.11

由于 Ubuntu 内核版本与 Release 绑定,最简单的解决方案是进行 Release 升级。将 Ubuntu 从 更新20.04 LTS到后22.04 LTS,ZFS 克隆开始正常工作,包括更新前创建的克隆。

根据在以下位置发现的问题提供解决方案https://github.com/openzfs/zfs/issues/11581

相关内容