File 058-virtManager-Add-NVMe-disk-type.patch of Package virt-manager
Subject: virtManager: Add NVMe disk type
From: 6543 6543@obermui.de Thu Dec 18 03:38:56 2025 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 08b547366fbc4037a737515ee0efab3c3e673a80
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -472,6 +472,7 @@ class vmmAddHardware(vmmGObjectUI):
def controller_recommended_types():
return [
DeviceController.TYPE_SCSI,
+ DeviceController.TYPE_NVME,
DeviceController.TYPE_USB,
DeviceController.TYPE_VIRTIOSERIAL,
DeviceController.TYPE_CCID,
@@ -482,6 +483,7 @@ class vmmAddHardware(vmmGObjectUI):
labels = {
DeviceController.TYPE_IDE: _("IDE"),
DeviceController.TYPE_FDC: _("Floppy"),
+ DeviceController.TYPE_NVME: _("NVMe"),
DeviceController.TYPE_SCSI: _("SCSI"),
DeviceController.TYPE_SATA: _("SATA"),
DeviceController.TYPE_VIRTIOSERIAL: _("VirtIO Serial"),
@@ -510,6 +512,7 @@ class vmmAddHardware(vmmGObjectUI):
ret.append("ide")
ret.append("sata")
ret.append("fdc")
+ ret.append("nvme")
ret.append("scsi")
ret.append("usb")
@@ -531,7 +534,7 @@ class vmmAddHardware(vmmGObjectUI):
buses = vmmAddHardware.disk_old_recommended_buses(guest)
bus_map = {
- "disk": ["ide", "sata", "scsi", "sd", "usb", "virtio", "xen"],
+ "disk": ["ide", "nvme", "sata", "scsi", "sd", "usb", "virtio", "xen"],
"floppy": ["fdc"],
"cdrom": ["ide", "sata", "scsi", "usb"],
"lun": ["scsi"],
@@ -542,6 +545,7 @@ class vmmAddHardware(vmmGObjectUI):
def disk_pretty_bus(bus):
bus_mappings = {
"ide": _("IDE"),
+ "nvme": _("NVMe"),
"sata": _("SATA"),
"scsi": _("SCSI"),
"sd": _("SD"),
@@ -1424,16 +1428,33 @@ class vmmAddHardware(vmmGObjectUI):
return dev
def _set_disk_controller(self, disk):
- # Add a SCSI controller with model virtio-scsi if needed
+ # Add a SCSI controller with model virtio-scsi if needed or
+ # add an NVMe controller if needed
disk.vmm_controller = None
- if not self.vm.xmlobj.can_default_virtioscsi():
- return
- controller = DeviceController(self.conn.get_backend())
- controller.type = "scsi"
- controller.model = "virtio-scsi"
- controller.index = 0
- disk.vmm_controller = controller
+ if disk.bus == "scsi":
+ if not self.vm.xmlobj.can_default_virtioscsi():
+ return
+
+ controller = DeviceController(self.conn.get_backend())
+ controller.type = "scsi"
+ controller.model = "virtio-scsi"
+ controller.index = 0
+ disk.vmm_controller = controller
+
+ elif disk.bus == "nvme":
+ nvme_controllers = [c for c in self.vm.xmlobj.devices.controller if c.type == "nvme"]
+ if len(nvme_controllers) > 0:
+ if not disk.serial:
+ disk.serial = nvme_controllers[0].serial
+ else:
+ if not disk.serial:
+ disk.serial = "0"
+ controller = DeviceController(self.conn.get_backend())
+ controller.type = "nvme"
+ controller.index = 0
+ controller.serial = disk.serial
+ disk.vmm_controller = controller
def _build_storage(self):
bus = uiutil.get_list_selection(self.widget("storage-bustype"))
@@ -1585,12 +1606,18 @@ class vmmAddHardware(vmmGObjectUI):
controller_num = [x for x in controllers if (x.type == controller_type)]
if len(controller_num) > 0:
index_new = max(int(x.index or 0) for x in controller_num) + 1
- dev.index = index_new
+ else:
+ index_new = 0
+ dev.index = index_new
dev.type = controller_type
if model and model != "none":
dev.model = model
+
+ if controller_type == DeviceController.TYPE_NVME:
+ dev.serial = str(dev.index)
+
return dev
def _build_rng(self):