十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ESXi虚拟机新增数据盘:从虚拟硬盘到客户机挂载的完整指南

ESXi虚拟机新增数据盘:从虚拟硬盘到客户机挂载的完整指南 上周收到磁盘告警一台跑在ESXi上的虚拟机数据盘使用率突破了90%。我上去一看系统盘和数据盘挤在一起当初部署图省事只划了一个分区在线扩容怕动到业务不扩眼瞅着就要写满。最后我选了更稳妥的方案在ESXi主机上给这台虚拟机挂载一块新硬盘进系统分区、格式化、挂载到独立目录再把数据迁过去。整个过程不用重启、不碰原有分区风险可控。这其实也是很多朋友遇到容量瓶颈时最该优先考虑的思路只不过ESXi和物理机“加盘”的流程有差异加上不少人以为加了虚拟磁盘就能直接用结果卡在客户机系统里。这篇就把完整链路拆开讲一遍。1. 为什么新挂一块盘而不是直接扩容系统盘很多人遇到虚拟机磁盘不够用的第一反应是“扩容”——在ESXi里把现有虚拟磁盘调大。这种做法不是不行但实际执行起来有隐藏成本远不如新增一块虚拟硬盘再挂载来得干净。1.1 系统盘扩容的两个隐藏成本第一个坑是分区布局。ESXi里调大虚拟磁盘只是把分配给虚拟机的“虚拟磁盘文件”容量上限调大客户机操作系统里那个分区并不会自动跟着变大。接下来你还得在客户机里扩分区、扩文件系统。如果当初创建虚拟机时用的是MBR分区表磁盘容量超过2TB后根本无法识别这个限制在扩展时会直接撞墙。就算走GPT如果根分区后面没有空闲空间或者/boot分区夹在中间扩分区就得删除重建分区表一不留神数据全没。第二个坑是快照。日常运维中虚拟机很可能挂着快照有快照存在时对vmdk做扩展风险比平时高不少。实测中多次遇到快照链过长导致扩容后虚拟磁盘状态异常的情况最后还得合并快照才能恢复。好在最麻烦的问题不是扩容本身而是你可能为了扩一个分区把整个虚拟机的稳定性都搭进去。1.2 新增虚拟硬盘的真正优势相比之下“新增一块虚拟硬盘”要干净得多。ESXi层只要创建一个新的vmdk文件挂到虚拟机总线上客户机层面对应的是一块全新的空盘分区、格式化、挂载都由你说了算。原有系统盘的分区表、文件系统、快照链路完全不受影响风险被限制在新盘那一侧。另一个好处是数据与系统彻底分离。数据库、日志、用户上传文件这类量大的数据单独放数据盘操作系统万一崩了重装系统后直接把数据盘挂回去就能恢复不用先备份再恢复。备份策略也随之清晰系统盘做快照数据盘单独走备份任务互相不干扰。1.3 先搞清“虚拟磁盘”和“客户机分区”是两个层面在动手之前一定要理解一个核心概念ESXi里的“磁盘”和虚拟机系统里看到的“磁盘”不是一个层面的东西。ESXi上的虚拟磁盘本质是一个vmdk文件或映射到裸设备的RDM它只是把底层存储池的容量包装成一块“空硬盘”呈现给虚拟机。客户机操作系统认识到的则是SCSI设备它还需要你自己完成分区、文件系统创建和挂载。换句话说ESXi负责把盘子端到虚拟机面前而虚拟机里认不认、怎么用是另一套操作系统的活。不少新手就是卡在这层认知上在vSphere Client里加好了硬盘进虚拟机执行df -h发现什么都没变以为没加成功。其实盘已经在了只是没分区没格式化没挂载系统当然不会把你当成可用空间展示。2. ESXi层添加虚拟硬盘选项与参数该怎么选2.1 创建新标准虚拟硬盘的入口在vSphere Client里关机或开机状态下都可以进入虚拟机“编辑设置”然后在“虚拟机硬件”里点击“添加硬盘”选“新标准硬盘”。注意一点如果虚拟机正在运行添加硬盘的按钮存在但客户机系统能不能立即识别取决于热插拔支持情况这个后面专门讲。选新标准硬盘而不是RDM是绝大多数场景下的正确选择。RDMRaw Device Mapping是直通物理磁盘或LUN性能好但可迁移性差一般只有数据库等特殊负载会用日常加数据盘不需要碰它。2.2 磁盘置备模式的差异ESXi创建虚拟硬盘时会让你选置备模式这决定了物理存储空间的分配方式。常见的三个选项如下置备模式空间分配方式适用场景精简置备Thin按需分配写多少占多少对空间超卖敏感、磁盘利用率低的场景厚置备延迟置零Thick Lazy Zeroed一次性分配全部空间但首次写入时有清零开销对性能要求一般需要预留空间的场景厚置备立即置零Thick Eager Zeroed创建时清零所有块性能最稳定需要Fault ToleranceFT或重负载IO场景我的建议是普通业务选精简置备就行了存储空间不紧张但想要稳定一些就选厚置备延迟置零真正的高IO生产环境再上厚置备立即置零。选了精简置备后要盯紧存储池剩余空间因为ESXi允许过载分配盘写满时物理存储可能先爆掉那是另一场灾难。2.3 SCSI控制器和虚拟设备节点新盘加在哪个控制器上也影响客户机识别。ESXi虚拟机的SCSI控制器一般有两种LSI Logic SAS默认兼容性最好和VMware ParavirtualPVSCSI性能更好但需要客户机装驱动。Windows客户机如果默认用的LSI Logic SAS不建议为了一块数据盘专门换PVSCSI免得驱动不匹配导致根本认不出盘。Linux客户机用PVSCSI问题不大。还要注意“虚拟设备节点”。系统盘通常是SCSI(0:0)新盘会自动分配一个空余节点比如SCSI(0:1)。如果默认控制器节点已满需要新增SCSI控制器此时虚拟机会多一个总线。选节点本身没有太多讲究但别手动填一个已经有设备的节点ESXi一般会检测冲突可也有检测不及时的时候填错会导致设备访问异常。2.4 热添加 vs 冷添加如果虚拟机正在运行可以试试直接添加新标准硬盘然后进客户机看是否能识别。识别不了最稳妥的办法是关机再添加也就是冷添加。冷添加基本没有兼容性问题但要求业务允许停机。热添加的前提条件不少虚拟机硬件版本要够新、客户机操作系统支持SCSI热插拔、SCSI控制器上留有可用节点。Linux客户机热添加后可以在系统内执行SCSI总线重扫Windows客户机则去“设备管理器”里扫描硬件改动。CentOS 6、Windows Server 2008这些老系统热添加后八成认不到干脆老老实实冷添加。3. Linux客户机里的完整操作分区、格式化、挂载、写fstabESXi层搞定了接下来进虚拟机系统。这里以Ubuntu/Debian/CentOS这类常见Linux发行版为例完整走一遍。3.1 先用lsblk确认盘符添加磁盘后第一件事不是急着格式化而是确认系统是否已经看到这块新的块设备。打开终端执行lsblk正常情况下会看到一块没有分区的新盘比如/dev/sdb容量对你刚才设置的大小。如果lsblk没看到可以执行fdisk -l查看或者尝试重新扫描SCSI总线for host in /sys/class/scsi_host/host*; do echo - - - $host/scan; done这条命令逐个扫描SCSI主机让系统识别新加入的设备。实测中有些发行版重扫一次不起作用多执行两次或者重启虚拟机就好。3.2 分区表选GPT还是MBR文件系统选哪一个新盘容量小于2TB用MBR不会有问题大于2TB必须上GPT。现在的环境里我建议不用想太多直接GPT除非你有非常明确的兼容性理由。现代fdisk命令对GPT支持已经很好不需要额外装gdisk。文件系统方面ext4最省心兼容性好缩小到扩大都有工具支持XFS是大文件和高并发场景的强项但只能扩大不能缩小对一开始容量规划不确定的场景不太友好。数据库、备份、文件服务器这类场景我一般用XFS或ext4都行普通业务直接ext4没毛病。Btrfs和ZFS功能强大但在虚拟机上折腾它们反而增加运维成本不是必要场景不推荐。3.3 一条龙命令参考假设新盘识别为/dev/sdb目标是挂载到/data目录完整操作如下# 1. 创建分区表和一个分区 fdisk /dev/sdb # 在fdisk交互界面中依次输入 # n 新建分区 # p 主分区 # 分区号默认 # 起始扇区默认 # 结束扇区默认整块盘一个分区 # w 保存退出 # 2. 格式化 mkfs.ext4 /dev/sdb1 # 3. 创建挂载点并挂载 mkdir -p /data mount /dev/sdb1 /data # 4. 验证 df -h /data分区时整块盘只做一个分区即可别过度设计。有些人喜欢整块盘不分区直接mkfs、直接挂载虽然能用但后续做扩展、做恢复时分区表的存在会方便很多建议保持“一块盘一个分区”的习惯。3.4 fstab千万别用坑写法挂载完成后还必须写入/etc/fstab否则重启后挂载关系丢失数据盘不会自动挂载。这一步看起来简单却是翻车最多的环节。先获取分区的UUIDblkid /dev/sdb1然后把下面这行追加到/etc/fstab末尾UUID你的UUID值 /data ext4 defaults,nofail 0 2两个关键点第一用UUID而不是/dev/sdb1。SCSI设备名在重启后可能因为磁盘顺序变化变成/dev/sdc一旦改名fstab里写的设备路径就失效了。UUID是文件系统级别的唯一标识不会变。第二加nofail选项。它的作用是当这块盘因为某些原因没被识别时系统不会卡在挂载等待或进入emergency mode而是跳过挂载继续启动。对数据盘来说这个选项能救命。不加nofail一旦盘没挂上开机直接进维护模式还得手输root密码去排查。写完之后最好验证一下umount /data mount -amount -a会读取/etc/fstab并挂载所有尚未挂载的文件系统能检测出配置是否写错。实测写好fstab后重启一次确认无误才算真正完成。4. Windows客户机让新磁盘变成可用的盘符Linux客户机讲完了Windows同样很常见。ESXi承载的Windows虚机加数据盘操作路径不一样但逻辑一致ESXi层加盘系统内初始化、分区、格式化、分配盘符。4.1 磁盘管理里的标准流程打开“磁盘管理”最简单的方式是WinR输入diskmgmt.msc回车。新加的虚拟硬盘一般会以“未知”或“未初始化”状态出现系统弹出“初始化磁盘”提示。这里直接选GPT分区表类型容量大于2TB必须GPT小于2TB也别退回MBR没什么必要。然后在新磁盘的未分配区域上右键选“新建简单卷”按向导走分配盘符、选文件系统一般NTFS、设置卷标、完成格式化。整个过程不需要重启完成后打开资源管理器就能看到新盘符。如果打开磁盘管理没有弹出初始化提示右键磁盘区域选择“扫描磁盘硬件改动”有时要扫两次。4.2 PowerShell脚本方式图形界面图省力自动化批量操作时用PowerShell更高效。我常用于初始化新数据盘的脚本是这样# 查看磁盘列表确认新盘的Number Get-Disk # 初始化磁盘 Initialize-Disk -Number 1 -PartitionStyle GPT # 创建分区并分配盘符 New-Partition -DiskNumber 1 -UseMaximumSize -AssignDriveLetter # 格式化并设置卷标 Format-Volume -DriveLetter E -FileSystem NTFS -NewFileSystemLabel Data脚本方式尤其适合执行完ESXi层添加后批量给多台Windows虚机初始化数据盘一套命令下去比手工点磁盘管理靠谱得多。4.3 Windows下看不到磁盘的两个原因如果磁盘管理里没有任何新设备出现九成是ESXi层那边的SCSI控制器类型问题或者客户机缺PVSCSI驱动。把虚拟机的SCSI控制器从VMware Paravirtual改回LSI Logic SAS再开机就能看到盘。另一个常见情况是磁盘处于“脱机”状态。右键磁盘区域“联机”一下即可这通常和客户机的SAN策略以及多路径配置有关。看到盘是“脱机”而不是“无媒体”先把心放肚子里这说明系统已经识别到了只是没激活。5. 踩坑实录从“看不到盘”到“开机进不了系统”实际操作中踩过的坑比流程本身更有价值下面这几个问题几乎每个人都有概率遇到。5.1 虚拟机里找不到新磁盘逐层排查有一次我在ESXi里给运行中的CentOS 7虚机添加了整块100GB的新盘进系统后lsblk怎么都看不到。当时第一反应是执行SCSI重扫结果发现/sys/class/scsi_host下有多个host目录只扫了一个根本没覆盖到新盘所在的总线。最后把所有host全扫一遍新盘马上出现。还有一次是Windows Server 2012虚机ESXi层确认盘已加设备管理器里有个带感叹号的未知SCSI设备更新驱动后才识别到磁盘。原因是虚拟机配置里SCSI控制器用的是PVSCSI而系统缺少对应驱动。这个问题在给既有虚拟机加盘时最容易被忽略解决办法只能是临时把控制器类型改回LSI Logic SAS。排查思路要清晰先从ESXi层确认vmdk已创建且节点无冲突再到客户机设备管理器或dmesg日志确认SCSI设备是否被发现最后才考虑分区挂载层的问题。别一上来就重装系统绝大多数“看不到盘”都只是没触发重扫或驱动缺失。5.2 重启后挂载消失、系统进入emergency mode这是fstab写错导致的高频事故。最常见的诱因是直接写/dev/sdb1设备名而不是UUID或者没加nofail或者fstab语法写错。现象是开机后卡在“Welcome to emergency mode”要求输入root密码。进去之后先执行cat /etc/fstab看哪行可疑把这行注释掉重启先让系统恢复然后再用blkid获取正确的UUID重新写入。教训就一句话fstab里凡是数据盘一律用UUID并坚决加上nofail。5.3 误挂载到有数据的目录后如何安全切换另一个高频坑是把新盘直接挂载到了一个已有数据的目录。挂载生效后原目录里的文件不会消失只是被“盖”住了一旦卸载旧数据会重新出现。如果没意识到这一点直接把新盘格式化或往里写东西原有数据就真的没了。正确做法是先挂载到临时挂载点比如/mnt/newdisk把原目录的数据cp或rsync过去确认数量一致后卸载再挂载到正式目录。具体切换流程mount /dev/sdb1 /mnt/newdisk cp -a /data/. /mnt/newdisk/ sync umount /mnt/newdisk mount /dev/sdb1 /data迁移完成后原/data目录里多出来的老数据可以谨慎清理建议保留一段时间等业务验证无异常再删除。5.4 快照被撑大数据盘要不要独立有位朋友给虚拟机加了一块数据盘后磁盘持续大量写入结果每次做快照快照文件都迅速膨胀最后存储池差点被撑爆。原因是虚拟机的快照机制会记录所有非独立虚拟磁盘的差异数据数据盘写入越多快照增量越大。在虚拟机“编辑设置”里把这块数据盘改成“独立-持久”模式快照就不会再包含它。但这意味着快照回滚也影响不到这块盘备份层面要单独覆盖它。数据盘独立问题和业务恢复策略直接挂钩不能一刀切。数据量大、变化频繁且快照保留时间长的业务建议独立依赖虚拟机快照做快速回滚的小业务保持默认也行。6. 进阶思路热添加、独立磁盘和备份策略的个人看法走到这一步基础挂载已经没问题了。再聊几个进阶细节都是日常运维中反复遇到的情况。6.1 热添加的前提条件与实测热添加真正的限制不在ESXi而在虚拟机兼容性和客户机驱动。虚拟机硬件版本太老连界面里的“热添加”选项都没有。客户机驱动不全硬件层面虽支持系统也感知不到。实测下来较新版本的Windows Server和主流Linux发行版热添加SCSI磁盘基本都能在线识别但老系统最好不要赌直接冷添加最稳。热添加完成后Linux客户机用前文的SCSI重扫命令即可不用重启。Windows则去“磁盘管理”→“扫描磁盘硬件改动”新磁盘会出现在未初始化列表里。如果扫描后依旧没有先怀疑SCSI控制器驱动再排查节点冲突。6.2 数据盘独立出来快照策略要做取舍把数据盘设为“独立-持久”后vSphere快照操作不会再包含这块盘好处是快照不会因为大数据量写入而飞涨坏处是快照回滚救不了数据盘。这要求备份策略里必须单独覆盖数据盘比如用备份工具做文件级备份或者存储层面快照。没有备份策略支撑独立数据盘反而是隐患。从运维习惯来说我更推荐“系统盘做快照、数据盘做备份”的组合打法。系统盘容量小、变化少快照成本低可以频繁打数据盘容量大、变化多依赖真正可靠的备份任务而不是靠快照碰运气。6.3 一块新盘背后的运维习惯给ESXi虚拟机挂载新硬盘这件事门槛不算高但每一步都隐藏着细节。我自己的习惯是新建虚拟机时提前规划好几块盘系统盘和数据盘从一开始就分开数据盘全部用GPT分区表每个盘只建一个分区不管什么文件系统挂载统一走UUID加nofail重要挂载点写进文档避免时间久了连自己都忘了哪块盘挂在哪。这套习惯让我在多次磁盘干预中几乎没有翻过车。新盘分区格式化挂载看似重复劳动可一旦形成标准流程后面给几十台虚机批量加盘也只是一个脚本的事。
返回列表