From: Daan De Meyer Date: Wed, 26 Feb 2025 15:42:16 +0000 (+0100) Subject: qemu: Switch to -blockdev instead of -drive where possible X-Git-Tag: v26~346 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7ff9a890c1947b4111010e81e0e64e06a0e8d800;p=thirdparty%2Fmkosi.git qemu: Switch to -blockdev instead of -drive where possible -drive is considered legacy whereas -blockdev is the new interface. It's slightly more verbose but not incredibly so, let's switch to it. --- diff --git a/mkosi/qemu.py b/mkosi/qemu.py index d01c5b737..b38b9e0a0 100644 --- a/mkosi/qemu.py +++ b/mkosi/qemu.py @@ -1415,9 +1415,18 @@ def run_qemu(args: Args, config: Config) -> None: if want_scratch(config): scratch = stack.enter_context(generate_scratch_fs(config)) - cache = "cache.writeback=on,cache.direct=on,cache.no-flush=yes,aio=io_uring" + blockdev = [ + "driver=raw", + "node-name=scratch", + "discard=unmap", + "file.driver=file", + f"file.filename={scratch}", + "file.aio=io_uring", + "cache.direct=on", + "cache.no-flush=on", + ] cmdline += [ - "-drive", f"if=none,id=scratch,file={scratch},format=raw,discard=on,{cache}", + "-blockdev", ",".join(blockdev), "-device", "virtio-blk-pci,drive=scratch", ] # fmt: skip kcl += [f"systemd.mount-extra=LABEL=scratch:/var/tmp:{config.distribution.filesystem()}"] @@ -1434,9 +1443,16 @@ def run_qemu(args: Args, config: Config) -> None: cmdline += ["-initrd", initrd] if config.output_format in (OutputFormat.disk, OutputFormat.esp): - direct = fname.stat().st_size % resource.getpagesize() == 0 - ephemeral = config.ephemeral - cache = f"cache.writeback=on,cache.direct={yes_no(direct)},cache.no-flush={yes_no(ephemeral)},aio=io_uring" # noqa: E501 + blockdev = [ + "driver=raw", + "node-name=mkosi", + "discard=unmap", + "file.driver=file", + f"file.filename={fname}", + "file.aio=io_uring", + f"cache.direct={yes_no(fname.stat().st_size % resource.getpagesize() == 0)}", + f"cache.no-flush={yes_no(config.ephemeral)}", + ] device_type = "virtio-blk-pci" if config.cdrom: @@ -1445,7 +1461,7 @@ def run_qemu(args: Args, config: Config) -> None: device_type = "scsi-hd,removable=on" cmdline += [ - "-drive", f"if=none,id=mkosi,file={fname},format=raw,discard=on,{cache}", + "-blockdev", ",".join(blockdev), "-device", f"{device_type},drive=mkosi,bootindex=1", ] # fmt: skip @@ -1503,11 +1519,20 @@ def run_qemu(args: Args, config: Config) -> None: file = stack.enter_context(finalize_drive(config, drives[0])) for drive in drives: - arg = f"if=none,id={drive.id},file={file},format=raw,file.locking=off,cache.writeback=on,cache.direct=on,cache.no-flush=yes,aio=io_uring" # noqa: E501 + arg = [ + "driver=raw", + f"node-name={drive.id}", + "file.driver=file", + f"file.filename={file}", + "file.aio=io_uring", + "file.locking=off", + "cache.direct=on", + "cache.no-flush=yes", + ] if drive.options: - arg += f",{drive.options}" + arg += [drive.options] - cmdline += ["-drive", arg] + cmdline += ["-blockdev", ",".join(arg)] cmdline += config.qemu_args cmdline += args.cmdline