news 2026/10/16 9:50:26

vSphere虚拟化故障排查:从虚拟机迁移到磁盘快照的避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vSphere虚拟化故障排查:从虚拟机迁移到磁盘快照的避坑指南

简介:面向虚拟化实施人员与运维工程师的排错参考包,聚焦VMware与Citrix两大平台在部署、配置和日常维护中遇到的典型问题。资源从个人实施的真实场景出发,梳理了问题现象、原因分析、排查思路与可落地的解决方案,能有效帮助读者减少重复踩坑,并在遇到同类故障时快速定位。压缩包整体大小约15.45MB,以文字记录和经验整理为主,内容强调实战方法而非泛泛理论,适合在项目现场快速查阅,也适合团队作为内部运维经验沉淀。该资源已有501人浏览学习,其中既包含特定项目环境下的个别疑难问题处理记录,也整理了多场景通用的排错方法,覆盖虚拟机启动异常、存储或网络配置冲突、虚拟化平台兼容性等常见问题。这些内容对正在推进虚拟化项目、准备虚拟化认证或负责虚拟化环境运维的技术人员都有直接参考价值,可用于实施前预判潜在风险、实施中针对性排查故障、实施后总结归纳,作为虚拟化实施全周期中的工具型资料使用。

1. 虚拟化实施总在「开机找不到系统」:一个反直觉的坑

做虚拟化实施的人,几乎都遇到过这种场面:从模板克隆出一台虚拟机,硬件配置、网络都调好了,满怀信心地点开机,结果屏幕停在「Operating system not found」,连 BIOS 引导界面都进不去。第一反应是引导顺序错了,进 BIOS 把启动盘调来调去,折腾半小时依旧黑屏。最后才发现,问题根本不在引导顺序,而是虚拟磁盘控制器的驱动没有进入系统镜像——换句话说,系统盘在,但系统启动时根本读不到它。这类坑在虚拟化实施里非常普遍,因为它藏在设备模拟层,界面上看不到、日志里不明显,只能靠经验一步步缩小范围。这篇笔记就把我在多个现场踩过的 CPU、磁盘、网络、快照问题按故障类型拆开讲,每个都给到能直接抄的命令和参数说明,希望能帮你少走几圈弯路。

2. 无法打开虚拟机:CPU 兼容性报错与迁移前检查

2.1 现象:同一台虚拟机换个宿主机就报「主机 CPU 不支持」

某项目做集群扩容,把几台业务虚拟机从旧宿主机在线迁移到新宿主机。迁移向导跑完,虚拟机显示已注册到新主机,可一点「开机」按钮,状态栏很快变成灰色,任务提示类似「无法打开虚拟机:主机 CPU 不支持该虚拟机当前使用的 CPU 特性」。最让人困惑的是,这台虚拟机上个月还在旧主机上跑得好好的,没人改过配置,怎么换个机器就开不了了。

另一种更隐蔽的现场是:虚拟机迁移成功了,开机也正常,但运行一段时间后出现随机死机、应用进程崩溃,查应用日志没有任何异常。这类问题往往被归为「玄学」,实际上多半是 CPU 特性集在迁移时被保留,而目标机的 CPU 对部分指令的支持方式和源机不一致,guest 操作系统在特定指令上报错,最终体现为死机或崩溃。

2.2 根因:vMotion 迁移保留了源 CPU 特性集,跨代 CPU 不兼容

虚拟化平台的在线迁移机制,为了保证迁移过程中业务不中断,会把虚拟机的运行状态连同 CPU 特性集一起封装。说得直白一点:虚拟机上电那一刻,它看到的 CPU 是什么型号、支持哪些指令,迁移到另一台机器后,它「以为」的 CPU 仍然是原来那套。这个设计本身没问题,问题出在目标宿主机。

如果目标宿主机 CPU 比源机老,或者架构代际不同,源机有而目标机没有的指令特性(比如 AVX2、XSAVE、VT-x 嵌套等),在虚拟机打开时就会被平台层的兼容性校验拦下来。vSphere 等主流虚拟化平台会在打开虚拟机时做 CPUID 特性比对,发现目标 CPU 无法满足虚拟机当前暴露的特性集合,就直接拒绝启动。这其实是一种保护机制——它宁可不开机,也不让 guest 在一个特性残缺的环境里跑出内存损坏或数据错乱。

所以这个报错的根因链是:集群内宿主机 CPU 型号不统一 → 虚拟机暴露的 CPU 特性集与目标主机不匹配 → 打开虚拟机时 CPUID 校验失败。很多现场一开始只是临时把一台旧机器加进集群,没注意 CPU 代际,等到迁移过去重启才发现已经晚了。

2.3 解决:先看最低型号 CPU,再开 EVC;迁移前跑一次兼容性检查

第一步是把集群里所有宿主机的 CPU 型号列出来,找到最老的那一台。在 ESXi 宿主机上执行:

# 查看宿主机 CPU 型号、主频、核心数 esxcli hardware cpu list # 查看 CPU 的 cpuid 特性,重点对比迁移前后两台机器的差异 esxcli hardware cpu cpuid list

命令输出的 cpu 型号那一行最有用,比如「Intel(R) Xeon(R) CPU E5-2680 v4」和「Intel(R) Xeon(R) Gold 6248」,一眼就能看出代际差。如果涵盖 Sandy Bridge、Haswell、Skylake 等多个代际,基本可以确定 CPU 兼容性问题的根源。

第二步,在集群级别开启 EVC(Enhanced vMotion Compatibility)。在 vCenter 里打开集群设置,找到 EVC 选项,选择「Intel Sandy Bridge」或更低的一档。EVC 的原理是给所有虚拟机统一暴露一套「最老」的 CPUID 特性集合,新 CPU 上跑时多出来的特性会被平台层隐藏,guest 系统看不到,也就不会在迁移时因为特性缺失而被拦截。

表格:EVC 档位与 CPU 代际对应关系

EVC 档位示例覆盖的 CPU 代际启用后屏蔽的主要特性
Intel Merom较早至 Core 2 时代多数 SIMD 扩展被隐藏
Intel Nehalem至 WestmereAES-NI 以下级别特性保留
Intel Sandy Bridge至 Ivy BridgeAVX 保留,AVX2 被隐藏
Intel Haswell至 BroadwellAVX2 保留,AVX-512 被隐藏
Intel Skylake至 Ice Lake 早期AVX-512 相关特性被隐藏

需要注意,EVC 是集群级别的设置,不是某台虚拟机的开关。开启后,所有虚拟机默认继承这个特性集合,想绕开都不行。某些特殊场景不适合开 EVC,比如 guest 里跑嵌套虚拟化,需要把vhv.enable设为 TRUE 时,才考虑在虚拟机 CPU 设置中取消「向客户机操作系统公开硬件辅助虚拟化」这个选项,作为最后手段。

第三步,也是我最建议养成的习惯:迁移前用迁移向导的「兼容性检查」功能,而不是直接拖拽虚拟机。vCenter 的迁移向导会预扫描目标宿主机,发现 CPU 特性不匹配时当场给出警告。提前暴露问题,比迁完再发现开不了机要省事得多。这个检查就是前面提到的打开虚拟机时的同款 CPUID 校验,只是提前做了。

提示:ESXi 宿主机执行esxi command系列命令需要开启 SSH 或在控制台直接操作。生产环境操作前建议先确认当前维护窗口,避免影响在跑业务。

3. 空间明明够却写不进数据:磁盘与快照链排错

3.1 现象:创建快照报空间不足,删了虚拟机存储却不释放

现场最常见的两个磁盘问题是:给虚拟机打快照时提示「not enough space for snapshot」,但数据存储的剩余空间明明还有几十 G;以及用 vCenter 删掉一台占用 500G 的虚拟机后,「数据存储」里的可用空间几乎没变化,甚至出现空间越删越少的怪象。

这两种现象在实施阶段特别容易引起恐慌。第一反应通常是「存储坏了」或「数据没删掉」,于是有人反复重启 vCenter、拔插存储,问题依旧。实际上,这两个现象背后是同一条链路上的两个不同环节:一个是快照子盘写不进去,一个是 VMFS 文件系统的空间没有被正确标记为可回收。

3.2 根因:快照子盘、thin 置备与 VMFS 回收机制

先说快照。虚拟机的快照不是一个「还原点」这么简单,它是一组增量文件:原磁盘文件 + 一个叫-000001.vmdk的子盘。打快照之后,所有写操作都进子盘,父盘不再变化。所以打快照需要为子盘预留空间,如果子盘分配失败,平台就会报「not enough space for snapshot」。这不是数据存储总容量不够,而是那台虚拟机所在的数据存储上,剩余空间不足以再容纳一个快照子盘——尤其是原 vmdk 接近数据存储剩余容量时,一打快照必报错。

再说删除 VM 后空间不释放。vCenter 里的「从磁盘删除文件」能删掉虚拟机描述文件,但如果虚拟机还挂着快照,快照子盘和父盘之间存在依赖关系,平台不能简单地把文件标记为删除;而 thin 置备的 vmdk 是「用多少占多少」,删除虚拟机的操作不会自动触发底层存储的 UNMAP 空间回收,物理存储上的块仍被标记为已占用。这就是「空间越删越少」的真相:数据没丢,但文件系统不知道哪些块可以复用。

顺带说一个容易被误会的点:guest 系统里的「磁盘清理」不会缩小 vmdk 文件大小。guest 删除文件只影响虚拟机内部的文件系统,vmdk 作为一个整体文件,它占用的 VMFS 块不会主动释放。实施时经常有人为了让虚拟磁盘「瘦身」,进 Windows 里删了一堆临时文件,结果数据存储可用空间一点没变。

3.3 解决:三步走——看快照链、触发快照合并、触发存储回收

排查和解决建议按下面的顺序来,每一步都有明确目的:

# 第一步:列出所有虚拟机,拿到 vmId vim-cmd vmsvc/getallvms # 第二步:查看指定虚拟机的快照列表,确认快照深度 vim-cmd vmsvc/snapshot.get <vmId> # 第三步:如果确认不再需要快照,一次性删除全部快照,触发 delta 合并 vim-cmd vmsvc/snapshot.removeall <vmId> # 第四步:查看 vmdk 描述文件与其锁状态 vmkfstools -D /vmfs/volumes/<数据存储>/<虚拟机目录>/<磁盘名>.vmdk # 第五步:对 VMFS 数据存储触发空间回收 esxcli storage vmfs reclaim --volume-label=<数据存储名称>

命令的逻辑很简单:先搞清楚虚拟机有没有未清理的快照链,这是「空间不释放」的第一大原因;然后用snapshot.removeall把 delta 子盘逐层合并回父盘,合并完成后旧子盘文件会被删除,块空间被标记为空;最后用vmfs reclaim通知存储层做 UNMAP,这一步才是真正把空间还给物理存储的动作。vmkfstools -D在这里用来查看 vmdk 是否被其他进程锁住,如果 removeall 卡住,多半是这里显示有锁。

参数说明:--volume-label指定数据存储名称,可以先执行esxcli storage filesystem list查看所有数据存储的 label 和挂载路径,再决定对哪一个做回收。生产环境回收命令建议在业务低峰期执行,因为 UNMAP 过程会产生一定的存储 IO。

提示:快照不是备份。实施阶段如果只是为了「留个后悔药」,快照保留时间不要超过一天,且快照叠加层数不要超过三层。长期挂多层快照会让虚拟机的 IO 性能持续下降,还会让后续每一次快照删除变成灾难。

4. 虚拟机 ping 不通网关:虚拟交换机的隐性坑

4.1 现象:虚拟机同网段也不通,物理机却正常

网络故障在实施现场几乎天天有,最典型的是:虚拟机配置了同网段静态 IP,网关也填了,从虚拟机 ping 网关不通;或者从外部 ping 虚拟机完全无响应,而同一交换机下物理机之间的网络完全正常。另一个常见场景是:虚拟机从一台宿主机迁移到另一台后,业务 IP 没变,但客户端突然连不上了。

这些现象的共性在于:虚拟机内部网络配置没问题,宿主机管理网络也正常,问题出在虚拟交换机到物理交换机这一段。因为它是软件层面的转发,很多实施人员习惯先在 guest 里排查 IP、路由、防火墙,折腾几小时才发现方向错了。

4.2 根因:VLAN 标签、混杂模式与多网卡绑定三处不一致

ESXi 的虚拟交换机可以理解成一块纯软件交换机:虚拟机网卡连接到一个端口组,端口组上有 VLAN ID、安全策略等配置;虚拟交换机再通过物理网卡(vmnic)上连到物理交换机。数据包从虚拟机出来,要经过端口组、虚拟交换机、物理网卡、物理交换机,任何一层的配置和物理侧不一致,都会造成「通了又被丢掉」。

最常见的三处问题:

第一,端口组 VLAN ID 与物理交换机不一致。端口组里配了 VLAN 100,但物理交换机上连端口是 access VLAN 20,或者 trunk 端口没放行 VLAN 100,数据帧到物理交换机直接被 drop。很多新手把 VLAN ID 当成「网段号」来填,实际上它对应的是 802.1Q tag,必须和物理交换机端口的配置逐字节一致。

第二,安全策略里的「混杂模式」被关闭。vSwitch 默认会检查数据帧的目标 MAC,只有目标 MAC 和端口组里的 VM MAC 匹配才放行。如果这台虚拟机承担着透明网关、DHCP 中继之类的角色,或者跑某些集群软件的虚拟 IP,外面的帧 MAC 不是它的,默认策略就会把帧丢掉,表现为「别人能出去,自己进不来」。

第三,多物理网卡绑定在同一个 vSwitch 上,但物理交换机对端做了链路聚合而 vSphere 侧没有对应配置。两边负载均衡算法不一致,数据包在两块网卡间散开,出现间歇性丢包。这个问题在实施期特别隐蔽,流量小时几乎无感,一压测就露馅。

4.3 解决:按「管理网卡 → 物理链路 → 端口组」三层顺序排查

排查网络问题不要一上来就进虚拟机里改 IP。我的习惯是先在宿主机上确认物理链路,再确认管理网络,最后才去看虚拟机端口组。三层各有一组命令:

# 第一层:物理网卡状态与速率,确认 link up esxcli network nic list # 第二层:管理网卡 vmknic 的 IP、VLAN、MTU esxcfg-vmknic -l # 第三层:从 ESXi 管理网卡 ping 网关,验证物理链路通到交换机 vmkping -I vmk0 192.168.1.1 # 第四层:查看 vSwitch 与端口组的完整配置 esxcli network vswitch standard list

esxcli network nic list输出的 Name 字段是 vmnic0、vmnic1 这样的物理网卡,重点看 Link Status 是否为 Up,Speed 是否符合预期;esxcfg-vmknic -l输出管理网卡的 IP、子网掩码、VLAN ID 和 MTU,这一步能确认 ESXi 自身的管理网络是否正常;vmkping -I vmk0从指定 vmknic 发 ICMP 包,排除物理网线和交换机的硬件问题。前两步全通过,基本可以确定链路是好的,然后把排查重心转到端口组的 VLAN 和安全策略。

下面是物理交换机与 vSwitch 的对接参数关系表:

vSwitch 端口组配置物理交换机端口对应配置匹配结果
VLAN ID = 0(无标签)access 模式,PVID 与 VM 同网段正常
VLAN ID = 100trunk 模式,放行 VLAN 100正常
VLAN ID = 100access 模式,PVID 20不通,帧被丢弃
混杂模式关闭端口组内无透明网关需求正常
混杂模式关闭VM 承担 HA 虚拟 IP外部访问失败
多 vmnic 绑定 + 基于源端口哈希静态 LACP 聚合可能间歇性丢包

参数说明:esxcli network vswitch standard list输出里的 MTU 字段非常关键。如果物理交换机上启用了 Jumbo Frame 而 vSwitch 的 MTU 还是 1500,大包会被物理交换机丢弃,小包正常。遇到「ping 小包通、访问业务不通」的情况,优先检查 MTU 两端是否一致。

提示:修改 vSwitch 端口组 VLAN ID 前,先用vmkping记录当前链路是否正常,再改配置复测。避免「本来正常,改完反而断了」的尴尬现场。

5. 避坑指南:实施期最常见的四个翻车场景

5.1 克隆虚拟机后主机名冲突,集群节点起不来

现象:从模板克隆出一台新虚拟机,改好 IP 后加入集群,结果报「名称已存在」或新节点在管理平台上反复掉线。原因:克隆操作复制了完整系统盘,guest 操作系统内的 hostname 还是模板里的旧值。vCenter 里的虚拟机显示名改了,但 guest 里的/etc/hostname、/etc/hosts没跟着改,导致集群内出现同名主机,服务注册和心跳全部错乱。解决:

# 登录新虚拟机,修改 hostname hostnamectl set-hostname new-node-name # 同步修改 /etc/hosts,把旧主机名替换为新主机名 sed -i 's/old-hostname/new-node-name/g' /etc/hosts

两个文件必须一起改,只改hostnamectl不改/etc/hosts,某些依赖本地解析的服务依然会拿到旧名字。步骤完成后重启虚拟机,确认新名字生效再执行集群加入操作。这条坑几乎每个做模板克隆的人都会踩,克隆前在模板里就把 hostname 设置成规范化名称,能省掉一半麻烦。

5.2 快照删除一直卡在 99%

现象:删除一个长时间未清理的快照,vCenter 任务进度停在 99% 很久不结束,虚拟机的磁盘 IO 明显下降,甚至任务直接失败。原因:快照删除需要把 delta 子盘的数据逐块合并回父盘,如果快照链里有多层子盘,或者虚拟机被另一台宿主机注册(比如 vCenter 数据库异常恢复导致 VM 被注册到两台机器),文件锁会阻止合并操作。解决:先确认虚拟机只被一台宿主机注册,再在宿主机上查文件锁:

# 查看虚拟机的 vmId vim-cmd vmsvc/getallvms # 查看快照列表,定位卡住的快照 vim-cmd vmsvc/snapshot.get <vmId> # 检查 vmdk 文件锁状态,确认没有其他进程持有 vmkfstools -D /vmfs/volumes/<数据存储>/<虚拟机目录>/<磁盘名>.vmdk

确认无锁后,对指定快照做定向删除而不是 removeall,减少合并范围。快照是实施中最容易埋雷的操作,给虚拟机打快照前先确认存储剩余空间足够,并且快照保留时间越短越好,这是两条铁律。

5.3 虚拟机打开直接报「内存不足」或开机后立刻关机

现象:给虚拟机内存从 16G 加到 64G,保存配置后再点开机,提示物理内存不足无法打开;偶尔能开机,但运行几十秒后虚拟机自动关机。原因:ESXi 允许内存超购,但每台虚拟机都有一份固定开销(Overhead),热添加内存后,目标宿主机实际可用内存已被其他虚拟机占满,调度器检查到这台虚拟机的新增 reservation 超过可用阈值,便拒绝启动。解决:

# 用 esxtop 查看宿主机真实内存使用量,按 m 切到 MEM 域,看 PMEMSZ esxtop

MEM 域里的 PMEMSZ 是物理内存总量,MEMSZ 是虚拟机可见内存量,两者差值反映的是 hypervisor 层开销。不要在 vCenter 界面里只看数字判断内存够不够,要以 esxtop 的实时数据为准。给核心虚拟机在资源设置里留出 reservation,或者先暂停低优先级虚拟机的内存份额,再尝试开机。内存热添加的配置变更,通常需要重启 guest 才能生效,改完立即开机反而容易触发调度器报错。

5.4 Windows 克隆后蓝屏 0x0000007B

现象:Windows 虚拟机从模板克隆出来,或者修改了虚拟磁盘控制器类型(IDE 改成 SCSI),开机直接蓝屏,错误码 0x0000007B。原因:Windows 启动时需要访问系统盘的磁盘控制器驱动,如果 guest 里没有目标控制器的驱动,系统就找不到启动卷,直接蓝屏。这个错误码看着吓人,其实和系统崩溃无关,纯粹是控制器驱动缺失。解决:克隆前在模板里预装对应的 SCSI 控制器驱动,并保持克隆前后控制器类型一致;已经蓝屏的,在虚拟机设置里把控制器改回克隆前的类型(比如从 SCSI 改成 IDE),先让系统能进安全模式,再注入正确驱动。这条是实施期最常见的「后悔药」场景,模板标准化时把控制器类型固定下来,能避免后续所有克隆项目踩同一个坑。

6. 快速定位技巧:三组命令把三类故障缩小到一个点

6.1 先定维度,再逐层查

虚拟化实施的问题,落到根因上基本就是三个维度:计算(CPU/内存)、存储(磁盘/快照)、网络(vSwitch/VLAN)。遇到报错先别急着点界面,先判断它属于哪一个维度,然后每组命令按顺序执行,几分钟就能把问题范围缩小到单一环节。

  • 计算维度:esxcli hardware cpu list看 CPU 型号,esxtop看内存实际分配;
  • 存储维度:esxcli storage filesystem list看存储容量与挂载,vmkfstools -D看 vmdk 锁状态;
  • 网络维度:esxcfg-vmknic -l看管理网卡配置,vmkping -I vmk0验证物理链路。

6.2 报错关键字对照表

报错或现象关键字根因方向首选排查命令
Operating system not found引导顺序或磁盘控制器驱动缺失查看虚拟机磁盘控制器类型
无法打开虚拟机 / CPU unsupportedCPU 特性不兼容,跨代迁移esxcli hardware cpu list
not enough space for snapshot快照子盘空间不足或存在激活快照vim-cmd vmsvc/snapshot.get
删除 VM 后空间不释放thin 盘未回收或快照未合并esxcli storage vmfs reclaim
vmkping 不通物理链路或管理网络 VLAN 错配esxcfg-vmknic -l
虚拟机 ping 不通网关端口组 VLAN 或混杂模式配置错误esxcli network vswitch standard list
Windows 蓝屏 0x0000007B磁盘控制器类型与驱动不匹配检查虚拟磁盘控制器类型

6.3 一套强制验证习惯

我自己经历过几次「改完配置就翻车」之后,现在每次实施都强制走一遍固定流程:迁移前必跑兼容性检查,删除快照前必查snapshot.get,改动 VLAN 或交换机配置前先用vmkping记录通断基线。这套流程不需要懂很深的原理,只需要机械执行,但它能挡住绝大多数实施期故障。从那以后,每次创建、克隆、迁移虚拟机,都先看三张表——宿主机 CPU 型号表、数据存储快照表、物理交换机 VLAN 对接表,确认没问题才允许动生产。遇到报错,按维度选一组命令先缩小范围,再动手改配置,而不是凭感觉盲目重启或重装。希望帮到你。

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

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

30款IntelliJ IDEA插件实测推荐:从代码生成到AI编程,精选高效工具清单

但凡你在用 IntelliJ IDEA 写 Java&#xff0c;就一定纠结过一个问题&#xff1a;到底哪些插件值得装&#xff1f;网上推荐插件的一大堆&#xff0c;但很多都是“装完吃灰”&#xff0c;甚至拖慢 IDE 启动。所以我花了点时间把自己这么多年用下来、身边同事反馈也说好的插件整理…

作者头像 李华
网站建设 2026/10/16 9:49:56

Flutter应用迁移OpenHarmony实战:底部应用栏与滚动联动适配指南

去年年末我接了一个适配需求&#xff1a;把业务侧跑了两三年的Flutter应用搬到OpenHarmony设备上。当时团队催得急&#xff0c;App里光底部导航和二级页就占了大半功能&#xff0c;所以第一件事就是先把底部应用栏的交互立起来。折腾了两周&#xff0c;踩了不少坑&#xff0c;趁…

作者头像 李华
网站建设 2026/10/16 9:46:02

Qt 调用 nmcli 实现 Linux WiFi 连接工具:从扫描到连接

简介&#xff1a;这份资源面向在 Linux 平台从事桌面或嵌入式开发、希望掌握无线网络编程的开发者&#xff0c;提供一套基于 QT 框架实现 Wi-Fi 扫描与连接的完整示例工程。项目以 Ubuntu 16.04 为运行环境&#xff0c;围绕 QNetworkConfigurationManager 扫描热点、QNetworkCo…

作者头像 李华
网站建设 2026/10/16 9:46:02

从零实现malloc:隐式/显式/分离空闲链表与放置策略详解

简介&#xff1a;这份资源面向希望深入理解C语言动态内存管理的开发者与计算机专业学生&#xff0c;围绕“自己动手写malloc函数”这一主题&#xff0c;提供一份可编译运行的简易内存分配器实现。压缩包共3个文件&#xff0c;包含2个C源文件与1个头文件&#xff0c;整体约3KB&a…

作者头像 李华
网站建设 2026/10/16 9:45:14

QtCreator中qDebug中文乱码的根因与三种解决办法

QtCreator 4.10.2 里调试 Qt 程序&#xff0c;qDebug() 一输出中文就乱码&#xff0c;这个问题我前前后后折腾过不少时间。当时项目用的环境是 Windows 10 QtCreator 4.10.2 Qt 5.11 的 MSVC 2015 套件&#xff0c;打印日志里中文全是问号、方块&#xff0c;甚至偶尔出现&quo…

作者头像 李华
网站建设 2026/10/16 9:45:06

Linux用户与组管理实战:核心配置、权限模型与排错指南

1. 从一次线上事故说起&#xff1a;为什么必须搞懂用户与组管理 先讲个我实际踩过的坑。有次给一台服务器部署应用&#xff0c;图省事直接用 root 账号登录&#xff0c;把代码丢到 /root 目录下就跑了。结果第二天发现服务起不来&#xff0c;排查半天&#xff0c;是某个子进程…

作者头像 李华