服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-13 更新于 2026-10-13 简米科技 3,595 字 8 分钟阅读

虚拟机查看UUID命令是什么?不同系统通用吗?

导读虚拟机查看UUID命令并不通用,Linux虚拟机用dmidecode -s system-uuid,Windows虚拟机用wmic csproduct get uuid或PowerShell,而KVM、Hyper-V、ESXi在宿主机层面各有专属命令, 很多朋友在网上搜到一条命令,跑到另一套环境里发现根本不好使……

虚拟机查看UUID命令并不通用,Linux虚拟机用dmidecode -s system-uuid,Windows虚拟机用wmic csproduct get uuid或PowerShell,而KVM、Hyper-V、ESXi在宿主机层面各有专属命令。 很多朋友在网上搜到一条命令,跑到另一套环境里发现根本不好使,原因就在这你查的“UUID”在不同的虚拟化平台里可能指的不是同一个东西。

Linux虚拟机查看UUID命令是什么

在Linux发行版里,查看虚拟机UUID最直接的方式是读取SMBIOS中的系统UUID,常用的命令有三个:

  • sudo dmidecode -s system-uuid:输出一行形如4c4c4544-0033-4d10-8052-b4c04f4f5332的字符串,这就是当前虚拟机的UUID。
  • cat /sys/class/dmi/id/product_uuid:不需要安装dmidecode,直接读sysfs文件,效果相同。
  • sudo dmidecode -t system | grep UUID:输出更详细的信息,但核心值一样。

实际操作时,/sys/class/dmi/id/product_uuid在部分发行版上对普通用户可读,但有些内核版本限制为root只读,遇到权限不足,执行sudo cat /sys/class/dmi/id/product_uuid即可。

为什么Linux里命令这么多,优先选哪个

优先用cat /sys/class/dmi/id/product_uuid,因为它不依赖额外软件包,也不需要解析命令行输出。 如果系统里没有这个路径,比如精简容器或WSL环境,再改用dmidecode。

dmidecode在不少云端虚拟机里默认没装,可以用sudo apt install dmidecode或sudo yum install dmidecode装上,CentOS/RHEL系一般自带,如果在容器里执行命令,得到的很可能是宿主机的UUID,而不是容器自己的,因为容器没有独立的固件表。

Windows虚拟机UUID怎么查

Windows虚拟机内部查看UUID,和物理机一样,读取的是系统固件信息,最常用的两种方法:

虚拟机查看UUID命令是什么?不同系统通用吗?

  • CMD窗口执行wmic csproduct get uuid,回车后直接显示一个UUID。
  • PowerShell执行(Get-CimInstance Win32_ComputerSystemProduct).UUID,输出同样的值。

如果你的Windows版本较老,Get-CimInstance不可用,可以用(Get-WmiObject Win32_ComputerSystemProduct).UUID,CIM是WMI的新版接口,Win10/Server 2012以上都支持,而wmic命令在较新的Windows 11和Server 2026中已经被默认移除,所以长期使用,PowerShell方式更可靠。

Windows虚拟机UUID怎么查时需要注意什么

第一,别把wmic csproduct get uuid的输出结果和硬盘序列号搞混,它取的是系统固件UUID,不是硬盘GUID,第二,如果PowerShell返回FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF,意味着当前环境没有有效的SMBIOS UUID,常见于部分超融合平台的虚拟机,或者启动方式特殊的老机器。

虚拟机UUID命令不同系统通用吗

直接回答:不通用,UUID本身是标准格式,但Linux通过SMBIOS暴露,Windows通过WMI/CIM暴露,访问路径完全不同,同一个虚拟机里,Linux和Windows看到的UUID值通常一致,因为SMBIOS表是虚拟硬件的一部分,不过命令本身没法跨系统用。

从宿主机层面看,各虚拟化平台维护着另一套标识:

平台 查看命令 说明
KVM/libvirt virsh dumpxml <虚拟机名> XML文件里的<uuid>字段
VMware ESXi vim-cmd vmsvc/getallvms 结果中直接有一列UUID
Hyper-V PowerShell (Get-VM -Name <名称>).Id

虚拟机查看UUID命令是什么?不同系统通用吗?

返回GUID格式,但不能和客户机内部UUID画等号

宿主机查到的UUID和虚拟机内部看到的UUID,在KVM和ESXi里不是同一个东西。KVM的<uuid>是libvirt对虚拟机的唯一标识,客户机看到的UUID是BIOS SMBIOS里的值。 只有两者被配置成相同时,你才会看到完全一样的字符串,VMware也一样,ESXi的getallvms列出的UUID是BIOS UUID,和客户机内部dmidecode看到的值一致;但VMware的moRef ID又不同。

行业共识认为,迁移虚拟机时若希望客户机系统授权不失效,应尽量保持SMBIOS UUID不变,比如VMware克隆虚拟机时,如果选择“复制”而非“移动”,有时会生成新UUID,导致Windows激活或部分软件绑定失效。

从宿主机查看虚拟机UUID:以ESXi为例

如果你想在ESXi主机上查某个虚拟机的UUID,操作比较稳定:

  1. 先执行vim-cmd vmsvc/getallvms,记下虚拟机的Vmid和右侧的UUID。
  2. 如果需要更完整的配置信息,执行vim-cmd vmsvc/get.config <Vmid>,里面也有uuid字段。

这个命令属于vim-cmd服务,SSH登录ESXi后就能直接运行,不需要装额外工具,这里展示的UUID是BIOS UUID,和生产环境里客户机看到的一致,要修改的话,可以通过虚拟机配置文件里的uuid参数控制,但生产环境不建议乱改。

运维脚本里怎么顺手抓UUID

日常运维中,写脚本批量读取UUID很常见,比如给虚拟机做硬件指纹采集,或者把UUID作为机器唯一标识写进监控系统,这里给两个可直接套用的片段:

  • Linux下拿去重后的值:sudo cat /sys/class/dmi/id/product_uuid | tr -d 'n'
  • Windows PowerShell输出到文件:

    虚拟机查看UUID命令是什么?不同系统通用吗?

    (Get-CimInstance Win32_ComputerSystemProduct).UUID | Out-File C:uuid.txt

还有一点容易被忽略:如果虚拟机所在宿主机本身是虚拟机(嵌套虚拟化),查出的UUID来自最内层的SMBIOS,这没问题,但如果你在普通容器里跑命令,得到的往往是宿主机的UUID,这时要准确标识容器,应该看容器ID,而不是UUID。

虚拟机查看UUID命令常见问答

问:虚拟机查看UUID命令是什么?
答:Linux虚拟机和Windows虚拟机各有不同,Linux优先用cat /sys/class/dmi/id/product_uuid,没权限就加sudo;Windows优先用PowerShell的(Get-CimInstance Win32_ComputerSystemProduct).UUID,从宿主机管理端查,KVM用virsh dumpxml,ESXi用vim-cmd vmsvc/getallvms。

问:为什么在虚拟机里看到的UUID和宿主机上查到的不一致?
答:因为客户机读的是虚拟BIOS提供的SMBIOS UUID,宿主机平台管理的是VM配置里的独立标识,在KVM中,libvirt的<uuid>和客户机SMBIOS UUID可以不同,只有创建时指定了相同值才会一致,VMware里也有类似情况,getallvms展示的UUID对应BIOS UUID,另有一个instanceUuid用于平台内部管理。

问:Windows虚拟机uuid怎么查最简单?
答:在Windows虚拟机内打开PowerShell,输入(Get-CimInstance Win32_ComputerSystemProduct).UUID,回车即得结果,系统是Windows 7或更老版本时,改用wmic csproduct get uuid。

说到底,虚拟机查看UUID命令没有一条万能路径,先确认自己的场景是虚拟机内部还是宿主机,再选对应命令,三分钟就能拿到结果,想在迁移后保持UUID稳定,记得关注虚拟化平台的克隆和复制选项,别让默认行为偷偷把你的UUID换掉。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱