Compartilhar via


Solucionando Problemas: Sincronização de tempo/horas no Hyper-V (pt-BR)

Introdução

Solucionando problemas de horas entre o Host's Hyper-V e Máquinas Virtuais.

Aplica-se

Windows Server 2008 R2

 

 Solucionando o Problema:

Há muita confusão sobre como funciona a sincronização de tempo no Hyper-V

Há múltiplos problemas que existem em torno de manter o tempo dentro de máquinas virtuais, e o Hyper-V soluciona estes problemas de maneiras diferentes.

Problema # 1 – máquinas virtuais em execução perde o tempo.

Enquanto todos os computadores contêm um relógio de hardware (o chamado RTC – ou relógio de tempo real) que à maioria dos sistemas operacionais não dependem desse relógio e em vez disso, ler o tempo deste relógio uma vez (durante a inicialização) e, em seguida, eles usam suas próprias rotinas internas para calcular quanto tempo passou.

O problema é que essas rotinas internas fazem suposições sobre como o hardware subjacente se comporta (Com qual frequência as interrupções são entregues) e estas suposições não levam em conta o fato de que as coisas são diferentes dentro de uma máquina virtual. O fato de várias máquinas virtuais precisarem ser programadas para serem executadas no mesmo hardware físico, invariavelmente, resulta em pequenas diferenças nestes sistemas subjacentes. O resultado disso é que o tempo parece à deriva dentro de máquinas virtuais.

Uma coisa que você deve estar ciente aqui: A taxa na qual o tempo em uma máquina virtual a deriva é afetado pela carga total do sistema do servidor Hyper-V. Mais máquinas virtuais fazendo mais coisas significa o tempo elevado mais rápidamente.

A fim de lidar com a dispersão de tempo em uma máquina virtual – você precisa ter algum processo que recebe regularmente o tempo real de uma fonte confiável e atualiza a hora em uma máquina virtual.

Hyper-V fornece o tempo de integração de serviços de sincronização e faz isso por você. A maneira de fazer isso é fazendo as leituras do tempo do sistema de gerenciamento operacional e enviá-los para o sistema operacional convidado. Uma vez dentro do sistema operacional convidado – estas leituras de tempo são então entregues ao tempo que o Windows mantem a infraestrutura na forma de um provedor de tempo do Windows (você pode ler mais sobre isso aqui: http://msdn.microsoft.com/en-us/ library/bb608215.aspx). Estas amostras de tempo são ajustadas corretamente por qualquer diferença de fuso horário entre o sistema operacional de gestão e do sistema operacional convidado.

Problema # 2 – Estado Salvo de máquinas virtuais / snapshots com hora errada, quando estes são restaurados.

Quando restaurar uma máquina virtual a partir de um estado salvo ou de um snapshot que colocamos de volta em conjunto o estado da memória e execução do sistema operacional convidado para corresponder exatamente ao que era quando o estado salvo / snapshot foi tirado. Isto inclui o tempo calculado pelo sistema operacional convidado. Portanto, se o snapshot foi tirado há um mês – a data e a hora irá informar que ainda é um mês atrás.

Curiosamente, neste momento, estaremos relatando a hora correta (com algumas ressalvas), no RTC sistemas. Mas, infelizmente, o sistema operacional convidado não tem idéia de que nada de significativo aconteceu – por isso não sabe ir e verificar a RTC, mas continuar com o seu próprio tempo calculado internamente.

Para lidar com esse Hyper-V de serviço o tempo de integração de sincronização detecta sempre que tenha de voltar de um estado ou instantâneo salvo, e corrige a tempo. Ele faz isso através da emissão de uma solicitação de mudança de tempo através do modo de usuário normal interfaces fornecidas pelo Windows. O efeito disto é que ele parece exatamente como o usuário sentou-se e mudou a hora manualmente. Esse método também ajusta corretamente para as diferenças de fuso horário entre o sistema operacional de gestão e do sistema operacional convidado.

Problema # 3 – Não há correta “valor RTC” quando uma máquina virtual é iniciado

Como já mencionei – computadores físicos têm um RTC que os sistemas operacionais olham quando primeiro boot para chegar a tempo. Este relógio de tempo real é apoiado por uma pequena bateria (você provavelmente já viu a bateria a si mesmo se você tem todos os separaram um computador). Infelizmente, as máquinas virtuais não têm qualquer “baterias”. Quando uma máquina virtual é desligada não existe nenhum componente que controla o tempo para isso. Em vez disso – sempre que você inicia uma máquina virtual que tomar o tempo do sistema operacional de gestão e colocá-lo no relógio de tempo real da máquina virtual.

Isso é feito sem o uso do Hyper-V do tempo de integração de servidores de sincronização (isso acontece muito antes de os serviços de integração de ter carregado).

A desvantagem desta abordagem é que este não leva em conta as diferenças de tempo potencial da zona entre o sistema operacional de gestão e do sistema operacional convidado. A razão para isto é que “fusos horários” são uma construção do software que é executado em uma máquina virtual – e não é comunicada ao hardware virtual de qualquer maneira. Portanto – em suma – quando iniciar uma máquina virtual não há nenhuma maneira de saber o fuso horário do sistema operacional convidado acredita que está dentro.

Uma redução parcial que temos para esse problema é que quando o Hyper-V o tempo de sincronização de cargas componente pela primeira vez – ele faz um modo de usuário ajuste inicial do tempo para garantir que o tempo fica corrigido o mais rápido possível (usando a mesma técnica como discutido no problema n º 2).

Então agora que você entende como tudo isso funciona – vamos discutir alguns problemas comuns e questões em torno de máquinas virtuais e sincronização de tempo.

Pergunta # 1 – Eu tenho uma máquina virtual que está configurada para um fuso horário diferente para o sistema operacional de gestão. Se eu desativar o componente de sincronização de tempo do Hyper-V?

Não, não, não, não, não, não, não. E volto a dizer – não. Como eu mencionei acima – toda a sincronização de tempo que é feita pelo Hyper-V serviço de integração de tempo de sincronização é o fuso horário consciente. Se você desabilitar o Hyper-V integração tempo de serviço de sincronização você pode desabilitar todos os aspectos de tempo de sincronização do Hyper-V que são conscientes de fuso horário – e só deixar a sincronização inicial RTC ativo – o que não é consciente de fuso horário.

Isso significa que suas máquinas virtuais irão iniciar a partir do fuso horário errado e, em seguida sendo corrigido logo que o Hyper-V o tempo de sincronização de cargas serviço de integração para a inicialização no fuso horário errado e permanecer no fuso horário errado.

Pergunta # 2 – Existe alguma maneira que eu posso parar o Hyper-V de colocar o horário errado no RTC na inicialização?

Em resumo, não. Temos de colocar alguma coisa lá dentro – e que é a melhor coisa que temos de trabalhar.

Pergunta # 3 – Você não pode utilizar a hora UTC na RTC, para que o tempo correto é estabelecido quando as botas de máquina virtual?

UTC (que é a versão de computador mal-humorado de dizer GMT) resolveria esse problema muito bem com apenas um problema. Windows não oferece suporte a hora UTC na BIOS (o Linux). Então, enquanto isso iria resolver o problema para a nossa base de usuários Linux rodando – o fato da matéria é que a maioria dos nossos utilizadores executam o Windows – e isso não iria trabalhar para eles.

Questão 4 – Que tal se eu estou usando uma fonte de sincronização de tempo diferentes (por exemplo, no domínio do tempo ou em um servidor remoto em tempo)?

Hyper-V sincronização de tempo foi projetado para “se dar bem” com outras fontes de sincronização de tempo. Você não precisa desativar a sincronização do Hyper-V de tempo para usar uma fonte de sincronização de tempo diferentes – enquanto ele atravessa a infraestrutura de sincronização de tempo do Windows.

Na verdade – se você estiver executando um controlador de domínio dentro de uma máquina virtual eu recomendo que você deixe o Hyper-V sincronização de tempo, mas permite que você também configurar uma fonte de tempo externa. Você pode fazer isso indo a este artigo KB: http://support.microsoft.com/kb/816042 e seguir os passos descritos na seção “Configurando o serviço Hora do Windows para usar uma fonte externa de tempo” seção.

Eu deveria ter mencionado: desde máquinas virtuais tendem a perder tempo muito mais rápido do computador físico, você precisa configurar qualquer fonte de tempo externa a ser verificado com frequência. Uma vez a cada 15 minutos é um bom lugar para começar.

Pergunta # 5 – Como posso verificar qual a fonte que o tempo está sendo usado pelo Windows dentro de uma máquina virtual?

Isso é fácil de fazer. Basta abrir um prompt de comando administrativo e executar “w32tm / consulta / fonte”. Se você estiver sincronizando com um computador remoto – o seu nome deve ser listado. Se você estiver usando o Hyper-V integração tempo de serviço de sincronização, você deverá ver o seguinte resultado:

Se você vê essa saída:

Isso significa que não há sincronização de tempo em curso para esta máquina virtual. Isso é uma coisa muito ruim – como o tempo vai nos levar para dentro da máquina virtual.

Questão # 6 – Espere um minuto! Minha máquina virtual deve ser a sincronização com o domínio (ou um servidor externo) – mas quando eu executo o comando ele me diz que o Hyper-V provedor de sincronização de tempo está sendo usado! Como faço para corrigir isso!

Eu não sei por que isso acontece – mas às vezes acontece. A primeira coisa que você deve fazer é verificar se o domínio não tem uma fonte de tempo configurado corretamente autoritário. Houve um pequeno número de vezes em que eu já vi esse problema seja causado pela falta de uma fonte de tempo oficial.

Alternativamente – você pode “desativar parcialmente” sincronização de tempo Hyper-V. A razão porque eu digo “parcialmente desativar” é que você não quer desligar os aspectos do Hyper-V sincronização de tempo que corrigir o tempo após uma máquina virtual já foi iniciado pela primeira vez, ou depois que a máquina virtual volta a partir de um salva-estado. Nenhuma fonte de sincronização outros o tempo pode resolver estas situações com elegância.

Felizmente – não existe uma maneira de deixar esta funcionalidade intacta, mas ainda garantir que o dia-a-dia de sincronização de tempo é feita por uma fonte de tempo externa. O truque coisa chave aqui é que é possível desabilitar o Hyper-V provedor de sincronização de tempo na infraestrutura de sincronização de tempo do Windows – sem deixar o serviço executado e ativado no Hyper-V.

Para fazer isso você vai precisar fazer logon na máquina virtual, abra um prompt de comando administrativo e execute os seguintes comandos:

reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\VMICTimeProvider /v Enabled /t reg_dword /d 0

Este comando pára W32Time de usar o Hyper-V integração tempo de serviço de sincronização de momento a sincronização momento. Lembre-se de mais cedo neste post que não passe pela infraestrutura de sincronização de tempo do Windows para corrigir o tempo em caso de inicialização da máquina virtual / restauração do estado ou instantâneo salvo. Então, essas operações não são afetados.

w32tm/config /syncfromflags: DOMHIER /update

Este comando informa ao Windows para ir e olhar para a fonte de melhor tempo na hierarquia do domínio. Se você quiser usar um servidor de tempo externo ao invés disso você pode usar os comandos encontrados aqui: http://technet.microsoft.com/en-us/library/cc784553 (WS.10) aspx.

w32time net stop & start w32time net

resync w32tm / / force

Estes dois comandos apenas “chutar o tempo de serviço do Windows” para verificar se as configurações alterações entrem em vigor imediatamente.

consulta w32tm / source

Este último comando deve confirmar que tudo está funcionando conforme o esperado.

Quando você executar esses comandos você deve ver algo como isto:

Pergunta n º 7 – Eu tenho uma máquina virtual que tenha chegado antes do tempo, e ele nunca fica corrigido com o tempo correto. O que está acontecendo aqui?

Como regra geral, quando o tempo levado dentro de uma máquina virtual que corre mais devagar do que no mundo real, e o tempo cai para trás. Nós sempre detectar e corrigir isso.

relatórios Entretanto, no passado, tivemos problemas de software causados quando o Hyper-V o tempo de serviço de sincronização de integração decidir ajustar o tempo de volta – porque acredita que a máquina virtual está à frente do tempo. Para lidar com este problema (raro) – colocamos a lógica do nosso serviço de integração que não vai mudar o tempo, se a máquina virtual é mais do que 5 segundos à frente do computador físico.

11/22 UPDATE: Fui convidado como ter a máquina virtual em um fuso horário diferente do servidor Hyper-V afetaria isso. A resposta curta é que não. A verificação de cinco segundo é feito depois que fizemos a tradução zona de tempo necessário.

Pergunta n º 8 – Quando eu devo desabilitar o Hyper-V do serviço de sincronização de tempo (tanto nas configurações da máquina virtual, ou dentro do sistema operacional convidado)?

Nunca.

Definitivamente há momentos em que você vai querer aumentar a funcionalidade do Hyper-V serviços de integração de tempo com uma fonte de tempo remoto (seja ela uma fonte de domínio ou um servidor de horário externo), mas a única maneira de obter a melhor experiência em torno de boot da máquina virtual / operações de restauração é deixar o Hyper-V serviços de integração em tempo habilitado.

Conclusão

Este artigo apresentou a resolução de problemas entre e integração de tempo entre o Host Hyper-V e as máquinas virtuais em execução dentro do Host.

Este artigo foi escrito originalmente por:
Gustavo Santos
Blog: http://virtualizing.wordpress.com
Twitter: @gusttavosantos