Estado do cache na raiz de virtualização

O provedor usa o sistema de arquivos local na raiz de virtualização como um cache dos itens que gerencia. Um item (arquivo ou diretório) pode estar em um dos seis estados no sistema de arquivos local:

  • Máquina

    O item não existe localmente no disco. Ele é projetado, ou seja, sintetizado, durante enumerações de seu diretório pai. Os itens virtuais são mesclados com todos os itens que podem existir no disco para apresentar o conteúdo completo do diretório pai.

  • Espaço reservado

    Para arquivos: o conteúdo do arquivo (fluxo de dados primário) não está presente no disco. Os metadados do arquivo (nome, tamanho, carimbos de data/hora, atributos etc.) são armazenados em cache no disco.

    Para diretórios: alguns ou todos os descendentes imediatos do diretório (os arquivos e diretórios no diretório) não estão presentes no disco, ou seja, eles ainda são virtuais. Os metadados do diretório (nome, carimbos de data/hora, atributos etc.) são armazenados em cache no disco.

  • Espaço reservado hidratado

    Para arquivos: o conteúdo e os metadados do arquivo foram armazenados em cache no disco. Também chamado de "arquivo parcial".

    Para diretórios: um diretório que foi criado no disco como um espaço reservado nunca se torna um diretório de espaço reservado hidratado. Isso permite que o provedor adicione ou remova itens do diretório em seu repositório de backup e faça com que essas alterações sejam refletidas no cache local.

  • Espaço reservado sujo (hidratado ou não)

    Os metadados do item foram modificados localmente e não são mais um cache de seu estado no repositório do provedor. Observe que criar ou excluir um arquivo ou diretório em um diretório de espaço reservado faz com que esse diretório de espaço reservado se torne sujo.

  • Arquivo/diretório completo

    Para arquivos: o conteúdo do arquivo (fluxo de dados primário) foi modificado. O arquivo não é mais um cache de seu estado no repositório do provedor. Os arquivos que foram criados no sistema de arquivos local (ou seja, que não existem no repositório do provedor) também são considerados arquivos completos.

    Para diretórios: diretórios que foram criados no sistema de arquivos local (ou seja, que não existem no repositório do provedor) são considerados diretórios completos. Um diretório que foi criado no disco como um espaço reservado nunca se torna um diretório completo.

  • Lápide

    Um espaço reservado oculto especial que representa um item que foi excluído do sistema de arquivos local. Quando um diretório é enumerado, o ProjFS mescla o conjunto de itens locais (espaços reservados, arquivos completos etc.) com o conjunto de itens projetados virtuais. Se um item aparecer nos conjuntos local e projetado, o item local terá precedência. Se um arquivo não existir no sistema de arquivos local, não haverá nenhum estado local, portanto, ele aparecerá na enumeração . No entanto, se esse item tivesse sido excluído, fazer com que ele aparecesse na enumeração seria inesperado. Substituir um item excluído por uma marca de exclusão resulta nos seguintes efeitos:

    • Enumerações para não revelar o item.
    • O arquivo é aberto que espera que o item exista com falha, por exemplo, "arquivo não encontrado".
    • Cria arquivos que esperam ter êxito somente se o item não existir com êxito; O ProjFS remove a lápide como parte da operação.

Para ilustrar os estados acima, considere a sequência a seguir, considerando um provedor ProjFS que tenha um único arquivo "foo.txt" localizado na raiz de virtualização C:\root.

  1. Um aplicativo enumera C:\root. Ele vê o arquivo virtual "foo.txt". Como o arquivo ainda não foi acessado, o arquivo não existe no disco.
  2. O aplicativo abre um identificador para C:\root\foo.txt. O ProjFS informa ao provedor para criar um espaço reservado para ele.
  3. O aplicativo lê o conteúdo do arquivo. O provedor fornece o conteúdo do arquivo ao ProjFS e é armazenado em cache para C:\root\foo.txt. O arquivo agora é um espaço reservado hidratado.
  4. O aplicativo atualiza o carimbo de data/hora Última Modificação. O arquivo agora é um espaço reservado sujo hidratado.
  5. O aplicativo abre um identificador para acesso de gravação ao arquivo. C:\root\foo.txt agora é um arquivo completo.
  6. O aplicativo exclui C:\root\foo.txt. O ProjFS substitui o arquivo por uma marca de exclusão. Agora, quando o aplicativo enumera C:\root, ele não vê foo.txt. Se ele tentar abrir o arquivo, a abertura falhará com ERROR_FILE_NOT_FOUND.