Udostępnij za pośrednictwem


Stan pamięci podręcznej w katalogu głównym wirtualizacji

Dostawca używa lokalnego systemu plików w katalogu głównym wirtualizacji jako pamięci podręcznej elementów, którymi zarządza. Element (plik lub katalog) może znajdować się w jednym z sześciu stanów w lokalnym systemie plików:

  • Wirtualny

    Element nie istnieje lokalnie na dysku. Jest on przewidywany, tj. syntetyzowany, podczas wyliczania katalogu nadrzędnego. Elementy wirtualne są scalane ze wszystkimi elementami, które mogą istnieć na dysku, aby przedstawić pełną zawartość katalogu nadrzędnego.

  • Symbol zastępczy

    W przypadku plików: zawartość pliku (podstawowy strumień danych) nie jest obecna na dysku. Metadane pliku (nazwa, rozmiar, znaczniki czasu, atrybuty itp.) są buforowane na dysku.

    W przypadku katalogów: niektóre lub wszystkie elementy potomne katalogu (pliki i katalogi w katalogu) nie są obecne na dysku, tj. są one nadal wirtualne. Metadane katalogu (nazwa, znaczniki czasu, atrybuty itp.) są buforowane na dysku.

  • Nawodniony symbol zastępczy

    W przypadku plików: zawartość i metadane pliku zostały buforowane na dysku. Nazywany również "plikiem częściowym".

    W przypadku katalogów: katalog utworzony na dysku jako symbol zastępczy nigdy nie staje się uwodnionym katalogiem zastępczym. Dzięki temu dostawca może dodawać lub usuwać elementy z katalogu w magazynie zapasowym i uwzględniać te zmiany w lokalnej pamięci podręcznej.

  • Brudny symbol zastępczy (nawodniony lub nie)

    Metadane elementu zostały zmodyfikowane lokalnie i nie jest już pamięcią podręczną jego stanu w magazynie dostawcy. Pamiętaj, że utworzenie lub usunięcie pliku lub katalogu w katalogu zastępczym powoduje, że katalog zastępczy staje się zanieczyszczony.

  • Pełny plik/katalog

    W przypadku plików: zawartość pliku (podstawowy strumień danych) została zmodyfikowana. Plik nie jest już pamięcią podręczną stanu w magazynie dostawcy. Pliki, które zostały utworzone w lokalnym systemie plików (tj. które nie istnieją w magazynie dostawcy w ogóle) są również uważane za pełne pliki.

    W przypadku katalogów: katalogi, które zostały utworzone w lokalnym systemie plików (tj. które nie istnieją w magazynie dostawcy w ogóle), są uważane za pełne katalogi. Katalog utworzony na dysku jako symbol zastępczy nigdy nie staje się pełnym katalogiem.

  • Nagrobek

    Specjalny ukryty symbol zastępczy reprezentujący element, który został usunięty z lokalnego systemu plików. Gdy katalog jest wyliczany ProjFS scala zestaw elementów lokalnych (symboli zastępczych, pełnych plików itp.) z zestawem elementów wirtualnych przewidywanych. Jeśli element pojawi się zarówno w zestawach lokalnych, jak i przewidywanych, element lokalny ma pierwszeństwo. Jeśli plik nie istnieje w lokalnym systemie plików, nie ma stanu lokalnego, więc zostanie wyświetlony w wyliczenie. Jeśli jednak ten element został usunięty, wyświetlenie go w wyliczenie byłoby nieoczekiwane. Zamiana usuniętego elementu na relikt powoduje następujące efekty:

    • Wyliczenia nie ujawniają elementu.
    • Zostanie otwarty plik, który oczekuje, że element nie istnieje, nie powiedzie się, np. "nie znaleziono pliku".
    • Plik tworzy, że oczekiwano powodzenia tylko wtedy, gdy element nie istnieje, powiedzie się; ProjFS usuwa grób w ramach operacji.

Aby zilustrować powyższe stany, rozważ następującą sekwencję, biorąc pod uwagę dostawcę ProjFS, który ma jeden plik "foo.txt" znajdujący się w katalogu głównym wirtualizacji C:\rot.

  1. Aplikacja wylicza C:\rot. Zostanie wyświetlony plik wirtualny "foo.txt". Ponieważ plik nie został jeszcze udostępniony, plik nie istnieje na dysku.
  2. Aplikacja otwiera dojście do C:\root\foo.txt. ProjFS informuje dostawcę o utworzeniu dla niego symbolu zastępczego.
  3. Aplikacja odczytuje zawartość pliku. Dostawca udostępnia zawartość pliku w systemie plików ProjFS i jest buforowany w celu C:\root\foo.txt. Plik jest teraz uwodnionym symbolem zastępczym.
  4. Aplikacja aktualizuje znacznik czasu ostatniej modyfikacji. Plik jest teraz zanieczyszczonym nawodnionym symbolem zastępczym.
  5. Aplikacja otwiera dojście dostępu do zapisu do pliku. C:\root\foo.txt jest teraz pełnym plikiem.
  6. Aplikacja usuwa C:\root\foo.txt. ProjFS zastępuje plik grobowcem. Teraz, gdy aplikacja wylicza C:\root it does not see foo.txt. Jeśli spróbuje otworzyć plik, otwarcie zakończy się niepowodzeniem z ERROR_FILE_NOT_FOUND.