TL; DR:
Observei que, se eu fizer uma alteração no registro e, em seguida, desligar o sistema Windows 10, a alteração no registro não aparecerá após a reinicialização.
Também notei que a exclusão de um arquivo de hibernação pode afetar a capacidade de uma ferramenta de recuperação do Linux fazer alterações no registro do Windows em um estado offline. A ferramenta parece incapaz de fazer alterações persistentes após a exclusão de um arquivo de hibernação. Vou listar exemplos específicos abaixo.
Exemplo 1:
- Eu adiciono uma chave chamada "1111" em "HKLM \ SOFTWARE". Então desligo minha caixa com força, pressionando o botão liga / desliga por 5 segundos.
- Quando puxo o registro de volta, essa chave e seus valores desaparecem:
- (Estas imagens foram editadas para fins de formatação)
Exemplo 2 :
- Faça uma alteração no registro (usando o regedit)
- Hibernar o sistema
- Inicialize em uma ferramenta de recuperação Linux
- Exclua o arquivo de hibernação para montar o disco.
- Leia o registro do Windows (na ferramenta de recuperação)
- A alteração do registro se foi.
Isso parece equivalente a um desligamento difícil na caixa.
Exemplo 3:
Vejo um comportamento estranho quando:
- Hibernar a caixa
- Inicialize em uma ferramenta de recuperação Linux e exclua o arquivo de hibernação
- Faça alterações no registro (na ferramenta de recuperação)
- Reinicie a caixa
Essas alterações também não são refletidas no registro.
Então, o que está acontecendo aqui?
- Quando o Windows 10 grava as alterações do registro no disco?
- Por que a exclusão de um arquivo de hibernação (no Exemplo 3) impede que as alterações no registro feitas na ferramenta de recuperação sejam refletidas na próxima inicialização?
Na esperança de obter alguns esclarecimentos!
fonte
Respostas:
TL; DR: Desligue o sistema corretamente.
A hibernação não tem nada a ver com o desligamento, está intimamente relacionada à suspensão para RAM (suspensão), exceto com o conteúdo da RAM enviado para o disco para que seja lida novamente e a operação reiniciada exatamente de onde o sistema parou .
Se você deseja que as alterações persistam, é necessário desativar a hibernação e o Windows Fastboot (que é um subconjunto da hibernação). Ou você pode realmente reiniciar em vez de hibernar e reiniciar.
O motivo das alterações não persistirem é porque elas ainda não foram gravadas no disco, exceto no arquivo de hibernação. Que você está excluindo, o que significa que o sistema de arquivos pode ter que se reparar e voltar ao estado "último bem conhecido".
Enquanto o sistema estiver em hibernação, haverá várias estruturas principais do sistema de arquivos que podem não ter sido gravadas no disco e estão na RAM. O sistema, após sair da hibernação, espera que o disco esteja em um estado muito particular e é possível que caches de disco e arquivos importantes do sistema sejam salvos no arquivo de hibernação e não no disco real.
Se você fizer um desligamento adequado , o Windows liberará adequadamente a memória de trabalho no disco e desmontará o disco corretamente antes de desligar.
Para forçar um desligamento adequado, abra um prompt de comando e digite
/s
é "desligamento",/f
forçar e/t 0
significar "agora" (tempo = 0 segundos)Ou você pode simplesmente desativar o fastboot e a hibernação.
Leia mais em HowtoGeek: O desligamento não encerra totalmente o Windows 10 (mas a reinicialização)
Relacionado a você fazer um desligamento forçado, o problema é que não há garantia de que o Windows grave as alterações em disco no mesmo milissegundo (ou mesmo minuto) que você faz a alteração. Quase certamente será escrito em alguns minutos, mas a probabilidade de realmente ter sido escrita aumentará com o tempo. É improvável que ser escrito imediatamente, em seguida, próximo ao tempo que você fazer a mudança a probabilidade aumenta bruscamente, e quase certamente foram escritos dentro de uma hora.
O problema é que, ao forçar um desligamento forçado, você não está dando ao sistema a chance de gravar com segurança as alterações no disco.
A maioria dos sistemas de arquivos modernos são escritos para fazer alterações da maneira mais segura possível. No passado, eles eram referidos como "atômicos", como na mudança aconteceu ou não.
Hoje, nós os conhecemos como sistemas de arquivos com registro diário, porque eles mantêm um log de operações que podem acontecer, que podem ser revertidas ou revertidas em caso de falha do sistema e reinicialização. Na inicialização, após uma falha de energia, o sistema verifica o diário e, para cada transação, verifica se os dados reais do arquivo estão gravados no disco e estão "em boas condições". Se for, a transação será encaminhada para a frente e concluída, caso contrário, será revertida para os dados antigos.
Ao usar essa ordem, o disco está quase sempre em um estado fácil de reparar.
Mas, ao forçar o sistema a desligar inesperadamente, você não pode garantir se a transação avançou o suficiente para avançar no reparo, e as chances são de que um sistema operacional como o Linux não se importe tanto quanto o Windows com o histórico de transações e seja mais provável do que não apenas fazer alterações que revertam tudo para trás e não para frente.
Se você reiniciou o Windows, ele pode tentar consertar o disco corretamente, pois possui um conhecimento mais íntimo do sistema de arquivos.
fonte
Conforme documentado na página MSDN para
RegFlushKey
:Isso sugere que, além de liberar imediatamente uma chave específica para o disco (que bloqueia todo mundo fora do registro até que a liberação seja concluída), o registro é liberado automaticamente periodicamente: não é dado um tempo, mas, presumivelmente, é pelo menos mais do que o tempo que você esperou entre escrever a chave e o desligamento forçado. Além disso, ele é liberado no desligamento, como você já havia descoberto.
Você pode usar a
RegFlushKey
função no software que manipula a chave mencionada ou criar uma ferramenta adicional para forçar a gravação imediata de uma chave do Registro no disco, se isso for crucial para o seu caso de uso.fonte
sync
fez corar o registro para o disco. Isso simplesmente não faria sentido. Por que liberar o cache do sistema de arquivos (que é usado pelo gerenciador de configuração, e não o contrário) repentinamente liberou o cache do próprio gerenciador de configuração? Ele nem sabe qual é a estrutura do cache de nível superior, se é que existe algum.TL; DR: É muito cuidadoso fazer isso no momento certo .
A documentação em
FSCTL_MARK_AS_SYSTEM_HIVE
tem isto a dizer:Não acredito que haja mais detalhes disponíveis publicamente do que isso.
Lembre-se de que liberar o sistema de arquivos não implica liberar o registro , porque o registro pode executar o armazenamento em cache na parte superior do sistema. Para liberar o registro primeiro, você precisa causar de alguma forma
NtFlushKey
ouZwFlushKey
ser chamado pela sua chave de interesse.fonte