在虚拟机上复制GUID

本文关键字:GUID 复制 虚拟机 | 更新日期: 2023-09-27 17:52:18

我已经成功地使用一个简单的c#复制了相同的GUID(是的,你没有看错)。. NET scratch程序在VMWare内部恢复快照时。客户端虚拟机为Windows Server 2008 R2 64位。我试过Windows XP和Windows 7 64位客户端,结果都不成功。我使用的VMWare版本是6.5.3 build-185404。我所做的就是恢复到以前的快照,将临时程序复制到虚拟机中,然后运行它。

给那些不相信的人一些证据(我不怪你):https://i.stack.imgur.com/z3esp.png

下面是scratch程序的代码:

using System;
using System.Globalization;
namespace DuplicateGuid
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0} {1}", Guid.NewGuid(), DateTime.Now.Ticks));
            Console.ReadKey();
        }
    }
}

有没有人能解释一下,在蜱虫计数不同的情况下,这是如何可能的?

在虚拟机上复制GUID

可以请你张贴一个guid吗?图片似乎坏了。

具体见http://en.wikipedia.org/wiki/Globally_unique_identifier"算法"。您在Windows 2008 R2 x64下使用的平台可能正在使用版本4的guid。在本例中,GUID是使用伪随机数据生成的。由于CPU处于相同的状态,因为您正在从我假设的内存快照(正确吗?)还原它,而不是断电快照,您将从伪随机生成器获得重复的数字。

操作系统在启动时初始化一个伪随机种子,顺序地从列表中提取数字,使其看起来像一个随机数,这是相当常见的。这种情况发生在Linux世界中,您很可能正在观察到相同的行为。因为数字序列没有被重新初始化,你正在返回到内存映像,你得到的是相同的数字。

使用GUID生成器从VS 2010我得到了一个V4 GUID在Windows 7。

要解决这个问题,我将首先尝试应用Windows安全修复程序,这可能会解决这个问题。问题很可能出在Guid中调用的ole32.dll中。NewGuid方法和可能较新的版本重新播种伪随机数,因为在较新的Windows版本中没有得到这个。

否则,要在当前平台上解决此问题,您可以:

  1. 根据OSF规范中指定的MAC和时间数据生成自己的GUID

  2. 尝试在NewGuid调用之前调用new Random()。

  3. 不要从内存映像中恢复

希望这对你有帮助。毫无疑问,你不是第一个遇到这个问题的人,这就是为什么较新的平台可能会恢复到以前使用MAC和时间数据的方法。

guid不能保证是唯一的,但这种可能性非常小。也许你运气不好。:)

我不希望在没有物理网卡的机器上生成任何惟一的guid。虚拟卡的MAC地址实际上可以保证在同一虚拟机的克隆上重复。