[QEMU]块设备选项

-fda file
-fdb file
将文件用作软盘 0/1 映像(请参阅《系统仿真用户指南》中的“磁盘映像”一章)。
-hda file
-hdb file
-hdc file
-hdd file
将文件用作硬盘 0、1、2 或 3 映像(请参阅《系统仿真用户指南》中的“磁盘映像”一章)。
-cdrom file
使用文件作为 CD-ROM 映像(不能同时使用 和)。您可以通过使用文件名来使用主机 CD-ROM。
-hdc
-cdrom
/dev/cdrom
-blockdev option[,option[,option[,...]]]
定义新的块驱动程序节点。某些选项适用于所有块驱动程序,其他选项仅适用于特定的块驱动程序。有关通用选项和最常见块驱动程序的选项列表,请参阅下文。
期望引用另一个节点(例如 )的选项可以通过两种方式给出。您可以指定现有节点的节点名称(file=node-name),也可以内联定义一个新节点,在点之后为引用的节点添加选项(file.filename=path,file.aio=native)。
file
通过在定义块设备的参数中为属性指定其节点名称,可以将 与 创建的块驱动程序节点节点用于来宾设备。
-blockdev
drive
-device
file
引用或定义数据源块驱动程序节点(例如驱动程序节点)
file
backing
引用或定义支持文件块设备(默认取自映像文件)。允许在此处传递以禁用默认支持文件。
null
lazy-refcounts
是否启用惰性引用计数功能(开/关;默认值取自图像文件)
cache-size
L2 表和 refcount 块缓存的最大总大小(以字节为单位)(默认值:l2 缓存大小和 refcount-cache-size 之和)
l2-cache-size
L2 表高速缓存的最大大小(以字节为单位)(默认值:如果未指定高速缓存大小 - Linux 平台上为 32M,非 Linux 平台上为 8M;否则,在高速缓存大小内尽可能大,同时允许请求的或最小的 refcount 高速缓存大小)
refcount-cache-size
refcount 块缓存的最大大小(以字节为单位)(默认值:簇大小的 4 倍;或者,如果指定了缓存大小,则为其中不用于 L2 缓存的部分)
cache-clean-interval
清理 L2 中未使用的条目并引用缓存。间隔以秒为单位。在支持平台上,默认值为 600,在其他平台上为 0。将其设置为 0 将禁用此功能。
pass-discard-request
是否应将对 qcow2 设备的丢弃请求转发到数据源(开/关;默认值:如果指定了 discard=unmap,则为 on,否则关闭)
pass-discard-snapshot
当快照操作(例如删除快照)释放 qcow2 文件中的集群时,是否应发出对数据源的丢弃请求(开/关;默认:开)
pass-discard-other
是否应在释放群集的其他情况下发出对数据源的丢弃请求(开/关;默认值:关)
overlap-check
对映像的写入执行哪些重叠检查(无/常量/缓存/全部;默认值:缓存)。有关详细信息或更精细的粒度控制,请参阅 的 QAPI 文档。
blockdev-add
file
引用或定义数据源块驱动程序节点(例如驱动程序节点)
file
filename
本地文件系统中映像文件的路径
aio
指定 AIO 后端(线程/本机/io_uring,默认值:线程)
locking
指定图像文件是否使用 Linux OFD/POSIX 锁进行保护。默认设置是使用 Linux 开放文件描述符 API(如果可用),否则不应用任何锁定。(自动/开/关,默认值:自动)
driver
指定要用于给定节点的块驱动程序。
node-name
这定义了块驱动程序节点的名称,稍后将通过该节点引用该节点。该名称必须是唯一的,即它不得与不同块驱动程序节点的名称匹配,或者(如果您也使用)驱动器的ID不匹配。
-drive
如果未指定节点名称,则会自动生成节点名称。生成的节点名称不是可预测的,而是在 QEMU 调用之间更改的。对于顶层,必须指定显式节点名称。
read-only
以只读方式打开节点。来宾写入尝试将失败。
请注意,某些块驱动程序仅支持只读访问,无论是在一般情况下还是在某些配置中。在这种情况下,默认值不起作用,必须显式指定该选项。
read-only=off
auto-read-only
如果设置了,QEMU 即使在请求时也可以回退到只读用法,甚至可以根据需要在模式之间切换,例如,根据图像文件是否可写或写入用户是否附加到节点。
auto-read-only=on
read-only=off
force-share
通过强制节点利用较弱的共享访问权限来获得通常请求独占访问权限的权限,从而覆盖QEMU的映像锁定系统。当多个实例有可能打开同一个文件时(无论 QEMU 的此调用是第一个实例还是第二个实例),两个实例都必须允许共享访问,以便第二个实例成功打开文件。
启用需要 。
force-share=on
read-only=on
cache.direct
使用 可以避免主机页面缓存。这将尝试将磁盘 IO 直接执行到来宾的内存。QEMU 仍可能执行数据的内部复制。
cache.direct=on
cache.no-flush
如果您不关心主机故障的数据完整性,可以使用 。此选项告诉QEMU,它永远不需要将任何数据写入磁盘,而是可以将内容保存在缓存中。如果出现任何问题,例如主机断电,磁盘存储意外断开连接等,您的图像很可能会变得不可用。
cache.no-flush=on
discard=discard
discard 是“忽略”(或“关闭”)或“取消映射”(或“打开”)之一,并控制是否(也称为或)请求被忽略或传递给文件系统。某些计算机类型可能不支持丢弃请求。
discard
trim
unmap
detect-zeroes=detect-zeroes
detect-zeroes 为“off”、“on”或“unmap”,并允许操作系统自动将纯零写入转换为驱动程序特定的优化零写入命令。如果 discard 设置为 “unmap” 以允许将零写入转换为操作,您甚至可以选择“取消映射”。
unmap
Valid options for any block driver node:
Driver-specific options for file
这是用于访问常规文件的协议级块驱动程序。
例:
-blockdev driver=file,node-name=disk,filename=disk.img
Driver-specific options for raw
这是原始图像的图像格式块驱动程序。它通常堆叠在协议级块驱动程序(如 .)之上。
file
示例 1:
-blockdev driver=file,node-name=disk_file,filename=disk.img-blockdev driver=raw,node-name=disk,file=disk_file
示例 2:
-blockdev driver=raw,node-name=disk,file.driver=file,file.filename=disk.img
Driver-specific options for qcow2
这是 qcow2 映像的映像格式块驱动程序。它通常堆叠在协议级块驱动程序(如 .)之上。
file
示例 1:
-blockdev driver=file,node-name=my_file,filename=/tmp/disk.qcow2-blockdev driver=qcow2,node-name=hda,file=my_file,overlap-check=none,cache-size=16777216
示例 2:
-blockdev driver=qcow2,node-name=disk,file.driver=http,file.filename=http://example.com/image.qcow2
Driver-specific options for other drivers
请参阅 QMP 命令的 QAPI 文档。
blockdev-add
-drive option[,option[,option[,...]]]
定义新驱动器。这包括创建块驱动程序节点(后端)以及来宾设备,并且主要是定义相应和选项的快捷方式。
-blockdev
-device
-drive
接受 接受 接受的所有选项。此外,它还知道以下选项:-blockdev
默认情况下,使用该模式。一旦数据出现在主机页面缓存中,它就会将数据写入报告为已完成。只要来宾操作系统确保在需要时正确刷新磁盘缓存,这是安全的。如果来宾操作系统未正确处理易失性磁盘写入缓存,并且主机崩溃或断电,则来宾可能会遇到数据损坏。
cache.writeback=on
对于此类来宾,应考虑使用 。这意味着主机页面缓存将用于读取和写入数据,但只有在 QEMU 确保将每次写入刷新到磁盘之后,才会向来宾发送写入通知。请注意,这会对性能产生重大影响。
cache.writeback=off
使用该选项时,始终使用不安全的缓存。
-snapshot
读取时复制可避免重复访问相同的支持文件扇区,当支持文件通过慢速网络时非常有用。默认情况下,读取时复制处于关闭状态。
您可以使用以下命令代替:
-cdrom
qemu-system-x86_64 -drive file=file,index=2,media=cdrom
您可以使用以下命令代替 、 、 、
-hda
-hdb
-hdc
-hdd
qemu-system-x86_64 -drive file=file,index=0,media=disk qemu-system-x86_64 -drive file=file,index=1,media=disk qemu-system-x86_64 -drive file=file,index=2,media=disk qemu-system-x86_64 -drive file=file,index=3,media=disk
您可以使用 fd 集中预先打开的文件描述符打开图像:
qemu-system-x86_64 \ -add-fd fd=3,set=2,opaque="rdwr:/path/to/file" \ -add-fd fd=4,set=2,opaque="rdonly:/path/to/file" \ -drive file=/dev/fdset/2,index=0,media=disk
您可以将 CDROM 连接到 ide0 的从属位置:
qemu-system-x86_64 -drive file=file,if=ide,index=1,media=cdrom
如果未指定“file=”参数,则定义一个空驱动器:
qemu-system-x86_64 -drive if=ide,index=1,media=cdrom
您可以使用以下命令代替 、
-fda
-fdb
qemu-system-x86_64 -drive file=file,index=0,if=floppy qemu-system-x86_64 -drive file=file,index=1,if=floppy
默认情况下,接口为“ide”,索引自动递增:
qemu-system-x86_64 -drive file=a -drive file=b"
解释如下:
qemu-system-x86_64 -hda a -hdb b
file=file
此选项定义要与此驱动器一起使用的磁盘映像(请参阅《系统仿真用户指南》中的“磁盘映像”一章)。如果文件名包含逗号,则必须将其加倍(例如,“file=my,,file”才能使用文件“my,file”)。
可以使用特定于协议的 URL 指定特殊文件(如 iSCSI 设备)。有关详细信息,请参阅“设备 URL 语法”部分。
if=interface
此选项定义驱动器在接口上的哪个类型上连接。可用的类型包括:ide、scsi、sd、mtd、软盘、pflash、virtio、none。
bus=bus,unit=unit
这些选项通过定义总线编号和设备 ID 来定义驱动器的连接位置。
index=index
此选项通过使用给定接口类型的可用连接器列表中的索引来定义驱动器的连接位置。
media=media
此选项定义媒体的类型:磁盘或 CDROM。
snapshot=snapshot
快照为“开”或“关”,并控制给定驱动器的快照模式(请参阅)。
-snapshot
cache=cache
cache 为“无”、“写回”、“不安全”、“直接同步”或“直写”,并控制如何使用主机缓存来访问块数据。这是一个设置 和 选项的快捷方式(如 中所示),另外 ,它为阻止来宾设备选项提供了默认值(如 中所示)。这些模式对应于以下设置:
cache.direct
cache.no-flush
-blockdev
cache.writeback
write-cache
-device
cache.writeback
cache.direct
cache.no 齐平
写回
上
关闭
关闭
没有
上
上
关闭
直写
关闭
关闭
关闭
直接同步
关闭
上
关闭
不安全的
上
关闭
上
默认模式为 。
cache=writeback
aio=aio
aio 是“线程”、“本机”或“io_uring”,可在基于 pthread 的磁盘 I/O、本机 Linux AIO 或 Linux io_uring API 之间进行选择。
format=format
指定将使用哪种磁盘格式,而不是检测该格式。可用于指定 format=raw,以避免解释不受信任的格式标头。
werror=action,rerror=action
指定要对写入和读取错误执行的操作。有效的操作包括:“忽略”(忽略错误并尝试继续)、“停止”(暂停 QEMU)、“报告”(向来宾报告错误)、“enospc”(仅当主机磁盘已满时才暂停 QEMU;否则向来宾报告错误)。默认设置为 和 。
werror=enospc
rerror=report
copy-on-read=copy-on-read
读取时复制为“开”或“关”,并允许是否将读取支持文件扇区复制到映像文件中。
bps=b,bps_rd=r,bps_wr=w
以字节/秒为单位指定带宽限制,适用于所有请求类型或仅针对读取或写入。较小的值可能会导致来宾内部超时或挂起。磁盘的安全最小值为 2 MB/s。
bps_max=bm,bps_rd_max=rm,bps_wr_max=wm
以字节/秒为单位指定突发,适用于所有请求类型或仅用于读取或写入。突发允许来宾 I/O 暂时峰值超过限制。
iops=i,iops_rd=r,iops_wr=w
以每秒请求数为单位指定请求速率限制,适用于所有请求类型或仅针对读取或写入。
iops_max=bm,iops_rd_max=rm,iops_wr_max=wm
指定每秒请求数的突发数,适用于所有请求类型或仅针对读取或写入。突发允许来宾 I/O 暂时峰值超过限制。
iops_size=is
让请求的每个字节都算作 iops 限制目的的新请求。使用此选项可防止来宾通过发送较少但较大的请求来规避 iops 限制。
group=g
加入具有给定名称 g 的限制配额组。属于同一组的所有驱动器都一起考虑在内。使用此选项可防止来宾通过使用许多小磁盘而不是单个较大的磁盘来规避限制。
-mtdblock file
使用文件作为板载闪存映像。
-sd file
使用文件作为安全数字卡图像。
-pflash file
使用文件作为并行闪存映像。
-snapshot
写入临时文件而不是磁盘映像文件。在这种情况下,您使用的原始磁盘映像不会写回。但是,您可以通过按 C-a s 强制回写(请参阅《系统仿真用户指南》中的“磁盘映像”一章)。
-fsdev local,id=id,path=path,security_model=security_model [,writeout=writeout][,readonly=on][,fmode=fmode][,dmode=dmode] [,throttling.option=value[,throttling.option=value[,...]]]
-fsdev proxy,id=id,socket=socket[,writeout=writeout][,readonly=on]
-fsdev proxy,id=id,sock_fd=sock_fd[,writeout=writeout][,readonly=on]
-fsdev synth,id=id[,readonly=on]
定义新的文件系统设备。有效选项包括:
-fsdev 选项与 -device 驱动程序“virtio-9p-...”一起使用。
local
对文件系统的访问由 QEMU 完成。
proxy
对文件系统的访问由 virtfs-proxy-helper(1) 完成。
synth
合成文件系统,仅由 QTests 使用。
id=id
指定此设备的标识符。
path=path
指定文件系统设备的导出路径。此路径下的文件将可供来宾上的 9p 客户端使用。
security_model=security_model
指定要用于此导出路径的安全模型。支持的安全模型是“直通”、“映射 xattr”、“映射文件”和“无”。在“直通”安全模型中,文件使用与在来宾上创建的凭据相同的凭据进行存储。这要求 QEMU 以 root 身份运行。在“mapped-xattr”安全模型中,某些文件属性(如 uid、gid、模式位和链接目标)存储为文件属性。对于“映射文件”,这些属性存储在隐藏的.virtfs_metadata目录中。此安全模型导出的目录无法与其他 unix 工具交互。“none”安全模型与直通相同,只是服务器在无法设置文件属性(如所有权)时不会报告失败。安全模型仅对本地 fsdriver 是必需的。其他 fsdrivers(如代理)不将安全模型作为参数。
writeout=writeout
这是一个可选参数。唯一受支持的值是“立即”。这意味着主机页面缓存将用于读取和写入数据,但仅当数据已报告为由存储子系统写入时,才会向来宾发送写入通知。
readonly=on
允许将 9p 共享导出为来宾的只读装载。默认情况下,将授予读写访问权限。
socket=socket
使代理文件系统驱动程序能够使用传递的套接字文件与 virtfs-proxy-helper(1) 进行通信。
sock_fd=sock_fd
使代理文件系统驱动程序能够使用传递的套接字描述符与 virtfs-proxy-helper(1) 进行通信。通常,像libvirt这样的助手会创建套接字对,并将其中一个fd作为sock_fd传递。
fmode=fmode
指定主机上新创建文件的默认模式。仅适用于安全模型“mapped-xattr”和“mapped-file”。
dmode=dmode
指定主机上新创建的目录的默认模式。仅适用于安全模型“mapped-xattr”和“mapped-file”。
throttling.bps-total=b,throttling.bps-read=r,throttling.bps-write=w
以字节/秒为单位指定带宽限制,适用于所有请求类型或仅针对读取或写入。
throttling.bps-total-max=bm,bps-read-max=rm,bps-write-max=wm
以字节/秒为单位指定突发,适用于所有请求类型或仅用于读取或写入。突发允许来宾 I/O 暂时峰值超过限制。
throttling.iops-total=i,throttling.iops-read=r, throttling.iops-write=w
以每秒请求数为单位指定请求速率限制,适用于所有请求类型或仅针对读取或写入。
throttling.iops-total-max=im,throttling.iops-read-max=irm, throttling.iops-write-max=iwm
指定每秒请求数的突发数,适用于所有请求类型或仅针对读取或写入。突发允许来宾 I/O 暂时峰值超过限制。
throttling.iops-size=is
让请求的每个字节都算作 iops 限制目的的新请求。
-device virtio-9p-type,fsdev=id,mount_tag=mount_tag
virtio-9p-...驱动程序是:
type
指定要使用的变体。支持的值为“pci”、“ccw”或“设备”,具体取决于计算机类型。
fsdev=id
指定与 -fsdev 选项一起指定的 id 值。
mount_tag=mount_tag
指定来宾用来挂载此导出点的标记名称。
-virtfs local,path=path,mount_tag=mount_tag ,security_model=security_model[,writeout=writeout][,readonly=on] [,fmode=fmode][,dmode=dmode][,multidevs=multidevs]
-virtfs proxy,socket=socket,mount_tag=mount_tag [,writeout=writeout][,readonly=on]
-virtfs proxy,sock_fd=sock_fd,mount_tag=mount_tag [,writeout=writeout][,readonly=on]
-virtfs synth,mount_tag=mount_tag
定义一个新的虚拟文件系统设备,并使用 virtio-9p-device(又名 9pfs)将其公开给来宾,这实质上意味着来宾可以使用 9P 网络协议作为传递文件系统直接访问主机和来宾之间的通信,如果需要,甚至可以访问,由多个来宾同时共享。
请注意,这实际上只是其广义形式的便利快捷方式。
-virtfs
-fsdev -device virtio-9p-pci
传递文件系统选项的一般形式包括:
local
对文件系统的访问由 QEMU 完成。
proxy
对文件系统的访问由 virtfs-proxy-helper(1) 完成。
synth
合成文件系统,仅由 QTests 使用。
id=id
指定文件系统设备的标识符
path=path
指定文件系统设备的导出路径。此路径下的文件将可供来宾上的 9p 客户端使用。
security_model=security_model
指定要用于此导出路径的安全模型。支持的安全模型是“直通”、“映射 xattr”、“映射文件”和“无”。在“直通”安全模型中,文件使用与在来宾上创建的凭据相同的凭据进行存储。这要求 QEMU 以 root 身份运行。在“mapped-xattr”安全模型中,某些文件属性(如 uid、gid、模式位和链接目标)存储为文件属性。对于“映射文件”,这些属性存储在隐藏的.virtfs_metadata目录中。此安全模型导出的目录无法与其他 unix 工具交互。“none”安全模型与直通相同,只是服务器在无法设置文件属性(如所有权)时不会报告失败。安全模型仅对本地 fsdriver 是必需的。其他 fsdrivers(如代理)不将安全模型作为参数。
writeout=writeout
这是一个可选参数。唯一受支持的值是“立即”。这意味着主机页面缓存将用于读取和写入数据,但仅当数据已报告为由存储子系统写入时,才会向来宾发送写入通知。
readonly=on
允许将 9p 共享导出为来宾的只读装载。默认情况下,将授予读写访问权限。
socket=socket
使代理文件系统驱动程序能够使用传递的套接字文件与 virtfs-proxy-helper(1) 进行通信。通常,像libvirt这样的助手会创建套接字对,并将其中一个fd作为sock_fd传递。
sock_fd
使代理文件系统驱动程序能够使用传递的“sock_fd”作为套接字描述符,以便与 virtfs-proxy-helper(1) 接口。
fmode=fmode
指定主机上新创建文件的默认模式。仅适用于安全模型“mapped-xattr”和“mapped-file”。
dmode=dmode
指定主机上新创建的目录的默认模式。仅适用于安全模型“mapped-xattr”和“mapped-file”。
mount_tag=mount_tag
指定来宾用来挂载此导出点的标记名称。
multidevs=multidevs
指定如何处理使用 9p 导出共享的多个设备。支持的行为是“重新映射”、“禁止”或“警告”。后者是默认行为,其中 virtfs 9p 期望只有一个设备与相同的导出共享,如果通过相同的 9p 导出共享和访问多个设备,则主机端的 qemu 仅记录警告消息(一次)。为了避免来宾上的文件ID冲突,您应该为要与来宾共享的每个设备创建单独的 virtfs 导出(推荐方式),或者您可以使用“remap”代替,它允许您仅通过一个导出来共享多个设备,这是通过以一种防止此类冲突的方式将原始inode编号从主机重新映射到来宾来实现的。在此类用例中,需要重新映射 inode,因为来自主机的原始设备 ID 永远不会传递并在来宾上公开。相反,与 virtfs 共享的所有导出文件始终在来宾上共享相同的设备 ID。因此,具有相同inode编号但来自主机上实际不同设备的两个文件将导致文件ID冲突,从而导致来宾上的潜在不当行为。另一方面,“禁止”假设“警告”同一导出仅共享一个设备,但它不仅会记录警告消息,还会拒绝访问来宾上的其他设备。请注意,“禁止”目前不会阻止所有可能的文件访问操作(例如,readdir()仍将从其他设备返回条目)。
-iscsi
配置 iSCSI 会话参数。