proxmox / alter default create vm parameters
The Proxmox Virtual Environment has defaults when creating a new VM, but it has no option to change those defaults. Here's a quick example of hacking in some defaults.
Why? (Changing SCSI controller does not change existing disks)
In the next post I wanted to talk about /dev/disk/by-id
and why disks
that use the VirtIO SCSI controller do not show up there. A confusing
matter in this situation was that creating a VM disk using a different
SCSI controller and then switching does not change the storage driver
for the existing disks completely!
If you're on Proxmox VE 6.x (observed with 6.1 and 6.3) and you
create a VM with the VirtIO SCSI controller, your virtual machine
parameters may look like this, and you get a /dev/vda
device inside
your QEMU VM:
/usr/bin/kvm \
...
-device virtio-blk-pci,drive=drive-virtio0,id=virtio0,bus=pci.0,addr=0xa \
-drive file=/dev/zvol/somedisk/vm-NNN-disk-0,if=none,id=drive-virtio0,format=raw
But if you create it with the (default) LSI 53C895A SCSI controller
first, and then switch to VirtIO SCSI, you still keep the (ATA)
/dev/sda
block device name. The VM is started with these command
line arguments:
/usr/bin/kvm \
...
-device virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5 \
-drive file=/dev/zvol/somedisk/vm-NNN-disk-0,if=none,id=drive-scsi0,format=raw \
-device scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0
If you look at the configuration in /etc/pve/qemu-server/NNN.conf
,
both would have:
scsihw: virtio-scsi-pci
But the disk configuration type/name is different:
virtio0: somedisk:vm-NNN-disk-0,size=32G
vs.
scsi0: somedisk:vm-NNN-disk-0,size=32G
This virtio-scsi-pci
+ scsi0
is turned into
-device virtio-scsi-pci
flags.
While virtio-scsi-pci
+ virtio0
translates to
-device virtio-blk-pci
.
It's not a bad thing though, that it does not change from scsi0
to
virtio0
. After all, if the device did change from /dev/sda
to
/dev/vda
, your boot procedure and mounts might be impacted. But it
does mean that you want the VirtIO SCSI option selected before you
create any disks.
How? (Hacking defaults into pvemanagerlib.js)
In the pve-manager package, there's a
/usr/share/pve-manager/js/pvemanagerlib.js
that controls much of the
user interface. Altering the default appears to be a matter of:
--- /usr/share/pve-manager/js/pvemanagerlib.js
+++ /usr/share/pve-manager/js/pvemanagerlib.js
@@ -21771,7 +21771,7 @@ Ext.define('PVE.qemu.OSDefaults', {
scsi: 2,
virtio: 1
},
- scsihw: ''
+ scsihw: 'virtio-scsi-pci'
};
// virtio-net is in kernel since 2.6.25
For bonus points, we can disable the firewall default, which we manage elsewhere anyway:
--- /usr/share/pve-manager/js/pvemanagerlib.js
+++ /usr/share/pve-manager/js/pvemanagerlib.js
@@ -22434,7 +22434,7 @@ Ext.define('PVE.qemu.NetworkInputPanel',
xtype: 'proxmoxcheckbox',
fieldLabel: gettext('Firewall'),
name: 'firewall',
- checked: (me.insideWizard || me.isCreate)
+ checked: false
}
];
@@ -27909,7 +27909,7 @@ Ext.define('PVE.lxc.NetworkInputPanel',
cdata.name = 'eth0';
me.dataCache = {};
}
- cdata.firewall = (me.insideWizard || me.isCreate);
+ cdata.firewall = false;
if (!me.dataCache) {
throw "no dataCache specified";
Of course these changes will get wiped whenever you update Proxmox VE. Keeping your hacks active will be an exercise for the reader.