In the .zfs directory of a ZFS filesystem there are a few subdirectories. One of them is .zfs/snapshot. I think many of you know the trick that you can create a snapshot by just doing a mkdir in this directory.

Let`s fill our filesystem with some stuff:

root@testbed:/tank/test2# touch monday 
root@testbed:/tank/test2# touch tuesday 
root@testbed:/tank/test2# touch wednesday 
root@testbed:/tank/test2# ls
monday     tuesday    wednesday

Now we go into the .zfs/snapshot directory.

root@testbed:/tank/test2# cd .zfs 
root@testbed:/tank/test2/.zfs# cd snapshot/
root@testbed:/tank/test2/.zfs/snapshot# ls
root@testbed:/tank/test2/.zfs/snapshot# mkdir 26032025_0527
root@testbed:/tank/test2/.zfs/snapshot# cd 26032025_0527/
root@testbed:/tank/test2/.zfs/snapshot/26032025_0527# ls
monday     tuesday    wednesday
root@testbed:/tank/test2/.zfs/snapshot/26032025_0527# touch test 
touch: cannot create test: Read-only file system
root@testbed:/tank/test2/.zfs/snapshot/26032025_0527#

As it’s a snapshot, you can`t make any changes to it. It’s a read-only filesystem.

Sometimes it would be quite practical to be able to write into such a snapshot. Well, there is now a .zfs/clone subdirectory and you can do the same for ZFS clones. Just a a different directory. Execute an mkdir there and a clone is created.

root@testbed:/tank/test2/.zfs/clone# cd /tank/test2/.zfs/clone
root@testbed:/tank/test2/.zfs/clone# mkdir c26032025_0527
root@testbed:/tank/test2/.zfs/clone# cd c26032025_0527/
root@testbed:/tank/test2/.zfs/clone/c26032025_0527# ls
monday     tuesday    wednesday
root@testbed:/tank/test2/.zfs/clone/c26032025_0527# touch thursday 
root@testbed:/tank/test2/.zfs/clone/c26032025_0527# ls
monday     thursday   tuesday    wednesday
root@testbed:/tank/test2/.zfs/clone/c26032025_0527# ls ../../../
monday     tuesday    wednesday

This clone allows you to write into the filesystem without changing the source of the clone.

Let’s assume you have created a clone with the normal commands:

root@testbed:~# zfs snapshot tank/test2@26032025_0549
root@testbed:~# zfs clone tank/test2@26032025_0549 tank/test20

By setting the mountpoint property to clonedir, the clone will now appear under `.zfs/clone

root@testbed:~# zfs set mountpoint=clonedir tank/test20
root@testbed:~# cd /tank/test2/.zfs
root@testbed:/tank/test2/.zfs# cd clone/
root@testbed:/tank/test2/.zfs/clone# ls
c26032025_0527  test20

PS: You can now comment on this blog entries. However you need an account in the Fediverse (Mastodon for example) for this. When you reply to the Announcement post in the fediverse, it will automatically appear here.

Comments

You can use your Fediverse (i.e. Mastodon, among many others) account to reply to this post.

Written by

Joerg Moellenkamp

Grey-haired, sometimes grey-bearded Windows dismissing Unix guy.