Skip to content

fuser does not work on Linux for zvols opened by QEMU

Zvol or ZFS volume is a ZFS dataset that represents a block device. When this block device is opened by QEMU, fuser fails to detect it.

NAME          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda             8:0    0 447.1G  0 disk  
|-sda1          8:1    0     2G  0 part  
`-sda2          8:2    0 445.1G  0 part  
sdb             8:16   1  14.5G  0 disk  
|-sdb1          8:17   1   120K  0 part  
|-sdb2          8:18   1   2.8M  0 part  
|-sdb3          8:19   1   1.5G  0 part  
`-sdb4          8:20   1   300K  0 part  
zd0           230:0    0    50G  0 disk  
nvme0n1       259:0    0 476.9G  0 disk  
|-nvme0n1p1   259:1    0     1M  0 part  
|-nvme0n1p2   259:2    0   512M  0 part  
|-nvme0n1p3   259:3    0 460.4G  0 part  
`-nvme0n1p4   259:4    0    16G  0 part  
  `-nvme0n1p4 253:0    0    16G  0 crypt [SWAP]

root@truenas[/]# file -s /dev/zd0  
/dev/zd0: DOS/MBR boot sector

root@truenas[/]# fuser -vam /dev/zd0
                     USER        PID ACCESS COMMAND
/dev/zd0:

Not sure if it's intended to be this way or this is an issue because we do see zvol in proc filesystem or by using lsof command:

root@truenas[/]# ps -A | grep "qemu"
 134288 ?        00:07:31 qemu-system-x86

root@truenas[/]# ls -l /proc/134288/fd | grep "/dev/zd0"
lrwx------ 1 libvirt-qemu libvirt-qemu 64 Mar 17 10:54 17 -> /dev/zd0

root@truenas[/]# lsof -p 134288 | grep "/dev/zd0"
qemu-syst 134288 libvirt-qemu   17u      BLK              230,0      0t0    16 /dev/zd0