mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-03 15:43:51 +00:00
qemu: Fix detection of drive readonly option
So far, readonly=on option is used when qemu supports -device. However, there are qemu versions which support readonly option with -drive although they don't have support for -device.
This commit is contained in:
parent
f3f7a87d03
commit
69b7552154
@ -1187,6 +1187,8 @@ static unsigned long long qemudComputeCmdFlags(const char *help,
|
|||||||
flags |= QEMUD_CMD_FLAG_DRIVE_CACHE_V2;
|
flags |= QEMUD_CMD_FLAG_DRIVE_CACHE_V2;
|
||||||
if (strstr(help, "format="))
|
if (strstr(help, "format="))
|
||||||
flags |= QEMUD_CMD_FLAG_DRIVE_FORMAT;
|
flags |= QEMUD_CMD_FLAG_DRIVE_FORMAT;
|
||||||
|
if (strstr(help, "readonly="))
|
||||||
|
flags |= QEMUD_CMD_FLAG_DRIVE_READONLY;
|
||||||
}
|
}
|
||||||
if (strstr(help, "-vga") && !strstr(help, "-std-vga"))
|
if (strstr(help, "-vga") && !strstr(help, "-std-vga"))
|
||||||
flags |= QEMUD_CMD_FLAG_VGA;
|
flags |= QEMUD_CMD_FLAG_VGA;
|
||||||
@ -1202,8 +1204,14 @@ static unsigned long long qemudComputeCmdFlags(const char *help,
|
|||||||
flags |= QEMUD_CMD_FLAG_CHARDEV;
|
flags |= QEMUD_CMD_FLAG_CHARDEV;
|
||||||
if (strstr(help, "-balloon"))
|
if (strstr(help, "-balloon"))
|
||||||
flags |= QEMUD_CMD_FLAG_BALLOON;
|
flags |= QEMUD_CMD_FLAG_BALLOON;
|
||||||
if (strstr(help, "-device"))
|
if (strstr(help, "-device")) {
|
||||||
flags |= QEMUD_CMD_FLAG_DEVICE;
|
flags |= QEMUD_CMD_FLAG_DEVICE;
|
||||||
|
/*
|
||||||
|
* When -device was introduced, qemu already supported drive's
|
||||||
|
* readonly option but didn't advertise that.
|
||||||
|
*/
|
||||||
|
flags |= QEMUD_CMD_FLAG_DRIVE_READONLY;
|
||||||
|
}
|
||||||
if (strstr(help, "-nodefconfig"))
|
if (strstr(help, "-nodefconfig"))
|
||||||
flags |= QEMUD_CMD_FLAG_NODEFCONFIG;
|
flags |= QEMUD_CMD_FLAG_NODEFCONFIG;
|
||||||
/* The trailing ' ' is important to avoid a bogus match */
|
/* The trailing ' ' is important to avoid a bogus match */
|
||||||
@ -2688,7 +2696,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
|
|||||||
disk->bus != VIR_DOMAIN_DISK_BUS_IDE)
|
disk->bus != VIR_DOMAIN_DISK_BUS_IDE)
|
||||||
virBufferAddLit(&opt, ",boot=on");
|
virBufferAddLit(&opt, ",boot=on");
|
||||||
if (disk->readonly &&
|
if (disk->readonly &&
|
||||||
qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)
|
qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_READONLY)
|
||||||
virBufferAddLit(&opt, ",readonly=on");
|
virBufferAddLit(&opt, ",readonly=on");
|
||||||
if (disk->driverType && *disk->driverType != '\0' &&
|
if (disk->driverType && *disk->driverType != '\0' &&
|
||||||
disk->type != VIR_DOMAIN_DISK_TYPE_DIR &&
|
disk->type != VIR_DOMAIN_DISK_TYPE_DIR &&
|
||||||
|
@ -96,6 +96,7 @@ enum qemud_cmd_flags {
|
|||||||
QEMUD_CMD_FLAG_FSDEV = (1LL << 40), /* -fstype filesystem passthrough */
|
QEMUD_CMD_FLAG_FSDEV = (1LL << 40), /* -fstype filesystem passthrough */
|
||||||
QEMUD_CMD_FLAG_NESTING = (1LL << 41), /* -enable-nesting (SVM/VMX) */
|
QEMUD_CMD_FLAG_NESTING = (1LL << 41), /* -enable-nesting (SVM/VMX) */
|
||||||
QEMUD_CMD_FLAG_NAME_PROCESS = (1LL << 42), /* Is -name process= available */
|
QEMUD_CMD_FLAG_NAME_PROCESS = (1LL << 42), /* Is -name process= available */
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_READONLY = (1LL << 43), /* -drive readonly=on|off */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Main driver state */
|
/* Main driver state */
|
||||||
|
141
tests/qemuhelpdata/kvm-83-rhel56
Normal file
141
tests/qemuhelpdata/kvm-83-rhel56
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
QEMU PC emulator version 0.9.1 (kvm-83-maint-snapshot-20090205), Copyright (c) 2003-2008 Fabrice Bellard
|
||||||
|
usage: qemu [options] [disk_image]
|
||||||
|
|
||||||
|
'disk_image' is a raw hard image image for IDE hard disk 0
|
||||||
|
|
||||||
|
Standard options:
|
||||||
|
-M machine select emulated machine (-M ? for list)
|
||||||
|
-cpu cpu select CPU (-cpu ? for list)
|
||||||
|
-fda/-fdb file use 'file' as floppy disk 0/1 image
|
||||||
|
-hda/-hdb file use 'file' as IDE hard disk 0/1 image
|
||||||
|
-hdc/-hdd file use 'file' as IDE hard disk 2/3 image
|
||||||
|
-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)
|
||||||
|
-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
|
||||||
|
[,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
|
||||||
|
[,cache=writethrough|writeback|none|unsafe][,format=f][,serial=s]
|
||||||
|
[,boot=on|off][,readonly=on|off]
|
||||||
|
use 'file' as a drive image
|
||||||
|
-mtdblock file use 'file' as on-board Flash memory image
|
||||||
|
-sd file use 'file' as SecureDigital card image
|
||||||
|
-pflash file use 'file' as a parallel flash image
|
||||||
|
-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)
|
||||||
|
-snapshot write to temporary files instead of disk image files
|
||||||
|
-no-frame open SDL window without a frame and window decorations
|
||||||
|
-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
|
||||||
|
-no-quit disable SDL window close capability
|
||||||
|
-no-fd-bootchk disable boot signature checking for floppy disks
|
||||||
|
-m megs set virtual RAM size to megs MB [default=128]
|
||||||
|
-smp n set the number of CPUs to 'n' [default=1]
|
||||||
|
-nographic disable graphical output and redirect serial I/Os to console
|
||||||
|
-portrait rotate graphical output 90 deg left (only PXA LCD)
|
||||||
|
-k language use keyboard layout (for example "fr" for French)
|
||||||
|
-audio-help print list of audio drivers and their options
|
||||||
|
-soundhw c1,... enable audio support
|
||||||
|
and only specified sound cards (comma separated list)
|
||||||
|
use -soundhw ? to get the list of supported cards
|
||||||
|
use -soundhw all to enable all of them
|
||||||
|
-vga [std|cirrus]
|
||||||
|
select video card type
|
||||||
|
-localtime set the real time clock to local time [default=utc]
|
||||||
|
-full-screen start in full screen
|
||||||
|
-win2k-hack use it when installing Windows 2000 to avoid a disk full bug
|
||||||
|
-rtc-td-hack use it to fix time drift in Windows ACPI HAL
|
||||||
|
-usb enable the USB driver (will be the default soon)
|
||||||
|
-usbdevice name add the host or guest USB device 'name'
|
||||||
|
-name string set the name of the guest
|
||||||
|
-uuid %08x-%04x-%04x-%04x-%012x specify machine UUID
|
||||||
|
-notify event enable async-notifications for event
|
||||||
|
-qxl <num>[,ram=megs]
|
||||||
|
use 'num' qxl display devices, each with RAM size of 'megs' MB
|
||||||
|
[default=64]
|
||||||
|
-spice <args> use spice
|
||||||
|
-spice-help show spice usage
|
||||||
|
|
||||||
|
Network options:
|
||||||
|
-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str]
|
||||||
|
create a new Network Interface Card and connect it to VLAN 'n'
|
||||||
|
-net user[,vlan=n][,name=str][,hostname=host]
|
||||||
|
connect the user mode network stack to VLAN 'n' and send
|
||||||
|
hostname 'host' to DHCP clients
|
||||||
|
-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile]
|
||||||
|
connect the host TAP network interface to VLAN 'n' and use the
|
||||||
|
network scripts 'file' (default=/etc/qemu-ifup)
|
||||||
|
and 'dfile' (default=/etc/qemu-ifdown);
|
||||||
|
use '[down]script=no' to disable script execution;
|
||||||
|
use 'fd=h' to connect to an already opened TAP interface
|
||||||
|
-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]
|
||||||
|
connect the vlan 'n' to another VLAN using a socket connection
|
||||||
|
-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]
|
||||||
|
connect the vlan 'n' to multicast maddr and port
|
||||||
|
-net none use it alone to have zero network devices; if no -net option
|
||||||
|
is provided, the default is '-net nic -net user'
|
||||||
|
|
||||||
|
-tftp dir allow tftp access to files in dir [-net user]
|
||||||
|
-bootp file advertise file in BOOTP replies
|
||||||
|
-redir [tcp|udp]:host-port:[guest-host]:guest-port
|
||||||
|
redirect TCP or UDP connections from host to guest [-net user]
|
||||||
|
|
||||||
|
Linux boot specific:
|
||||||
|
-kernel bzImage use 'bzImage' as kernel image
|
||||||
|
-append cmdline use 'cmdline' as kernel command line
|
||||||
|
-initrd file use 'file' as initial ram disk
|
||||||
|
|
||||||
|
Debug/Expert options:
|
||||||
|
-monitor dev redirect the monitor to char device 'dev'
|
||||||
|
-vmchannel di:DI,dev redirect the hypercall device with device id DI, to char device 'dev'
|
||||||
|
-serial dev redirect the serial port to char device 'dev'
|
||||||
|
-parallel dev redirect the parallel port to char device 'dev'
|
||||||
|
-pidfile file Write PID to 'file'
|
||||||
|
-S freeze CPU at startup (use 'c' to start execution)
|
||||||
|
-s wait gdb connection to port
|
||||||
|
-p port set gdb connection port [default=1234]
|
||||||
|
-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items)
|
||||||
|
-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS
|
||||||
|
translation (t=none or lba) (usually qemu can guess them)
|
||||||
|
-L path set the directory for the BIOS, VGA BIOS and keymaps
|
||||||
|
-no-kvm disable KVM hardware virtualization
|
||||||
|
-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC
|
||||||
|
-no-kvm-pit disable KVM kernel mode PIT
|
||||||
|
-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection
|
||||||
|
-pcidevice host=bus:dev.func[,dma=none][,name=string]
|
||||||
|
expose a PCI device to the guest OS.
|
||||||
|
dma=none: don't perform any dma translations (default is to use an iommu)
|
||||||
|
'string' is used in log output.
|
||||||
|
-no-acpi disable ACPI
|
||||||
|
-no-hpet disable HPET
|
||||||
|
-balloon none disable balloon device
|
||||||
|
-balloon virtio
|
||||||
|
enable virtio balloon device (default)
|
||||||
|
-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...]
|
||||||
|
ACPI table description
|
||||||
|
-smbios file=binary
|
||||||
|
Load SMBIOS entry from binary file
|
||||||
|
-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]
|
||||||
|
Specify SMBIOS type 0 fields
|
||||||
|
-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]
|
||||||
|
[,uuid=uuid][,sku=str][,family=str]
|
||||||
|
Specify SMBIOS type 1 fields
|
||||||
|
-no-reboot exit instead of rebooting
|
||||||
|
-no-shutdown stop before shutdown
|
||||||
|
-loadvm [tag|id] start right away with a saved state (loadvm in monitor)
|
||||||
|
-vnc display start a VNC server on display
|
||||||
|
-daemonize daemonize QEMU after initializing
|
||||||
|
-tdf inject timer interrupts that got lost
|
||||||
|
-kvm-shadow-memory megs set the amount of shadow pages to be allocated
|
||||||
|
-mem-path set the path to hugetlbfs/tmpfs mounted directory, also
|
||||||
|
enables allocation of guest memory with huge pages
|
||||||
|
-mem-prealloc toggles preallocation of -mem-path backed physical memory
|
||||||
|
at startup. Default is enabled.
|
||||||
|
-option-rom rom load a file, rom, into the option ROM space
|
||||||
|
-clock force the use of the given methods for timer alarm.
|
||||||
|
To see what timers are available use -clock ?
|
||||||
|
-startdate select initial date of the clock
|
||||||
|
-icount [N|auto]
|
||||||
|
Enable virtual instruction counter with 2^N clock ticks per instruction
|
||||||
|
|
||||||
|
During emulation, the following keys are useful:
|
||||||
|
ctrl-alt-f toggle full screen
|
||||||
|
ctrl-alt-n switch to virtual console 'n'
|
||||||
|
ctrl-alt toggle mouse and keyboard grab
|
||||||
|
|
||||||
|
When using -nographic, press 'ctrl-a h' to get some help.
|
@ -130,6 +130,30 @@ mymain(int argc, char **argv)
|
|||||||
QEMUD_CMD_FLAG_MEM_PATH |
|
QEMUD_CMD_FLAG_MEM_PATH |
|
||||||
QEMUD_CMD_FLAG_TDF,
|
QEMUD_CMD_FLAG_TDF,
|
||||||
9001, 1, 74);
|
9001, 1, 74);
|
||||||
|
DO_TEST("kvm-83-rhel56",
|
||||||
|
QEMUD_CMD_FLAG_VNC_COLON |
|
||||||
|
QEMUD_CMD_FLAG_NO_REBOOT |
|
||||||
|
QEMUD_CMD_FLAG_DRIVE |
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_BOOT |
|
||||||
|
QEMUD_CMD_FLAG_NAME |
|
||||||
|
QEMUD_CMD_FLAG_UUID |
|
||||||
|
QEMUD_CMD_FLAG_VNET_HDR |
|
||||||
|
QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP |
|
||||||
|
QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC |
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_CACHE_V2 |
|
||||||
|
QEMUD_CMD_FLAG_KVM |
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_FORMAT |
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_SERIAL |
|
||||||
|
QEMUD_CMD_FLAG_VGA |
|
||||||
|
QEMUD_CMD_FLAG_PCIDEVICE |
|
||||||
|
QEMUD_CMD_FLAG_MEM_PATH |
|
||||||
|
QEMUD_CMD_FLAG_BALLOON |
|
||||||
|
QEMUD_CMD_FLAG_RTC_TD_HACK |
|
||||||
|
QEMUD_CMD_FLAG_NO_HPET |
|
||||||
|
QEMUD_CMD_FLAG_NO_KVM_PIT |
|
||||||
|
QEMUD_CMD_FLAG_TDF |
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_READONLY,
|
||||||
|
9001, 1, 83);
|
||||||
DO_TEST("qemu-0.10.5",
|
DO_TEST("qemu-0.10.5",
|
||||||
QEMUD_CMD_FLAG_KQEMU |
|
QEMUD_CMD_FLAG_KQEMU |
|
||||||
QEMUD_CMD_FLAG_VNC_COLON |
|
QEMUD_CMD_FLAG_VNC_COLON |
|
||||||
@ -238,6 +262,7 @@ mymain(int argc, char **argv)
|
|||||||
QEMUD_CMD_FLAG_DRIVE_CACHE_V2 |
|
QEMUD_CMD_FLAG_DRIVE_CACHE_V2 |
|
||||||
QEMUD_CMD_FLAG_DRIVE_FORMAT |
|
QEMUD_CMD_FLAG_DRIVE_FORMAT |
|
||||||
QEMUD_CMD_FLAG_DRIVE_SERIAL |
|
QEMUD_CMD_FLAG_DRIVE_SERIAL |
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_READONLY |
|
||||||
QEMUD_CMD_FLAG_VGA |
|
QEMUD_CMD_FLAG_VGA |
|
||||||
QEMUD_CMD_FLAG_0_10 |
|
QEMUD_CMD_FLAG_0_10 |
|
||||||
QEMUD_CMD_FLAG_ENABLE_KVM |
|
QEMUD_CMD_FLAG_ENABLE_KVM |
|
||||||
@ -267,6 +292,7 @@ mymain(int argc, char **argv)
|
|||||||
QEMUD_CMD_FLAG_KVM |
|
QEMUD_CMD_FLAG_KVM |
|
||||||
QEMUD_CMD_FLAG_DRIVE_FORMAT |
|
QEMUD_CMD_FLAG_DRIVE_FORMAT |
|
||||||
QEMUD_CMD_FLAG_DRIVE_SERIAL |
|
QEMUD_CMD_FLAG_DRIVE_SERIAL |
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_READONLY |
|
||||||
QEMUD_CMD_FLAG_VGA |
|
QEMUD_CMD_FLAG_VGA |
|
||||||
QEMUD_CMD_FLAG_0_10 |
|
QEMUD_CMD_FLAG_0_10 |
|
||||||
QEMUD_CMD_FLAG_PCIDEVICE |
|
QEMUD_CMD_FLAG_PCIDEVICE |
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -drive file=/dev/HostVG/QEMUGuest1,if=ide,bus=0,unit=0 -drive file=/dev/sr0,if=ide,media=cdrom,bus=1,unit=0,readonly=on -net none -serial none -parallel none -usb
|
@ -0,0 +1,31 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory>219200</memory>
|
||||||
|
<currentMemory>219200</currentMemory>
|
||||||
|
<vcpu>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
|
<disk type='block' device='disk'>
|
||||||
|
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||||
|
<target dev='hda' bus='ide'/>
|
||||||
|
<address type='drive' controller='0' bus='0' unit='0'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='block' device='cdrom'>
|
||||||
|
<source dev='/dev/sr0'/>
|
||||||
|
<target dev='hdc' bus='ide'/>
|
||||||
|
<readonly/>
|
||||||
|
<address type='drive' controller='0' bus='1' unit='0'/>
|
||||||
|
</disk>
|
||||||
|
<controller type='ide' index='0'/>
|
||||||
|
<memballoon model='virtio'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
@ -276,7 +276,10 @@ mymain(int argc, char **argv)
|
|||||||
DO_TEST("disk-drive-fat", QEMUD_CMD_FLAG_DRIVE |
|
DO_TEST("disk-drive-fat", QEMUD_CMD_FLAG_DRIVE |
|
||||||
QEMUD_CMD_FLAG_DRIVE_BOOT | QEMUD_CMD_FLAG_DRIVE_FORMAT, false);
|
QEMUD_CMD_FLAG_DRIVE_BOOT | QEMUD_CMD_FLAG_DRIVE_FORMAT, false);
|
||||||
DO_TEST("disk-drive-readonly-disk", QEMUD_CMD_FLAG_DRIVE |
|
DO_TEST("disk-drive-readonly-disk", QEMUD_CMD_FLAG_DRIVE |
|
||||||
QEMUD_CMD_FLAG_DEVICE | QEMUD_CMD_FLAG_NODEFCONFIG, false);
|
QEMUD_CMD_FLAG_DRIVE_READONLY | QEMUD_CMD_FLAG_DEVICE |
|
||||||
|
QEMUD_CMD_FLAG_NODEFCONFIG, false);
|
||||||
|
DO_TEST("disk-drive-readonly-no-device", QEMUD_CMD_FLAG_DRIVE |
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_READONLY | QEMUD_CMD_FLAG_NODEFCONFIG, false);
|
||||||
DO_TEST("disk-drive-fmt-qcow", QEMUD_CMD_FLAG_DRIVE |
|
DO_TEST("disk-drive-fmt-qcow", QEMUD_CMD_FLAG_DRIVE |
|
||||||
QEMUD_CMD_FLAG_DRIVE_BOOT | QEMUD_CMD_FLAG_DRIVE_FORMAT, false);
|
QEMUD_CMD_FLAG_DRIVE_BOOT | QEMUD_CMD_FLAG_DRIVE_FORMAT, false);
|
||||||
DO_TEST("disk-drive-shared", QEMUD_CMD_FLAG_DRIVE |
|
DO_TEST("disk-drive-shared", QEMUD_CMD_FLAG_DRIVE |
|
||||||
|
Loading…
x
Reference in New Issue
Block a user