영어로 읽기

다음을 통해 공유


가상화 루트의 캐시 상태

공급자는 가상화 루트 아래의 로컬 파일 시스템을 관리하는 항목의 캐시로 사용합니다. 항목(파일 또는 디렉터리)은 로컬 파일 시스템의 6개 상태 중 하나에 있을 수 있습니다.

  • 가상

    항목이 디스크에 로컬로 존재하지 않습니다. 부모 디렉터리를 열거하는 동안 합성된 것으로 프로젝션됩니다. 가상 항목은 부모 디렉터리의 전체 콘텐츠를 표시하기 위해 디스크에 있을 수 있는 모든 항목과 병합됩니다.

  • 자리표시자

    파일의 경우: 파일의 콘텐츠(기본 데이터 스트림)가 디스크에 없습니다. 파일의 메타데이터(이름, 크기, 타임스탬프, 특성 등)는 디스크에 캐시됩니다.

    디렉터리의 경우: 디렉터리의 직접 하위 항목 중 일부 또는 전부(디렉터리의 파일 및 디렉터리)가 디스크에 없습니다. 즉, 여전히 가상입니다. 디렉터리의 메타데이터(이름, 타임스탬프, 특성 등)는 디스크에 캐시됩니다.

  • 수화 자리 표시자

    파일의 경우: 파일의 콘텐츠 및 메타데이터가 디스크에 캐시되었습니다. "부분 파일"이라고도 합니다.

    디렉터리의 경우: 자리 표시자로 디스크에서 만든 디렉터리가 수화된 자리 표시자 디렉터리가 되지 않습니다. 이렇게 하면 공급자가 해당 백업 저장소의 디렉터리에서 항목을 추가하거나 제거하고 이러한 변경 내용을 로컬 캐시에 반영할 수 있습니다.

  • 더티 자리 표시자(수화 여부)

    항목의 메타데이터가 로컬로 수정되었으며 더 이상 공급자의 저장소에 있는 상태의 캐시가 아닙니다. 자리 표시자 디렉터리에서 파일 또는 디렉터리를 만들거나 삭제하면 자리 표시자 디렉터리가 더티.

  • 전체 파일/디렉터리

    파일의 경우: 파일의 콘텐츠(기본 데이터 스트림)가 수정되었습니다. 파일은 더 이상 공급자의 저장소에 있는 해당 상태의 캐시가 아닙니다. 로컬 파일 시스템에서 만든 파일(즉, 공급자의 저장소에 존재하지 않는 파일)도 전체 파일로 간주됩니다.

    디렉터리의 경우: 로컬 파일 시스템에서 만든 디렉터리(즉, 공급자의 저장소에 존재하지 않는 디렉터리)는 전체 디렉터리로 간주됩니다. 자리 표시자로 디스크에서 만든 디렉터리가 전체 디렉터리가 되지 않습니다.

  • 삭제 표식

    로컬 파일 시스템에서 삭제된 항목을 나타내는 특별한 숨겨진 자리 표시자입니다. 디렉터리가 열거되면 ProjFS는 로컬 항목 집합(자리 표시자, 전체 파일 등)을 가상 프로젝터 항목 집합과 병합합니다. 항목이 로컬 집합과 프로젝트된 집합 모두에 표시되면 로컬 항목이 우선합니다. 로컬 파일 시스템에 파일이 없으면 로컬 상태가 없으므로 열거형에 표시됩니다. 그러나 해당 항목이 삭제된 경우 열거형에 해당 항목이 표시되는 것은 예기치 않은 일입니다. 삭제된 항목을 삭제 표시로 바꾸면 다음과 같은 효과가 발생합니다.

    • 항목을 표시하지 않는 열거형입니다.
    • "파일을 찾을 수 없음"과 같은 항목이 실패할 것으로 예상되는 파일이 열립니다.
    • 파일은 항목이 없는 경우에만 성공할 것으로 예상하는 를 만듭니다. ProjFS는 작업의 일부로 삭제 표시를 제거합니다.

위의 상태를 설명하기 위해 가상화 루트 C:\root에 단일 파일 "foo.txt"이 있는 ProjFS 공급자가 있는 경우 다음 시퀀스를 고려합니다.

  1. 앱이 C:\root를 열거합니다. 가상 파일 "foo.txt"이 표시됩니다. 파일에 아직 액세스하지 않았으므로 디스크에 파일이 없습니다.
  2. 앱은 C:\root\foo.txt 핸들을 엽니다. ProjFS는 공급자에게 자리 표시자를 만들도록 지시합니다.
  3. 앱은 파일의 콘텐츠를 읽습니다. 공급자는 ProjFS에 파일 콘텐츠를 제공하며 C:\root\foo.txt 위해 캐시됩니다. 이제 파일이 수화 자리 표시자입니다.
  4. 앱은 마지막으로 수정한 타임스탬프를 업데이트합니다. 이제 파일이 더티 수화 자리 표시자입니다.
  5. 앱은 파일에 대한 쓰기 액세스에 대한 핸들을 엽니다. 이제 C:\root\foo.txt 전체 파일입니다.
  6. 앱이 C:\root\foo.txt 삭제합니다. ProjFS는 파일을 삭제 표시로 바꿉니다. 이제 앱이 C:\root를 열거하면 foo.txt 표시되지 않습니다. 파일을 열려고 하면 열기가 실패하고 ERROR_FILE_NOT_FOUND.