在 QEMU 中挂载本地磁盘并提供读写权限
QEMU 支持将主机上的磁盘、目录或 ISO 镜像挂载到虚拟机,并可以提供读写权限。本文将介绍几种常见的方式来实现这一目标。
1. 挂载本地磁盘分区到虚拟机
要将本地磁盘分区(如 /dev/sda1
)挂载到虚拟机,可以使用 -drive
选项。
示例命令
qemu-system-i386 -hda linux32.qcow2 -m 1024 -drive file=/dev/sda1,format=raw,if=virtio
参数解释
file=/dev/sda1
: 指定你要挂载的本地磁盘分区(例如/dev/sda1
)。format=raw
: 指定本地磁盘的格式为原始格式。if=virtio
: 使用 Virtio 磁盘接口以获得更高的性能。
注意:直接挂载本地磁盘时需要使用 root 权限,并要小心操作以防止数据损坏。
2. 挂载本地目录作为虚拟磁盘 (VirtFS)
QEMU 提供了 VirtFS(Virtual File System)功能,它允许将本地目录挂载到虚拟机中,并提供读写权限。
2.1 启动 QEMU 并挂载本地目录
假设你要将主机上的目录 /path/to/share
挂载到虚拟机的 /mnt/shared
目录,可以使用以下命令:
qemu-system-i386 -hda linux32.qcow2 -m 1024 \
-virtfs local,id=shared_folder,path=/path/to/share,security_model=mapped,mount_tag=host_share
参数解释
-virtfs local
: 启用 VirtFS。id=shared_folder
: 设置 VirtFS 设备的标识符。path=/path/to/share
: 主机上要共享的本地目录路径。security_model=mapped
: 使用mapped
安全模型,允许虚拟机用户映射到主机用户,并提供读写权限。mount_tag=host_share
: 设置在虚拟机中挂载时使用的标记。
2.2 在虚拟机中挂载目录
在虚拟机中启动后,使用以下命令挂载共享目录:
sudo mount -t 9p -o trans=virtio host_share /mnt/shared
参数解释
-t 9p
: 使用 9p 文件系统挂载。trans=virtio
: 使用 Virtio 作为传输方式。host_share
: 这是在 QEMU 启动时定义的mount_tag
。/mnt/shared
: 虚拟机中要挂载的目标目录。
3. 挂载本地 ISO 镜像并提供读写权限
如果你想挂载一个本地的 ISO 镜像作为虚拟机的磁盘,可以使用如下命令:
qemu-system-i386 -hda linux32.qcow2 -m 1024 -cdrom /path/to/disk.iso
ISO 镜像读写问题
ISO 镜像通常是只读的。如果需要读写功能,可以将 ISO 镜像的内容提取到虚拟磁盘文件中,使用类似 qcow2
格式并允许读写。
创建并挂载可读写的虚拟磁盘
首先,创建一个可读写的虚拟磁盘:
qemu-img create -f qcow2 writable_disk.qcow2 5G
然后,挂载该磁盘到虚拟机:
qemu-system-i386 -hda linux32.qcow2 -m 1024 -drive file=writable_disk.qcow2,format=qcow2
小结
- 挂载本地磁盘:使用
-drive file=/dev/sdX
来将本地磁盘分区映射到虚拟机。 - 挂载本地目录:使用 VirtFS 功能通过
-virtfs
来挂载本地目录,并在虚拟机中使用9p
协议挂载。 - 挂载本地 ISO 镜像:可以通过
-cdrom
来加载 ISO 镜像,但这是只读的。如需读写,建议使用虚拟磁盘文件。
通过以上方式,你可以根据需要在虚拟机中访问并使用主机的存储资源,并提供读写权限。