QEMU-STORAGE-DAEMON(1) QEMU QEMU-STORAGE-DAEMON(1) (NAME) qemu-storage-daemon - QEMU (SYNOPSIS) qemu-storage-daemon [] (DESCRIPTION) qemu-storage-daemon QEMU qemu-img qemu-nbd QMP . (export) . (monitor) QMP . QEMU : o (Block nodes) o (Block jobs) o (Block exports) o (Throttle groups) o (Character devices) o (Crypto and secrets) o QMP o / (IOThreads) QEMU ( QMP) . qemu-storage-daemon-qmp-ref(7) . QMP quit SIGINT/SIGHUP/SIGTERM . : . . (OPTIONS) : -h, --help -V, --version -T, --trace [[enable=]PATTERN][,events=FILE][,file=FILE] (tracing). [enable=]PATTERN PATTERN ( globbing) . QEMU simple log ftrace . -trace . -trace help . events=FILE FILE . ( trace-events-all ) globbing . QEMU simple log ftrace . file=FILE FILE (log) . QEMU simple . --blockdev BLOCKDEVDEF . qemu(1) qemu-block-drivers(7) . --chardev CHARDEVDEF . qemu(1) . (UNIX domain socket) : --chardev socket,id=char1,path=/var/run/qsd-qmp.sock,server=on,wait=off --export [type=]nbd,id=,node-name=[,name=][,writable=on|off][,bitmap=] --export [type=]vhost-user-blk,id=,node-name=,addr.type=unix,addr.path=[,writable=on|off][,logical-block-size=][,num-queues=] --export [type=]vhost-user-blk,id=,node-name=,addr.type=fd,addr.str=[,writable=on|off][,logical-block-size=][,num-queues=] --export [type=]fuse,id=,node-name=,mountpoint=[,growable=on|off][,writable=on|off][,allow-other=on|off|auto] --export [type=]vduse-blk,id=,node-name=,name=[,writable=on|off][,num-queues=][,queue-size=][,logical-block-size=][,serial=] . node-name . writable ( off ). nbd --nbd-server ( ). name NBD ( node-name ). bitmap (dirty bitmap) NBD NBD_OPT_SET_META_CONTEXT "qemu:dirty-bitmap:BITMAP" . vhost-user-blk vhost-user . addr.type=unix,addr.path= addr.type=fd,addr.str= (file descriptor passing) . logical-block-size ( 512 ). num-queues virtqueue ( 1 ). fuse (mount point) . ( (mount) ). . growable . allow-other . (non-root) user_allow_other fuse.conf . allow-other auto () . vduse-blk name ( ) VDUSE . num-queues virtqueue ( 1 ). queue-size virtqueue ( 256 ). VDUSE vdpa(8) iproute2 vDPA : # vdpa dev add name mgmtdev vduse vDPA : # vdpa dev del vDPA virtio_vdpa.ko vhost_vdpa.ko . VDUSE . --monitor MONITORDEF QMP . QMP qemu(1) . QMP char1 : --monitor chardev=char1 --nbd-server addr.type=inet,addr.host=,addr.port=[,tls-creds=][,tls-authz=][,max-connections=] --nbd-server addr.type=unix,addr.path=[,tls-creds=][,tls-authz=][,max-connections=] --nbd-server addr.type=fd,addr.str=[,tls-creds=][,tls-authz=][,max-connections=] NBD . TCP (UNIX domain) . (listen socket) (file descriptor passing) ( ). TLS --object tls-creds-* authz-* ( ). NBD /var/run/qsd-nbd.sock: --nbd-server addr.type=unix,addr.path=/var/run/qsd-nbd.sock --object help --object ,help --object [,=...] QEMU . help ,help . qemu(1) . --pidfile PATH (pid) . : $ kill -SIGTERM $( pid . pid (unlink) . pid chardev (exports) NBD . pid . --daemonize ( ). ( pid ) . . (EXAMPLES) QMP qmp.sock QMP : $ qemu-storage-daemon \ --chardev socket,path=qmp.sock,server=on,wait=off,id=char1 \ --monitor chardev=char1 QMP (file descriptor passing) (busy wait) QMP : #!/usr/bin/env python3 import subprocess import socket sock_path = '/var/run/qmp.sock' with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as listen_sock: listen_sock.bind(sock_path) listen_sock.listen() fd = listen_sock.fileno() subprocess.Popen( ['qemu-storage-daemon', '--chardev', f'socket,fd={fd},server=on,id=char1', '--monitor', 'chardev=char1'], pass_fds=[fd], ) # listen_sock was automatically closed when leaving the 'with' statement # body. If the daemon process terminated early then the following connect() # will fail with "Connection refused" because no process has the listen # socket open anymore. Launch errors can be detected this way. qmp_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) qmp_sock.connect(sock_path) ...QMP interaction... --nbd-server addr.type=fd,addr.str= --export type=vhost-user-blk,addr.type=fd,addr.str= . disk.img NBD nbd.sock: $ qemu-storage-daemon \ --blockdev driver=file,node-name=disk,filename=disk.img \ --nbd-server addr.type=unix,addr.path=nbd.sock \ --export type=nbd,id=export,node-name=disk,writable=on qcow2 disk.qcow2 vhost-user-blk vhost-user-blk.sock: $ qemu-storage-daemon \ --blockdev driver=file,node-name=file,filename=disk.qcow2 \ --blockdev driver=qcow2,node-name=qcow2,file=file \ --export type=vhost-user-blk,id=export,addr.type=unix,addr.path=vhost-user-blk.sock,node-name=qcow2 qcow2 disk.qcow2 FUSE (raw) : $ qemu-storage-daemon \ --blockdev driver=file,node-name=file,filename=disk.qcow2 \ --blockdev driver=qcow2,node-name=qcow2,file=file \ --export type=fuse,id=export,node-name=qcow2,mountpoint=disk.qcow2,writable=on qemu(1), qemu-block-drivers(7), qemu-storage-daemon-qmp-ref(7) (COPYRIGHT) 2026 QEMU 11.1.1 August 28, 2026 QEMU-STORAGE-DAEMON(1)