Com base nestas instruções, devo ser capaz de fazer um clone de um volume zfs usando comandos como:
$ sudo zfs snapshot -r zfs/logs/test@tmp-1236
$ sudo zfs clone zfs/logs/test@tmp-1236 zfs/logs/test-3
A questão é que não funciona. O clone parece ter sido criado, mas não está montado, e não consigo encontrar uma maneira de montá-lo:
$ 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.
Parece que o novo volume tem uma opção mounted: no
que o impede de montar.
Tentei mudar para sim, mas sem sucesso.
Não tenho certeza se zfs mount
é o comando correto ou é para montar zpools, mas tentei por desespero.
o que estou perdendo?
Meu objetivo é criar clones sob demanda de volume zfs específico.
Sua suposição de que
mounted:no
é o culpado não está correta. Omounted
atributo, de acordo com seu nome, é somente leitura e informa se um conjunto de dados está montado no momento . Portanto, você não pode alterá-lo diretamente.Não conseguir montá-lo é consequência de outro problema que
zfs
já está falando. A última linha da sua sessão de terminal:Este é realmente o problema. Não sei como você criou o instantâneo que está tentando clonar, mas obviamente esse instantâneo foi recebido de um sistema diferente (ou mesmo do mesmo) usando
zfs receive
, onde a parte remetente redigiu o instantâneo.Para aprender sobre redação, dê uma olhada em
man zfs
,man zfs-send
ouman zfs-redact
(dependendo da sua versão do zfs), ou na página de manual HTML . Não posso explicar muito aqui, porque não uso esse recurso. No entanto, na minha experiência, enviar e receber instantâneos da maneira "normal" (sem redação), sempre funciona de maneira confiável e não leva a problemas com a montagem de instantâneos recebidos ou clones deles.Eu sei que as respostas somente de link não são o melhor comportamento, mas as passagens dos manuais onde a redação é explicada são realmente muito longas para citá-las aqui, mesmo em parte.
O comportamento é causado pela incompatibilidade entre as ferramentas ZFS e o módulo Kernel. O aplicativo ZFS
2.x
não é compatível com Kernels anteriores a5.11
.Como no Ubuntu a versão do kernel está vinculada ao Release, a solução mais simples foi fazer uma atualização de lançamento. Após atualizar o Ubuntu de
20.04 LTS
para22.04 LTS
, o clone ZFS começou a funcionar corretamente, incluindo clones feitos antes da atualização.Solução baseada em um problema encontrado em https://github.com/openzfs/zfs/issues/11581