Managing ZFS zvol permissions with udev

This page may be outdated.

There is something of a FAQ on how to make the permissions of a ZFS on Linux volume (zvol) stick. In particular, the user and group (uid and gid) of the owner. When using ZFS on Linux, we can make this work by using udev.

udev puts out less information about these than about most others, but we can figure it out anyhow. There is a file /lib/udev/rules.d/60-zvol.rules that forms the basis for what we’ll do.

First, create a udev rule, say /etc/udev/rules.d/99-local-zvol.rules:

  KERNEL=="zd*" SUBSYSTEM=="block" ACTION=="add|change" PROGRAM="/lib/udev/zvol_id /dev/%k" RESULT=="tank/vm/debian" OWNER="jgoerzen"

Note carefully the number of equals signs in a row at different places.

The RESULT parameter holds the dataset path in zfs form (no leading slash).

If you have multiple zvols you wish to control, add them all here.

You can set, for instance:

  OWNER="jgoerzen" GROUP="disk" MODE="0750"

or however you like.

To apply, run udevadmĀ controlĀ --reload. The permission change will take effect on the next import of the zpool.

Additional note for LVM

If you use LVM on your host, and your zvols contain LVM images, you might also want to add this to lvm.conf so that zvol LVM images are not presented on the host:

      filter = [ "r|/dev/zvol|", "r,/dev/zd.*,", "a/.*/" ]

See Also

ZFS on Linux

This is about running ZFS on Linux and Debian.