GUID duplicado na máquina virtual

9

Eu consegui reproduzir com sucesso o mesmo GUID (sim, você leu corretamente) usando um simples programa C # .NET quando revertendo instantâneos dentro do VMWare. A máquina virtual do cliente é o Windows Server 2008 R2 de 64 bits. Eu tentei clientes do Windows XP e Windows 7 de 64 bits com resultados malsucedidos. A versão do VMWare que estou usando é 6.5.3 build-185404. Tudo o que faço é reverter para um instantâneo anterior, copiar o programa de rascunho para a máquina virtual e depois executá-lo.

Algumas evidências para aqueles que não estão convencidos (não culpo você): link

Aqui está o código para o programa de rascunho:

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();
        }
    }
}

Alguém poderia lançar alguma luz sobre como isso é possível, dado que a contagem de ticks é diferente?

    
por Brent Newbury 20.04.2011 в 13:26
fonte

3 respostas

5

Você pode postar um dos GUIDs? A imagem parece estar quebrada.

Veja link especificamente "Algoritmo". É provável que a plataforma que você está usando no Windows 2008 R2 x64 esteja usando os GUIDs da versão 4. Nesse caso, o GUID é gerado usando dados pseudo-aleatórios. Como a CPU está no mesmo estado porque você está revertendo-a do que eu suponho ser um instantâneo de memória (correto?) E não um instantâneo desligado, você está recebendo números duplicados do gerador pseudo-aleatório.

É razoavelmente comum que o sistema operacional inicialize uma semente pseudo-aleatória uma vez na inicialização, puxando sequencialmente os números da lista para fazer a aparência de um número aleatório. Isso acontece no mundo do Linux e é provável que você esteja observando o mesmo comportamento. Como a sequência de números não foi reinicializada e você está revertendo para uma imagem de memória, você está recebendo os mesmos números.

Usando o GUID Generator do VS 2010, obtive um GUID V4 no Windows 7.

Para corrigir esse problema, eu primeiro tentaria aplicar correções de segurança do Windows, o que pode corrigir o problema. O problema provavelmente está no ole32.dll, que é chamado no método Guid.NewGuid e, possivelmente, em versões mais recentes que propagam o pseudo-número aleatório, já que você não obteve isso em versões mais recentes do Windows.

Caso contrário, para contornar esse problema na plataforma atual, você poderia:

  1. Gere seu próprio GUID a partir dos dados MAC e de tempo, conforme especificado na especificação OSF.

  2. Tente ligar para o novo Random () antes da sua chamada NewGuid. Isso provavelmente seria um tiro longo, mas fácil de testar.

  3. Não reverta de uma imagem de memória.

Espero que isso ajude. Sem dúvida, você não é o primeiro a ter esse problema, e é por isso que as plataformas mais recentes provavelmente voltaram ao método anterior de usar dados de tempo e MAC.

    
por Bernie White 12.09.2011 / 13:54
fonte
0

Não é garantido que os GUIDs sejam exclusivos, mas a probabilidade é extremamente pequena. Talvez você tenha (des) sorte. :)

    
por Kon 20.04.2011 / 13:30
fonte
0

Eu não esperaria QUALQUER exclusividade dos GUIDs gerados em uma máquina sem uma placa de rede física. É praticamente garantido que o endereço MAC de um cartão virtual se repita em clones da mesma VM.

    
por Seva Alekseyev 13.09.2011 / 01:47
fonte