news 2026/9/17 15:57:42

vSphere存储在线切换迁移实战:检查、执行与回退指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vSphere存储在线切换迁移实战:检查、执行与回退指南

简介:面向VMware vSphere平台运维工程师、虚拟化架构师及数据中心管理人员,这份完整存储迁移实战方案以某制造业大厂真实环境为背景,解决在线切换迁移中停机窗口短、业务连续性要求高的痛点。方案从迁移前必读、环境准备到目标存储映射、数据热迁移、源存储移除和业务调测,再到回退预案,形成了全流程闭环。特别是第3章包含基础信息统计、机房布线、ESXi主机光纤卡更换、RAID/LUN规划、SAN交换机规划及数据备份等操作要点,第5章专门设计了回退场景与步骤,可作为同类项目的重要参考模板。资源包内含1个doc格式文档,共1份文件,压缩包大小1.92MB,内容以图文步骤和配置规划为主,便于直接查阅和落地实施。目前已有139人学习下载。总体而言,这份完整版方案兼具操作性和风险控制意识,适合需要独立规划或执行vSphere存储迁移的技术人员学习引用。

1. vSphere存储在线切换迁移解决的是什么问题

一台承载着几百台VM的ESXi主机,底层LUN所在的存储阵列经常需要做设备替换、容量重组、跨机房搬迁或厂商统一替换。传统做法是关机、卸载存储、切换、再挂载,每台VM都要经历一次停机窗口。业务方给的时间通常只有周末凌晨的4小时,但虚拟机数量一多,关机开机加配置变更根本排不过来。

Storage vMotion提供了一条不停机的路径:通过vCenter把虚拟机磁盘从旧存储在线迁移到新存储。数据复制、校验、切换全部在虚拟机运行状态下完成,业务侧只感知到磁盘在迁移完成后的一次极短I/O冻结。这个方案的关键不在于“能不能迁”,而在于“怎么评估、怎么执行、怎么保证迁移失败时能回到原状态”。真正成熟的企业落地,不只是点一个迁移按钮,而是把存储可达性、底层阵列特性、路径策略、回退预案全部提前排好,再动手。

这篇文档按一线操作顺序,讲清楚vSphere存储在线切换迁移怎么落地:迁移前检查什么、迁移怎么执行、出了问题怎么回退、迁移完成后看哪些指标。

2. 迁移前的检查、评估与路径设计

2.1 Storage vMotion的机制决定了哪些前置条件不能省

Storage vMotion不是简单的文件复制。vCenter会在目标数据存储上创建新的虚拟磁盘,然后通过ESXi主机把源磁盘的数据块逐步复制过去,复制完成后短暂暂停虚拟机I/O,完成磁盘切换。整个过程的正确性依赖三点:源存储、目标存储、ESXi主机三者之间的网络和存储路径通畅,目标数据存储足够容纳磁盘快照与增量数据,以及源VM的磁盘拓扑没有妨碍迁移的属性。

目标存储剩余空间需要按“源磁盘实际使用量 + 迁移期间的写入增量 + 目标端建盘开销”来估算。迁移期间源磁盘的写入数据不会立刻复制到目标端,vSphere通过bitmap跟踪脏块,直到最终切换前再做一轮增量同步。如果目标存储空间不足以容纳最终同步时的全部脏数据,迁移会卡住甚至超时失败。

检查项按表格来逐条确认。

检查项检查内容不满足时的典型后果
vCenter版本与许可证确认vCenter与ESXi版本在同一个受支持矩阵内,且许可证含Storage vMotion迁移按钮置灰,或迁移到一半报错
目标数据存储容量、块大小、多路径策略、是否属于同一存储域迁移慢、目标vmfs满、切换失败
源VM磁盘类型是否存在独立(Independent)磁盘、RDM物理模式、快照RDM物理模式无法在线迁移,需先做处理
主机存储路径源与目标LUN是否都被ESXi识别,路径状态是否active目标LUN不可见时直接失败
网络连接vMotion网络是否配置,管理网络与存储网络是否可达迁移中途连接中断,切换阶段异常
存储I/O负载源阵列和目标阵列的时延与队列深度迁移拖慢业务I/O,出现磁盘重置

2.2 用命令确认源与目标存储的底层状态

UI界面能看到LUN是否在线,但看不到路径状态和底层设备细节。上机操作第一步是用命令行把存储设备信息拉出来看。

esxcli storage core device list esxcli storage core path list esxcli storage nmp device list

第一条命令列出主机识别到的所有存储设备,包括设备名、型号、序列号、传输协议(SAS/FC/iSCSI)、是否为本地设备。第二条看每条路径的状态,重点看是否有“dead”路径。第三条看NMP(Native Multipathing Plugin)给每个设备分配的路径策略,是VMW_PSP_FIXED还是VMW_PSP_RR,以及当前活动路径。

我看到不少迁移失败案例,根源在目标LUN虽然已经映射给主机,但路径策略是默认的FIXED,且活动路径指向一条性能很差的链路,数据复制阶段慢得离谱。建议在迁移前把目标存储的路径策略统一确认一遍,尤其是FC环境里多控制器双活的情况。

2.3 网络与存储可达性必须单独验证

很多工程师习惯在vCenter里看两眼就直接迁移,忽略了一个问题:Storage vMotion的数据流走的是ESXi主机到两端存储的链路,不走vCenter的数据通路。vCenter只负责下发任务和收集状态,数据复制是主机自己完成的。如果ESXi主机到目标存储所在阵列的管理地址、存储地址有防火墙规则没放通,迁移会一直卡在建连阶段。

验证手段用vmkping,直接确认主机到存储端口的连通性。

vmkping -I vmk2 10.10.20.1 -c 5 -s 1472

-I指定走哪个vmkernel网卡,-c指定发包数,-s指定包大小。1472字节接近以太网MTU上限,可以验证巨型帧配置是否正确。这个命令在迁移前跑一遍,能过滤掉大量“网络明明通但性能极差”的隐性故障。存储网络不通时ping不通,巨型帧不匹配时小包通但大包不通,两种情况在迁移过程中表现完全不同。

带外验证做完,还要看vCenter迁移任务中“目标数据存储可达性”检查是否通过。UI里发起迁移时,vCenter会主动检查主机是否能看到目标存储,这个检查没过时会在任务详情里直接给出原因。

3. 用UI与CLI执行存储在线迁移的完整过程

3.1 vSphere Client里的操作路径与关键选项

UI迁移适用于单台或少量VM。在vSphere Client中选中虚拟机,右键选择“迁移”,计算资源保持当前主机不变,只勾选“存储”,然后选择目标数据存储。

这里有几个选项决定了迁移行为的差异。

VM存储策略:如果环境里配置了SPBM策略,这里会要求选择一个适用于目标存储的策略。没有配置策略的环境选择“保持现有VM存储策略”即可,不要乱选,否则迁移完成后虚拟机被自动应用了不合适的策略,后续做快照或克隆时可能出现兼容性提示。

磁盘格式:默认选择“与源格式相同”。如果源是精简置备,目标继续保持精简;源是厚置备,默认保持厚置备。只有在明确需要转换格式时才改成thin或thick。我的建议是迁移期间不要顺手转换格式,格式转换会让迁移时间明显变长,而且最终切换阶段的耗时也会增加。先迁移,再做格式调整,便于把每一步变数隔离开。

选择完成后,任务会出现在“近期任务”面板。迁移过程分两个大阶段:复制阶段和切换阶段。复制阶段可以看到进度百分比,I/O密集程度取决于源存储负载。切换阶段通常在秒级完成,VM会短暂失去磁盘响应,但不会断电。

3.2 批量迁移用PowerCLI控制节奏

多台VM迁移必须用脚本。PowerCLI里对应的命令是Move-VM,但直接写Move-VM没有节奏控制,几十台VM同时开跑会把存储I/O打满。我一般会分批跑,每批5台,每台之间间隔几十秒,并且指定Datastore参数。

$targetDs = Get-Datastore -Name "ds-new-storage" $vmList = Get-VM | Where-Object { $_.PowerState -eq 'PoweredOn' -and $_.Name -like "web-*" } foreach ($vm in $vmList) { Move-VM -VM $vm -Datastore $targetDs -DiskStorageFormat SameAsSource -Confirm:$false Start-Sleep -Seconds 30 }

这段脚本先取目标数据存储对象,再筛选名为web-前缀且开机状态的虚拟机,逐个发起迁移。-DiskStorageFormat指定磁盘格式与源保持一致,这里不要省略,否则PowerCLI默认会按目标存储的默认格式重新格式化磁盘。-Confirm:$false跳过交互确认,脚本才能无人值守。

批量执行时不要让脚本里加“等待迁移完成再迁下一台”的逻辑——任务队列放在vCenter里反而更稳妥,vCenter会自己调度迁移子任务。脚本只负责按批次下发。如果想知道一批任务是否结束,用Wait-Task配合Get-Task轮询:

$tasks = foreach ($vm in $vmList) { Move-VM -VM $vm -Datastore $targetDs -DiskStorageFormat SameAsSource -Confirm:$false -RunAsync } $tasks | Wait-Task

-RunAsync让Move-VM立即返回任务对象,之后Wait-Task统一等待所有任务结束。这样脚本的输出是阻塞式的,适合串行执行多批迁移时精确控制节奏。

3.3 无人值守环境用govc执行迁移

没有Windows环境可以跑PowerCLI时,用govc配合vCenter的API也能完成同样的事情,更适合CI流程或跳板机。

govc vm.migrate -vm web-server-01 -ds ds-new-storage

govc的vm.migrate子命令把存储迁移封装成一次调用。-vm指定需要迁移的虚拟机名称或MoID,-ds指定目标数据存储。这条命令只迁移存储,不迁移计算资源。如果也有冷迁移需求,加上-host参数即可一起迁移主机。

批量执行时用shell循环把VM列表吃进来:

for vm in $(govc ls /dc1/vm/web-*) ; do govc vm.migrate -vm "$vm" -ds ds-new-storage done

注意govc vm.migrate默认不做磁盘格式转换。两边的存储格式由数据存储自身的格式决定,这一点和PowerCLI的SameAsSource行为略有差异。需要显式指定格式时用-disk.format参数,取值有thin和eagerZeroedThick等。

3.4 监控迁移过程中的具体进度与I/O状态

迁移任务提交后,最常犯的错是只盯着百分比看。百分比只表示数据复制完成度,不表示迁移状态健康。要判断迁移是否有问题,需要看两个指标:复制速率是否稳定,以及切换阶段是否反复重试。

跨存储迁移期间用esxtop看存储延迟:

esxtop # 进入交互界面后按 d 进入磁盘设备视图 # 按 f 添加字段,勾选 CMD/MB/s 与 DAVG/GAVG # 按空格键开始收集

esxtop的Disk视图里,DAVG是设备平均延迟,GAVG是guest平均延迟。迁移过程中如果DAVG持续超过50ms,说明存储侧已经饱和,迁移速度会被拖慢;GAVG大涨说明VM业务I/O受到了影响。这两个值结合起来判断是否该暂停迁移。

暂停迁移不是一个UI按钮,而是把对应的迁移任务取消。Storage vMotion取消后不会破坏源磁盘,VM继续在原存储上运行。取消也是一种操作手段,比硬扛着等任务失败更可控。

4. 迁移中的风险控制、回退与常见报错处理

4.1 迁移失败后的回退设计要事先想清楚

Storage vMotion迁移失败的常见结果是任务报错,但源磁盘不会立刻被破坏。vCenter在复制阶段失败时会保留源磁盘,虚拟机继续运行。在最终切换阶段失败时,情况略复杂:vCenter可能已经把VM的内存态和磁盘状态切换一部分到目标端,此时需要重新发起迁移或手动确认磁盘状态。

设计回退方案要遵守一个原则:迁移被取消或失败后,不要马上重试同一个迁移,先检查源磁盘是否还处于正常挂载状态。检查方法用PowerCLI查询:

Get-VM -Name web-server-01 | Select-Object Name, @{N="Datastore";E={$_.DatastoreIdList}} (Get-VM -Name web-server-01).ExtensionData.LayoutEx.File | Where-Object {$_.Type -eq "diskDescriptor"} | ForEach-Object {$_.BackingObject}

如果DeskDescriptor文件仍然指向源数据存储,说明源磁盘还在,可以直接重试或继续排查。如果文件指向目标数据存储但状态异常,说明切换阶段不完整,这时候优先联系存储团队确认目标LUN上的文件完整性,而不是直接反复发起迁移。

多数时候“回退”指的是不修复直接回到原点:在vCenter里把VM重新迁移回原存储,或者取消迁移任务。取消迁移后如果有残留的中间文件(目标数据存储上的临时VMDK),这些文件要手动清理。放在回退检查清单里的第一步永远是:确认目标数据存储上不存在“孤儿磁盘”文件。

4.2 迁移期间源端I/O异常导致切换卡住

我经历过一次真实故障:迁移进度到92%,然后卡了40分钟。表面上还卡在复制阶段,实际源存储底层已经在报磁盘延迟。排查时用了两个命令定位:

esxcli storage core device stats get -d naa.6000000000000a esxcli storage core device latency -d naa.6000000000000a

device stats get查看累计读写次数和重置次数,device latency查看分桶延迟分布。如果重置次数(Resets)在短时间内快速增长,基本可判定存储链路存在严重问题。这种状态持续下去,最终切换会出现I/O冻结超时,VM磁盘进入只读状态。

碰到这类情况,正确做法不是等任务自己超时,而是主动取消任务,评估源存储的健康度。源存储有问题时迁移再多次都是同样结果,先解决源端问题再重新执行迁移。

4.3 VAAI能力缺失导致迁移走慢路径

Storage vMotion依赖vSphere Storage APIs for Array Integration(VAAI)。当目标存储或源存储不支持VAAI的“full copy”功能时,ESXi会退化为慢路径,即把所有数据块当作普通读写在主机和存储之间搬运,迁移速度和CPU占用都会明显恶化。

判断VAAI是否生效,在迁移期间查看主机上的VMkernel日志:

tail -f /var/log/vmkernel.log | grep -i "fullcopy\|ExtentMove\|CloneBlock"

如果日志里频繁出现CloneBlock失败或回退到普通读写的信息,说明VAAI没有起到硬件加速作用。进一步查硬件支持状态:

esxcli storage core device vaai status get -d naa.6000000000000a

输出里的“Status: supported”表示该设备支持VAAI。如果显示unsupported,说明该存储型号或固件版本没有开放相关接口,迁移只能走慢路径。这种情况下不要盲目调大并发,慢路径下并发高了对业务I/O的影响成倍放大。

VAAI缺失不是错误,但迁移耗时会成倍增加。需要提前告知业务方,存储切换期间虚拟机磁盘性能会有一段时间低于正常水平。

4.4 一个隐蔽的坑:目标数据存储与虚拟机配置文件的路径策略不一致

虚拟机配置文件(VMX)在源数据存储,虚拟磁盘如果已经被迁移到目标存储,此时VM处于“配置和磁盘分离”的状态。如果这次迁移的目标是把整套存储切换掉,这种中间态不能算是完成状态。

常见做法是最后再把VMX也迁移到目标存储。PowerCLI里直接对VM执行Move-VM并指定目标数据存储,会把配置文件和磁盘一起迁;但如果之前已经单独迁移过磁盘,建议再执行一次完整的存储迁移收尾,确保所有VM文件落在同一个数据存储。

用如下命令确认所有文件都在目标存储:

$vm = Get-VM -Name web-server-01 $files = $vm.ExtensionData.LayoutEx.File $files | Where-Object { $_.Type -eq "config" -or $_.Type -eq "diskDescriptor" } | Select-Object Type, Name

配置文件路径和目标磁盘路径不在同一个数据存储时,后续做快照或vMotion都可能出现“找不到配置文件”类的二次问题。把迁移当作两步走(先磁盘后配置)的方案,就得在流程里加上第二步。

5. 迁移后的验证方法与两个实用技巧

5.1 迁移完成不等于结束,CPU、内存、存储的三个验证动作

迁移任务显示“已完成”后,第一件事是确认VM的磁盘确实落在目标数据存储,而不是看任务状态。其次检查磁盘格式是否和目标存储预期一致,最后用esxtop对比迁移前后的存储延迟基线。

验证磁盘位置与格式:

Get-VM -Name web-server-01 | Get-HardDisk | Select-Object Name, StorageFormat, Filename

Filename输出应指向目标数据存储的路径,StorageFormat应显示thick或thin,与迁移前的设置一致。如果发现格式变掉了,检查是否在迁移过程中选择了格式转换,或者目标存储的默认格式策略把磁盘重写了。

然后看整体硬件资源使用率,确认迁移没有留下“僵尸磁盘”或异常I/O:

esxtop # 按 c 进入CPU视图,按 m 进入内存视图,按 u 进入存储适配器视图 # 重点观察迁移完成后15分钟内的DAVG是否回落

esxtop的存储适配器视图里,如果迁移完成后某个HBA的队列深度仍然持续偏高,说明目标存储还在做后台操作,比如存储端的rebalance或快照合并。这类后台操作不会显示在vCenter任务里,但会导致新存储短期性能低于预期。等后台操作结束后再做最终验收更准。

5.2 用生成负载验证新存储在实际压力下的表现

仅靠日常工作负载验证存储切换是否成功,样本太有限。我一般在低峰期用有代表性的VM做一次压力验证,磁盘顺序读、顺序写、随机读、随机写几类场景都覆盖,每次持续5到10分钟,观察延迟是否在预期范围内。

Linux虚拟机里可以用fio做随机读写测试:

fio --filename=/data/testfile --direct=1 --rw=randrw --bs=4k --size=4G \ --numjobs=4 --runtime=60 --group_reporting --name=storage-check

-direct=1绕过Page Cache,读到的是真实存储性能。-rw=randrw表示随机混合读写,-bs=4k模拟典型数据库OLTP场景的块大小,-numjobs=4表示并发4个进程。-runtime=60让测试在60秒后自动结束。测试结束后看输出的read IOPS和write IOPS,以及clat百分位数据。avg lat如果超过10ms,说明新存储的性能不满足预期,需要回到路径策略和存储端配置做调整。

压力测试产生的测试文件要清理掉,避免占满目标数据存储空间。测试前确认目标数据存储上有足够空间容纳测试文件,测试完删除后再做一次数据存储空间复核。

5.3 给批量迁移场景留一个环境变量:先迁读多写少的VM

批量迁移不是一个一个验证完再迁下一批。更常见的做法是第一批发少量低风险VM,验证整个链路(路径、VAAI、网络、目标存储)没问题后,再按“读多写少VM优先、核心数据库最后”的顺序推进。这样做的好处是:即使目标存储存在问题,代价也控制在一小部分非核心VM上,不会把核心业务卷进一次失败的迁移。

迁移完成后的一周内保留源存储上的LUN映射不撤销,确认业务稳定后再执行源LUN的回收。这个期间源数据存储可以作为快速回退的目标端,一旦发现新存储有间歇性I/O抖动,随时可以再迁回去。很多线上事故不是迁移造成的,而是源存储回收太快,给线上留了一个无法回退的绝路。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 15:56:16

Markdown核心语法一图速查:20个标签+避坑指南+工具链推荐

有人说markdown难,有人觉得markdown就是记笔记时偶尔用一下的语法,还有人打开语法手册看两行就关掉了。但实际上,大部分人对markdown的误解来源于没见过一张真正有用的速查图,也没人告诉他"你只需要记住这些,剩下…

作者头像 李华
网站建设 2026/9/17 15:48:37

《亚历山大远征记》深度拆解:史料、军事逻辑与现代用法

你有没有想过这个问题:我们最熟悉的亚历山大大帝,那个骑马冲锋、在印度河边流泪、年仅三十三岁就离世的征服者,他的形象很大程度来自一个人——阿里安。更反直觉的是,阿里安本人既没有参加过远征,也没有生活在亚历山大…

作者头像 李华
网站建设 2026/9/17 15:47:22

AI生成内容无损转Word:Mermaid+LaTeX本地化转换方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 15:47:00

Spring AI 实战:Function Calling 调用自定义 API 的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 15:46:54

西工大C语言上机题库拆解与批量调试实战

简介:这份资源是西北工业大学C语言上机考试题库的完整文档,面向准备课程上机考核、复习C语言基础的理工科学生,尤其适合需要针对真题进行专项训练的学习者。内容围绕上机考试常见题型展开,涵盖数字组合枚举、整数特性判断、字符串…

作者头像 李华