Dela via


Cachetillstånd i virtualiseringsroten

Providern använder det lokala filsystemet under virtualiseringsroten som cache för de objekt som hanteras. Ett objekt (fil eller katalog) kan vara i ett av sex tillstånd i det lokala filsystemet:

  • Virtuell

    Objektet finns inte lokalt på disken. Den projiceras, dvs. syntetiseras, under uppräkningar av den överordnade katalogen. Virtuella objekt sammanfogas med alla objekt som kan finnas på disken för att presentera det fullständiga innehållet i den överordnade katalogen.

  • Platshållare

    För filer: Filens innehåll (primär dataström) finns inte på disken. Filens metadata (namn, storlek, tidsstämplar, attribut osv.) cachelagras på disken.

    För kataloger: Vissa eller alla av katalogens omedelbara underordnade objekt (filerna och katalogerna i katalogen) finns inte på disken, dvs. de är fortfarande virtuella. Katalogens metadata (namn, tidsstämplar, attribut osv.) cachelagras på disken.

  • Hydratiserad platshållare

    För filer: Filens innehåll och metadata har cachelagrats till disken. Kallas även för en "partiell fil".

    För kataloger: En katalog som skapades på disken som platshållare blir aldrig en hydratiserad platshållarkatalog. Detta gör att providern kan lägga till eller ta bort objekt från katalogen i dess lagringsplats och låta ändringarna återspeglas i den lokala cachen.

  • Smutsig platshållare (hydratiserad eller inte)

    Objektets metadata har ändrats lokalt och är inte längre en cache för dess tillstånd i providerns arkiv. Observera att om du skapar eller tar bort en fil eller katalog under en platshållarkatalog blir platshållarkatalogen smutsig.

  • Fullständig fil/katalog

    För filer: Filens innehåll (primär dataström) har ändrats. Filen är inte längre en cache av dess tillstånd i providerns arkiv. Filer som har skapats i det lokala filsystemet (dvs. som inte finns i providerns arkiv alls) anses också vara fullständiga filer.

    För kataloger: Kataloger som har skapats i det lokala filsystemet (dvs. som inte finns i leverantörens arkiv alls) anses vara fullständiga kataloger. En katalog som skapades på disken som platshållare blir aldrig en fullständig katalog.

  • Gravsten

    En särskild dold platshållare som representerar ett objekt som har tagits bort från det lokala filsystemet. När en katalog räknas upp sammanfogar ProjFS uppsättningen med lokala objekt (platshållare, fullständiga filer osv.) med uppsättningen med virtuella projekterade objekt. Om ett objekt visas i både lokala och beräknade uppsättningar har det lokala objektet företräde. Om en fil inte finns i det lokala filsystemet finns det inget lokalt tillstånd, så den visas i uppräkningen. Men om objektet hade tagits bort skulle det vara oväntat att det visas i uppräkningen. Om du ersätter ett borttaget objekt med en gravsten får du följande effekter:

    • Uppräkningar för att inte visa objektet.
    • Filen öppnas som förväntar sig att objektet ska finnas misslyckas med t.ex. "filen hittades inte".
    • Filen skapar som bara förväntar sig att lyckas om objektet inte finns. ProjFS tar bort gravstenen som en del av åtgärden.

För att illustrera ovanstående tillstånd bör du överväga följande sekvens med tanke på en ProjFS-provider som har en enda fil "foo.txt" som finns i virtualiseringsroten C:\root.

  1. En app räknar upp C:\root. Den ser den virtuella filen "foo.txt". Eftersom filen ännu inte har använts finns filen inte på disken.
  2. Appen öppnar ett handtag för att C:\root\foo.txt. ProjFS uppmanar providern att skapa en platshållare för den.
  3. Appen läser innehållet i filen. Providern tillhandahåller filinnehållet till ProjFS och cachelagras till C:\root\foo.txt. Filen är nu en hydratiserad platshållare.
  4. Appen uppdaterar tidsstämpeln Senast ändrad. Filen är nu en smutsig hydratiserad platshållare.
  5. Appen öppnar ett handtag för skrivåtkomst till filen. C:\root\foo.txt är nu en fullständig fil.
  6. Appen tar bort C:\root\foo.txt. ProjFS ersätter filen med en tombstone. Nu när appen räknas upp C:\root it does not see foo.txt. Om den försöker öppna filen misslyckas det öppna med ERROR_FILE_NOT_FOUND.