Ok, como todos os piores tipos de problemas, este tem duas partes.
- O Windows atualiza a hora do sistema a cada hora para o relógio do hardware. (Observe que também faz isso na inicialização, o que acelerou o teste)
- O Parallels estava virtualizando o relógio do hardware incorretamente. Eu tenho que dizer que estou usando uma versão antiga do Parallels (PD9), eu espero que eles tenham consertado isso agora.
Eu não encontrei nenhuma declaração definitiva sobre isso, mas eu vi muitas pessoas no meu lugar confirmando a mesma coisa: a cada hora o Windows lê o Real Time Clock (RTC, ou o clock do hardware no BIOS) e re-sincronizando com ele. Veja as referências: # 1 , # 2 , # 3 , # 4 .
Obviamente, a maioria deles tem a ver com defeitos no RTC, baterias de BIOS simples ou inicialização dupla com um sistema operacional * nix (que armazena o UTC no RTC, não o horário local). Mas o fato é que o Windows fará isso a cada hora. Ainda não encontrei uma maneira de desabilitar isso.Além disso, o Parallels não mantém um relógio de hardware per se, em vez disso, ele mantém um deslocamento (do horário do sistema) no arquivo de configuração da VM. O problema é que esse deslocamento não leva em conta corretamente o horário de verão. Por exemplo, eu tenho um host Mac em Madri, na Espanha, que normalmente é UTC + 1, mas atualmente no horário de verão é UTC + 2. Quando defino a hora na minha máquina convidada, o Parallels calcula a diferença entre o horário do meu convidado e o fuso horário do host SEM DST.
Vamos fazer um exemplo:
Hora atual é UTC 00:00.
O horário padrão de Madri seria UTC + 1, então 01:00. Exceto é atualmente DST, UTC + 2, 02:00.
Eu configurei minha máquina convidada para 02:00, o Windows tenta gravar isso no RTC, o Parallels calcula a diferença entre meu horário de convidado e o Padrão de Madri (01:00) e salva <TimeShift>-3600</TimeShift>
no arquivo de configuração (o arquivo só é atualizado reinicialização, imagino que essa variável seja rastreada na memória durante o tempo de execução). Assim, toda vez que o Windows lê o RTC (o Parallels lê a hora do sistema host), ele acha que o RTC está configurado para o HostTime-3600s (-1 hr) e atualiza o horário.
Eu sei que minha máquina de convidado tem uma configuração complicada (configurada manualmente no Cairo para encontrar um fuso horário sem DST), achei que daria à Parallels o benefício da dúvida e verificaria se ela funcionava corretamente com guest e host configurados como o fuso horário correto (Madri com DST). Não, ainda está estragado.
Solução:
Eu não consigo encontrar uma maneira de desativar o Windows de ler o RTC a cada hora, então, por enquanto, eu forcei a máquina host a usar um fuso horário que não usa DST (por exemplo, Cairo, UTC + 2). Isso funciona. Quando eu salvo meu horário de convidado para 02:00, e o horário do Cairo (UTC + 2) é 02:00, o Parallels salva <TimeShift>0</TimeShift>
.
Feio.