虚拟机磁盘挂接其实不复杂,关键在于把“新硬盘接入系统”和“文件系统挂载”这两步理顺,就能稳定扩容与迁移。本文将围绕虚拟机磁盘挂接的完整流程、场景差异与常见故障,给出一份可以直接照做的操作指南。
什么是虚拟机磁盘挂接,为什么它总让人犯迷糊
虚拟机磁盘挂接,指的是将一块虚拟硬盘(无论是新增、克隆还是迁移过来的)接入到运行中的虚拟机,并让操作系统识别、格式化、挂载到指定目录的过程,很多新手在操作时发现,在控制台“添加硬盘”之后,进入系统却看不到新磁盘,或者看到了但没法读写,这就是没搞懂“挂接”包含设备识别、分区格式化、目录挂载三层动作。
虚拟磁盘的两种存在形式
- 数据盘(纯存储):只存放业务数据,不承载系统启动,挂接后需要手动分区和挂载。
- 系统盘(启动盘):承载操作系统本身,迁移或挂接系统盘时,要额外注意启动项和引导配置,否则容易开机失败。
挂接方式取决于你的虚拟化平台
- VMware / VirtualBox:通过虚拟机设置界面添加虚拟磁盘文件(如.vmdk、.vdi)。
- KVM / Proxmox VE:通过命令行或Web管理界面将qcow2或raw格式磁盘附加到虚拟机。
- 云服务器控制台:如简米云、酷番云,在控制台购买并挂载云盘,然后在实例内部操作。
如何在Linux虚拟机中完成磁盘挂接
大多数服务器场景跑的是Linux,下面以CentOS/Ubuntu为例,给出可复制的步骤。
第一步:在宿主机侧添加虚拟磁盘
- VMware Workstation中,依次点击“编辑虚拟机设置” → “添加” → “硬盘” → 选择SCSI或SATA → 指定容量和存储方式(厚置备或精简置备)。
- KVM环境中,使用
virsh attach-disk 虚拟机名 /路径/disk.qcow2 vdb --cache none命令挂接,或者在线编辑虚拟机XML配置文件。 - 云平台控制台,进入实例详情页,在“云盘”标签页点击“挂载云盘”,选择目标实例即可。
第二步:在虚拟机内识别新磁盘
进入系统后,执行lsblk或fdisk -l查看新增设备名,一般名为/dev/vdb、/dev/sdb或/dev/xvdb,取决于虚拟化驱动和总线类型。
第三步:分区与格式化
如果新磁盘容量小于2TB,建议使用传统分区表;大于2TB则用GPT。
# 以 /dev/vdb 为例 fdisk /dev/vdb # 输入 n 新建分区,p 主分区,回车默认起止扇区,w 保存 # 格式化为 ext4 文件系统 mkfs.ext4 /dev/vdb1
第四步:挂载到目录
# 创建挂载点 mkdir -p /data # 临时挂载 mount /dev/vdb1 /data # 设置开机自动挂载 echo '/dev/vdb1 /data ext4 defaults 0 0' >> /etc/fstab
第五步:验证挂接结果
执行df -h /data确认容量可见,执行blkid查看UUID用于写入fstab更稳妥。
Windows虚拟机如何挂接新磁盘
Windows系统的虚拟机磁盘挂接相对简单,但有几个容易踩坑的地方。
图形化操作路径
- 宿主机侧添加磁盘后,登录Windows虚拟机,右键“此电脑” → “管理” → “磁盘管理”。
- 屏幕底部会出现“磁盘1(联机)”,如果显示“脱机”,右键点击“联机”。
- 在未分配空间上右键 → “新建简单卷” → 按照向导分配盘符、格式化(NTFS)。
- 完成后,“此电脑”中即可看到新盘符。
常见注意事项
- 如果磁盘是从其他虚拟机分离后挂接的,Windows可能会提示“磁盘未初始化”,此时选择MBR或GPT即可。
- 需要动态扩容时,宿主机侧扩展磁盘后,Windows的“磁盘管理”里无法直接拉大分区,需要借助磁盘扩容工具,或重新创建分区。
虚拟机磁盘挂接的典型场景与选择建议
不同的挂接需求对应不同做法,先明确自身场景。
给现有虚拟机扩容数据盘
目标是在不重装系统的情况下增加存储空间,行业共识认为,最稳妥的做法是
新增一块数据盘并挂载,而不是强行扩容系统盘分区,系统盘扩容涉及分区调整和引导修复,风险较高,而数据盘挂接完全不影响原运行状态。
从其他虚拟机迁移数据盘
如果你有一块旧虚拟磁盘,想挂接到新虚拟机读取数据:
- 先在宿主机层面将磁盘文件复制或移动至新虚拟机目录。
- 挂接后如果系统无法识别,检查磁盘模块类型(IDE/SATA/SCSI/VirtIO)是否匹配。
- 读取到磁盘但分区无法挂载,可能因原系统使用LVM卷组,需要执行
vgscan && vgchange -ay激活卷组。
搭建共享存储环境
虚拟机磁盘通常不支持多台虚拟机同时读写同一块虚拟磁盘文件,容易造成文件系统损坏,如果要共享数据,正确做法是:
- 使用NFS或CIFS网络共享。
- 在宿主机上开启SMB服务并挂接到各虚拟机。
- 或者使用分布式存储系统(如Ceph)作为统一存储池。
场景选择对比表
| 使用场景 | 推荐做法 | 积极性 |
|---|---|---|
| 扩展空间 | 新增数据盘挂载 | 不影响现有系统,风险低 |
| 数据迁移 | 分离后挂接到目的地虚拟机 | 依赖文件格式兼容性 |
| 多机共享 | 网络文件系统(基于NFS/SMB) | 避免并发写损坏虚拟磁盘 |
| 高性能场景 | 直通物理磁盘或NVMe设备 | 性能高但迁移性稍弱 |
虚拟机磁盘挂接失败的排查思路
挂接后看不到磁盘或无法挂载,按以下顺序排查。
宿主机层:确认磁盘已正确附加
- VMware中检查磁盘是否被“连接”(勾选Connect at power on)。
- KVM中执行
virsh domblklist 虚拟机名确认设备列表。 - 云控制台确认云盘状态为“使用中”且已绑定到当前实例。
内核驱动层:确认看到块设备
- Linux执行
ls /dev/查看是否有对应设备文件。 - 如果完全无设备,说明虚拟化驱动或总线类型不匹配,对于KVM,需要将磁盘总线由IDE改为VirtIO,并安装virtio驱动。
- Windows如果设备管理器里出现“未知设备”,检查是否缺少磁盘控制器驱动。
分区层:确认分区表可识别
- 执行
parted -l查看分区表信息。 - 如果提示“unrecognized disk label”,说明分区表损坏或未分区,可以尝试
parted /dev/vdb mklabel gpt重建分区表(数据不保留)。
文件系统层:确认格式兼容
- 查看原文件系统类型:
blkid /dev/vdb1。 - 如为NTFS,Linux需安装ntfs-3g;如为XFS或ext4,Windows原生无法读取。
- 跨平台需求优先使用exFAT或单独再用共享目录。
虚拟机磁盘挂接的常见疑问
虚拟机可以同时挂接多块磁盘吗?
可以,虚拟机和物理机一样支持多块虚拟磁盘,控制器上限取决于虚拟化平台,VMware单SCSI控制器可挂15块盘,KVM可动态添加多个virtio-blk设备,多块盘挂接后建议按用途区分挂载点,如/data1、/data2。
虚拟机磁盘挂接后不格式化直接能用吗?
不能,新添加的虚拟磁盘是裸设备,必须经过分区、格式化、挂载(Linux)或初始化(Windows)才能存储文件,理论上可以不分区直接格式化整块盘(如mkfs.ext4 /dev/vdb),但不推荐,因为无法灵活调整分区大小。
虚拟磁盘挂接和挂载有什么本质区别?
挂接是虚拟化层的动作,指将虚拟磁盘文件附加到虚拟机的IDE/SATA/SCSI/VirtIO控制器上;挂载是操作系统层的动作,指将已格式化的分区关联到指定目录,控制台里“挂载云盘”实际只完成了第一步,进入系统还需执行mount,这就是排查问题时最重要底层逻辑。
虚拟机磁盘挂接的价值在于让存储资源按需流动,新盘加入、旧盘迁移、系统盘替换等操作,核心不过是“控制器附加”加“系统内挂载”的组合,只要分清这两个维度,按本文顺序逐步操作,就能避开多数挂接故障。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/669657.html




