从RAID配置获取硬盘驱动器串行的潜在问题

时间:2012-10-08 17:56:03

标签: c# .net virtual-machine identity

我目前有一个函数可以通过WMI调用返回虚拟机的硬盘驱动器序列,这在实际的物理硬盘上运行时效果很好。但是,当我在具有虚拟磁盘的虚拟机上运行该功能时,硬盘驱动器序列总是以1和0的相同系列返回。我正在尝试使用此技术来识别特定的机器。是否有更可靠的方法来检索某种标识符,该标识符标识(虚拟)机器中可能不会更改的硬件?

作为一个说明,我已经将MAC地址作为建议提供给我,但如果必须更换它必须更换的网卡,我不希望我的软件中断。

我还关注通过RAID配置的系统硬盘可能返回的内容,因为此序列需要与每个调用保持一致。但是,我没有配置RAID系统来测试它,所以我不确定首先会返回什么。

编辑 我已经找到了将软件锁定到虚拟机的可靠方法,即使序列号可能不是唯一的,因此VM部分不再存在一个问题。但是,我仍然不确定如何通过某些RAID配置返回,并且如上所述,我没有足够的RAID配置机器进行测试,更不用说要测试几种配置了。对此非常感谢。

这是HD串口功能:

string Win32_Class = string.Empty;
string Win32_Property = string.Empty;
string systemDrive = null;
try
{
    systemDrive = System.Environment.GetFolderPath(System.Environment.SpecialFolder.System).Substring(0, 2);
    Win32_Class = "Win32_LogicalDisk";
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(string.Format("SELECT * FROM {1} WHERE DeviceID='{0}'", systemDrive, Win32_Class)))
    {
        foreach (ManagementObject logicalDisk in searcher.Get())
        {
            Win32_Class = "Win32_DiskPartition";
            foreach (ManagementObject partition in logicalDisk.GetRelated(Win32_Class))
            {
                Win32_Class = "Win32_DiskDrive";
                foreach (ManagementObject diskDrive in partition.GetRelated(Win32_Class))
                {
                    Win32_Class = "Win32_PhysicalMedia";
                    foreach (ManagementObject diskMedia in diskDrive.GetRelated(Win32_Class))
                    {
                        Win32_Property = "SerialNumber";
                        mySystemDeviceSerial = diskMedia[Win32_Property].ToString().Trim();
                    }
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

如果要标识VM实例,可以使用Win32_ComputerSystemProduct实例的UUID属性。在现实世界中,这映射到主板上的ID。在VM中,无论驱动器是什么,都会为每个VM配置返回唯一值(但我不确定如果克隆或移动VM会发生什么)。

答案 1 :(得分:1)

您可以使用“逻辑”磁盘的序列号。如果重新分区磁盘,这将更改。如果更改了冗余RAID设置的一个驱动器,它将不会更改。这是存储在块级别的内容,因此实际的存储设置无关紧要。

您希望Win32_LogicalDisk的VolumeSerialNumber属性用于安装卷。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx