KVM虚拟机如何添加物理硬盘?

在KVM虚拟机上添加物理硬盘需三步:首先准备并分区物理磁盘;其次编辑虚拟机XML配置文件,添加该物理盘作为存储设备;最后启动虚拟机并挂载新硬盘到指定目录即可使用,无需重启宿主机。

KVM虚拟机添加物理磁盘详细指南

为KVM虚拟机扩展存储容量,直接挂载物理磁盘(或分区/LVM卷)是提升性能和隔离性的高效方式,以下提供多种经过验证的可靠方案,请根据环境谨慎选择并操作。

KVM虚拟机如何添加物理硬盘?

🔧 方案一:LVM物理卷 (推荐:灵活管理)

适用于已使用或计划使用LVM的宿主机环境。

  1. 🔒 准备物理磁盘

    • 将新物理磁盘插入服务器,或确认已连接但未使用的磁盘(如 /dev/sdb)。
    • 使用 lsblk -ffdisk -l 确认磁盘设备路径和状态(无重要分区/数据)。
    • (关键) 备份磁盘数据,后续操作将清空磁盘
  2. ⚙️ 创建LVM物理卷 (PV)

    • 在宿主机终端执行:
      sudo pvcreate /dev/sdX  # 替换 /dev/sdX 为你的磁盘设备名,如 /dev/sdb
    • 验证创建:sudo pvs
  3. 📦 扩展或创建卷组 (VG)

    • 扩展现有VG (如 vg0):
      sudo vgextend vg0 /dev/sdX
    • 创建新VG (如 new_vg):
      sudo vgcreate new_vg /dev/sdX
    • 验证:sudo vgs
  4. 💾 创建逻辑卷 (LV)

    • 在目标VG中创建LV (如 new_lv):
      sudo lvcreate -n new_lv -L 100G new_vg  # 创建100G的LV
    • 验证:sudo lvs
  5. 🔗 将LV作为存储附加给虚拟机

    • 编辑虚拟机配置文件(通常位于 /etc/libvirt/qemu/vm-name.xml):
      sudo virsh edit vm-name
    • <devices> 部分添加新磁盘设备配置:
      <disk type='block' device='disk'>
        <driver name='qemu' type='raw' cache='none' io='native'/> <!-- 根据性能需求调整cache/io -->
        <source dev='/dev/new_vg/new_lv'/> <!-- 替换为你的VG/LV路径 -->
        <target dev='vdb' bus='virtio'/>   <!-- 虚拟机内看到的设备名 (如 vdb, vdc) -->
        <address type='pci' domain='0x0000' bus='0x00' slot='0x0X' function='0x0'/> <!-- 通常libvirt会自动生成 -->
      </disk>
    • 保存退出(:wq in vi)。
  6. 🔄 启动/重启虚拟机

    • 启动虚拟机或使其配置生效:
      sudo virsh start vm-name   # 如果未运行
      sudo virsh reboot vm-name  # 或重启已运行的
  7. 🖥️ 虚拟机内部操作

    • 登录虚拟机,使用 lsblkfdisk -l 查看新磁盘(如 /dev/vdb)。
    • (重要) 分区、格式化并挂载:
      sudo fdisk /dev/vdb   # 创建分区 (可选,也可用整个磁盘)
      sudo mkfs.ext4 /dev/vdb1  # 格式化分区 (示例ext4)
      sudo mkdir /mnt/newdisk
      sudo mount /dev/vdb1 /mnt/newdisk
    • 如需永久挂载,编辑 /etc/fstab 添加条目。

⚙ 方案二:裸磁盘/分区映射 (直接高效)

将物理磁盘或单个分区直接映射给虚拟机,性能最佳。

KVM虚拟机如何添加物理硬盘?

  1. 🔒 准备物理磁盘/分区

    • 插入磁盘并确认设备路径 (如 /dev/sdb 或分区 /dev/sdb1)。
    • (关键) 备份数据!目标磁盘/分区数据将被覆盖
    • 确保目标设备在宿主机上未被挂载 (umount /dev/sdX1)。
  2. 🔗 将设备附加给虚拟机

    • 编辑虚拟机配置文件 (sudo virsh edit vm-name)。
    • <devices> 中添加磁盘配置:
      <disk type='block' device='disk'>
        <driver name='qemu' type='raw' cache='none' io='native'/>
        <source dev='/dev/sdX'/>      <!-- 替换为整个磁盘设备路径 (如 /dev/sdb) -->
        <!-- 或使用分区 -->
        <!-- <source dev='/dev/sdX1'/>   <!-- 替换为分区路径 (如 /dev/sdb1) -->
        <target dev='vdb' bus='virtio'/>
        <address type='pci' ... />
      </disk>
    • 保存退出。
  3. 🔄 启动/重启虚拟机

    sudo virsh reboot vm-name
  4. 🖥️ 虚拟机内部操作

    • 登录虚拟机,识别新磁盘/分区 (lsblk, fdisk -l)。
    • 若使用整个磁盘 (/dev/sdb): 需先分区 (fdisk /dev/vdb),然后格式化分区 (mkfs.ext4 /dev/vdb1)。
    • 若使用分区 (/dev/sdb1): 虚拟机内看到的是映射后的整个块设备(如 /dev/vdb),仍需分区格式化。
    • 挂载使用:sudo mount /dev/vdb1 /mnt/newdisk,并更新 /etc/fstab

📄 方案三:基于文件的镜像 (间接映射)

适用于不方便直接暴露物理设备的场景,性能略低于前两种。

  1. 📁 创建磁盘镜像文件

    sudo dd if=/dev/zero of=/path/to/newdisk.img bs=1M count=102400 # 创建100GB文件
    # 或使用更快但稀疏的qcow2 (支持快照、压缩):
    sudo qemu-img create -f qcow2 /path/to/newdisk.qcow2 100G
  2. 🔗 将镜像附加给虚拟机

    • 编辑配置文件 (sudo virsh edit vm-name)。
    • 添加磁盘配置:
      <disk type='file' device='disk'>
        <driver name='qemu' type='raw'/> <!-- 或 type='qcow2' 匹配镜像格式 -->
        <source file='/path/to/newdisk.img'/> <!-- 或 .qcow2 -->
        <target dev='vdb' bus='virtio'/>
        <address type='pci' ... />
      </disk>
    • 保存退出。
  3. 🔄 启动/重启虚拟机

    sudo virsh reboot vm-name
  4. 🖥️ 虚拟机内部操作

    KVM虚拟机如何添加物理硬盘?

    • 登录虚拟机,识别新磁盘 (lsblk)。
    • 分区、格式化、挂载使用(同方案一第7步)。

⚡ 方案四:SCSI设备直通 (高级/高性能)

需宿主机内核支持VFIO或PCI直通,适合高性能需求或直接访问特定硬件特性。

⚠️ 注意:此方案较复杂,涉及安全风险(如DMA攻击),建议仅在必要时由专业人员操作,以下简略步骤:

  1. 绑定设备到VFIO驱动:宿主机上解除原有驱动绑定,绑定到 vfio-pci
  2. 配置虚拟机XML:使用 <hostdev> 标签将整个PCI设备(SCSI控制器或磁盘所在的HBA卡)直通给虚拟机。
  3. 启动虚拟机:虚拟机内将直接看到物理SCSI控制器及其连接的磁盘。

具体步骤需根据硬件和内核版本调整,强烈建议查阅最新官方文档。


🛠 通用后续步骤与验证

  • 虚拟机内识别:使用 lsblk, fdisk -l, ls -l /dev/disk/by-id/ 确认新磁盘。
  • 分区与格式化:按需使用 fdisk/parted/gdisk 分区,mkfs 格式化。
  • 挂载使用mount 临时挂载,编辑 /etc/fstab 永久挂载(推荐使用UUID或磁盘ID)。
  • 权限管理:确保挂载点有适当用户/组权限。

⚠️ 重要注意事项与最佳实践

  1. 📌 数据备份:任何磁盘操作前,强制备份宿主机和虚拟机关键数据。
  2. 🚫 卸载检查:确保物理盘/分区在宿主机上未挂载 (df -h, umount 若需要)。
  3. 💡 方案选择
    • 追求灵活管理:LVM物理卷 (方案一)
    • 追求极致性能:裸磁盘/分区映射 (方案二)SCSI直通 (方案四)
    • 便捷文件管理:基于文件的镜像 (方案三)
  4. 🔧 驱动程序bus='virtio' 提供最佳性能(需虚拟机安装virtio驱动),Windows虚拟机需提前加载驱动。
  5. 🔥 热添加 (部分支持):较新KVM/libvirt支持运行时添加特定类型磁盘(需预先配置控制器如virtio-scsi),使用 virsh attach-disk 命令尝试。
  6. 📝 配置文件备份:修改虚拟机XML前,建议备份原文件 (virsh dumpxml vm-name > vm-name-backup.xml)。
  7. 🛡 权限与安全:确保 /dev/下设备或镜像文件的权限允许 qemu/libvirt-qemu 用户访问,SCSI直通需评估安全风险。

💎 方案选择建议

场景 推荐方案 优势 注意事项
宿主机使用LVM,需灵活管理 ✅ LVM物理卷 (方案一) 扩展性强,管理方便 需宿主机配置LVM
追求最高磁盘性能 ⚡ 裸磁盘/分区映射 (方案二) 性能最优,接近原生 宿主机无法直接使用该磁盘
环境限制,不适合直接暴露物理设备 📁 基于文件的镜像 (方案三) 部署简单,独立于物理设备 性能略低,依赖宿主文件系统
专业需求,需要直接控制SCSI硬件 🔧 SCSI设备直通 (方案四) 极致性能,直接访问硬件 配置复杂,安全风险高

通过遵循以上步骤和注意事项,您可以安全高效地为KVM虚拟机添加物理磁盘资源,满足业务增长的存储需求,操作时请务必谨慎,确认每一步的输入命令和设备路径,如遇复杂环境,建议在测试环境中验证后再进行生产操作。

引用说明

如需专业运维支持或更深入的性能调优,请联系我们的技术团队。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/14889.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月8日 04:13
下一篇 2025年6月8日 04:19

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN