plugin: qemu block device: add hints option and EFI disk hint
For '-drive', qemu-server sets special cache options for EFI disk using RBD. In preparation to seamlessly switch to the new '-blockdev' interface, do the same here. Note that the issue from bug #3329, which is solved by these cache options, still affects current versions. With -blockdev, the cache options are split up. While cache.direct and cache.no-flush can be set in the -blockdev options, cache.writeback is a front-end property and was intentionally removed from the -blockdev options by QEMU commit aaa436f998 ("block: Remove cache.writeback from blockdev-add"). It needs to be configured as the 'write-cache' property for the ide-hd/scsi-hd/virtio-blk device. The default is already 'writeback' and no cache mode can be set for an EFI drive configuration in Proxmox VE currently, so there will not be a clash. ┌─────────────┬─────────────────┬──────────────┬────────────────┐ │ │ cache.writeback │ cache.direct │ cache.no-flush │ ├─────────────┼─────────────────┼──────────────┼────────────────┤ │writeback │ on │ off │ off │ ├─────────────┼─────────────────┼──────────────┼────────────────┤ │none │ on │ on │ off │ ├─────────────┼─────────────────┼──────────────┼────────────────┤ │writethrough │ off │ off │ off │ ├─────────────┼─────────────────┼──────────────┼────────────────┤ │directsync │ off │ on │ off │ ├─────────────┼─────────────────┼──────────────┼────────────────┤ │unsafe │ on │ off │ on │ └─────────────┴─────────────────┴──────────────┴────────────────┘ Table from 'man kvm'. Alternatively, the option could only be set once when allocating the RBD volume. However, then we would need to detect all cases were a volume could potentially be used as an EFI disk later. Having a custom disk type would help a lot there. The approach here was chosen as it is catch-all and should not be too costly either. Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
This commit is contained in:
committed by
Fabian Grünbichler
parent
f9c390bdfd
commit
590fb76238
@ -1965,7 +1965,7 @@ sub rename_volume {
|
||||
|
||||
=head3 qemu_blockdev_options
|
||||
|
||||
$blockdev = $plugin->qemu_blockdev_options($scfg, $storeid, $volname)
|
||||
$blockdev = $plugin->qemu_blockdev_options($scfg, $storeid, $volname, $options)
|
||||
|
||||
Returns a hash reference with the basic options needed to open the volume via QEMU's C<-blockdev>
|
||||
API. This at least requires a C<< $blockdev->{driver} >> and a reference to the image, e.g.
|
||||
@ -1992,12 +1992,31 @@ Arguments:
|
||||
|
||||
=item C<$volume>: The volume name.
|
||||
|
||||
=item C<$options>: A hash reference with additional options.
|
||||
|
||||
=over
|
||||
|
||||
=item C<< $options->{hints} >>: A hash reference with hints indicating what the volume will be used
|
||||
for. This can be safely ignored if no concrete issues are known with your plugin. For certain use
|
||||
cases, setting additional (plugin-specific) options might be very beneficial however. An example is
|
||||
setting the correct cache options for an EFI disk on RBD. The list of hints might get expanded in
|
||||
the future.
|
||||
|
||||
=over
|
||||
|
||||
=item C<< $options->{hints}->{'efi-disk'} >>: (optional) If set, the volume will be used as the EFI
|
||||
disk of a VM, containing its OMVF variables.
|
||||
|
||||
=back
|
||||
|
||||
=back
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub qemu_blockdev_options {
|
||||
my ($class, $scfg, $storeid, $volname) = @_;
|
||||
my ($class, $scfg, $storeid, $volname, $options) = @_;
|
||||
|
||||
my $blockdev = {};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user