以下是针对KVM虚拟化环境的详细操作流程,适用于Debian作为虚拟机场景,涵盖共享目录挂载(最常用)和物理磁盘直通两种方式:
共享目录允许宿主机与虚拟机之间共享指定文件夹,无需物理磁盘直通,适合日常文件共享需求。
virsh edit <虚拟机名称>命令进入):virsh edit Debian-VM
<devices>标签内添加以下内容(替换路径和名称):<filesystem type='mount' accessmode='mapped'>
<source dir='/home/host/share_hdd'/> <!-- 宿主机共享目录路径 -->
<target dir='hdd'/> <!-- 虚拟机内挂载点名称(自定义) -->
</filesystem>
Ctrl+X→Y→Enter)。9p内核模块(KVM共享目录依赖此模块):sudo apt update && sudo apt install linux-image-$(uname -r)-modules-extra
sudo mkdir -p /mnt/hdd
sudo mount -t 9p -o trans=virtio,version=9p2000.L hdd /mnt/hdd
df -h | grep hdd # 应显示共享目录已挂载
/etc/fstab文件:sudo nano /etc/fstab
添加以下行(关键参数说明:trans=virtio指定传输协议,version=9p2000.L兼容性更好):hdd /mnt/hdd 9p trans=virtio,version=9p2000.L 0 0
mnt-hdd.mount单元的依赖顺序(编辑/etc/systemd/system/mnt-hdd.mount):[Unit]
Description=Mount hdd
Requires=kmod.service # 确保9p模块先加载
After=kmod.service
保存后重新加载systemd配置:sudo systemctl daemon-reload
若虚拟机内用户无法访问共享目录,可将当前用户加入kvm组(KVM相关进程所属组):
sudo usermod -aG kvm $(whoami)
sudo reboot # 重启生效
若宿主机有额外物理磁盘,可通过PCIe直通或磁盘直通方式让虚拟机直接访问,适合需要高IO性能的场景(如数据库、NAS)。
virsh edit Debian-VM
<devices>标签内添加<disk>节点(替换/dev/sdb为宿主机磁盘路径):<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/sdb'/> <!-- 宿主机物理磁盘路径 -->
<target dev='vdb' bus='virtio'/> <!-- 虚拟机内磁盘设备名(如vdb) -->
</disk>
sudo fdisk -l # 应识别到/dev/vdb(或对应设备名)
sudo fdisk /dev/vdb # 按提示创建分区(如/dev/vdb1)
sudo mkfs.ext4 /dev/vdb1 # 格式化分区
sudo mkdir /mnt/direct_disk
sudo mount /dev/vdb1 /mnt/direct_disk
blkid获取UUID更可靠):sudo blkid /dev/vdb1 # 获取UUID
sudo nano /etc/fstab
添加以下行(替换为实际UUID):UUID=1234-5678-90AB-CDEF /mnt/direct_disk ext4 defaults 0 0
trans=virtio+cache=loose参数,但需注意数据一致性。chmod 777 /home/host/share_hdd临时测试)或虚拟机内用户组(如kvm组)。以上步骤覆盖了Debian虚拟机挂载宿主机磁盘的常见场景,可根据实际需求选择合适的方式。