Správa zámků souborů

Azure Files poskytuje přístup ke sdíleným složkám cloudu prostřednictvím následujících protokolů:

  • SMB (Server Message Block)
  • Systém souborů NFS (Network File System)
  • FileREST (HTTPS)

Toto téma popisuje, jak spravovat interakce zamykání souborů mezi protokoly SMB a FileREST. Sdílené složky NFS mají různou sémantiku zamykání a podporují podmnožinu rozhraní FileREST API. Toto téma se nevztahuje na sdílené složky NFS.

Zamykání souborů SMB

Klienti SMB, kteří připojují sdílené složky, můžou ke správě přístupu ke sdíleným souborům používat mechanismy zamykání systému souborů. Tady jsou některé z nich:

  • Sdílení přístupu k celému souboru pro čtení, zápis a odstranění
  • Zámky rozsahu bajtů pro správu přístupu pro čtení a zápis do oblastí v rámci jednoho souboru.

Když klient SMB otevře soubor, určuje přístup k souboru i režim sdílení. Klienti SMB obvykle používají následující možnosti přístupu k souborům, i když jsou povolené všechny kombinace:

  • Žádný: Otevře soubor pouze pro přístup k atributu dotazu.
  • Číst: Otevře soubor jen pro čtení.
  • Zápis: Otevře soubor pouze pro přístup k zápisu.
  • Čtení/zápis: Otevře soubor s oprávněními ke čtení a zápisu.
  • Odstranit: Otevře soubor pouze pro odstranění přístupu.

Klienti SMB obvykle používají následující režimy sdílených složek:

  • Žádný: Odmítne sdílení aktuálního souboru. Všechny žádosti o otevření souboru s přístupem ke čtení, zápisu nebo odstranění se nezdaří, dokud se soubor nezavře.
  • Sdílené čtení: Umožňuje následné otevření souboru pro čtení. Pokud tento příznak není zadaný, všechny žádosti o otevření souboru pro čtení selžou, dokud se soubor nezavře.
  • Sdílený zápis: Umožňuje následné otevření souboru pro zápis. Pokud tento příznak není zadaný, všechny žádosti o otevření souboru pro zápis selžou, dokud se soubor nezavře.
  • Sdílené čtení a zápis: Umožňuje následné otevření souboru pro čtení nebo zápis. Pokud tento příznak není zadaný, všechny žádosti o otevření souboru pro čtení nebo zápis selžou, dokud se soubor nezavře.
  • Sdílené odstranění: Umožňuje následné odstranění souboru. Pokud tento příznak není zadaný, všechny žádosti o odstranění souboru selžou, dokud se soubor nezavře.

Příklady otevřených souborů klienta SMB

Podívejte se na následující příklady otevřených souborů:

  • Soubor se otevře bez narušení sdílení

    • Klient A otevře soubor s FileAccess.Read a FileShare.Write (při otevření odmítne následné čtení/odstranění).
    • Klient B pak soubor otevře pomocí FileAccess.Write příkazu FileShare.Read (při otevření odmítne následný zápis/odstranění).
    • Výsledek: To je povolené, protože mezi režimy přístupu k souborům a sdílenými složkami nedochází k žádnému konfliktu.
  • Porušení sdílení kvůli přístupu k souborům

    • Klient A otevře soubor s FileAccess.Write a FileShare.Read (při otevření odmítne následný zápis/odstranění).
    • Klient B pak otevře soubor s příkazem FileAccess.Write FileShare.Write (při otevření odmítne následné čtení/odstranění).
    • Výsledek: U klienta B dochází k narušení sdílení. Klient určil přístup k souborům, který byl odepřen režimem sdílení, který byl dříve zadán klientem A.
  • Porušení sdílení kvůli režimu sdílení

    • Klient A otevře soubor s FileAccess.Write a FileShare.Write (při otevření odmítne následné čtení/odstranění).
    • Klient B pak soubor otevře pomocí FileAccess.Write příkazu FileShare.Read (při otevření odmítne následný zápis/odstranění).
    • Výsledek: U klienta B dochází k narušení sdílení. Klient určil režim sdílené složky, který odepře přístup k zápisu k souboru, který je stále otevřený pro přístup k zápisu.

Přístup k souborům FileREST

Při provádění operace FileREST musí tato operace respektovat režim sdílení zadaný pro jakýkoli soubor otevřený v klientovi SMB. Pomocí následujícího režimu přístupu k souborům určete, jestli je možné operaci dokončit:

Operace FileREST Ekvivalent přístupu k souborům
Výpis adresářů a souborů Není k dispozici.
Vytvořit soubor Pište, Odstraňte.
Získat soubor Číst.
Nastavení vlastností souboru Zápis.
Získání vlastností souboru Není k dispozici.
Nastavení metadat souboru Zápis.
Získání metadat souboru Není k dispozici.
Odstranění souboru Odstranit
Rozsah vložení Zápis.
Rozsahy seznamu Číst.
Soubor zapůjčení Zápis, odstranění a sdílené čtení po dobu zapůjčení.

Seznamy adresářů a souborů, Funkce Získat vlastnosti souboru a Získat metadata souborů nepracují s obsahem souborů. Tyto operace nevyžadují přístup pro čtení k souboru (to znamená, že tyto operace jsou úspěšné, i když má klient SMB otevřený soubor pro výhradní přístup pro čtení).

Níže jsou uvedené příklady požadavků FileREST, které interagují s režimy sdílené složky SMB:

  • FileREST Get Porušení sdílení souborů

    • Klient SMB otevře soubor pomocí FileAccess.Read a FileShare.Write (při otevření odmítne následné čtení/odstranění).
    • Klient REST pak se souborem provede operaci Získat soubor (a použije FileAccess.Read ji tak, jak je uvedeno v předchozí tabulce).
    • Výsledek: Požadavek klienta REST selže se stavovým kódem 409 (konflikt) a kódem SharingViolationchyby . Klient SMB má soubor stále otevřený a odepře přístup pro čtení a odstranění.
  • FileREST Put Range – porušení sdílení

    • Klient SMB otevře soubor pomocí FileAccess.Write a FileShare.Read (při otevření odmítne následný zápis/odstranění).
    • Klient REST pak se souborem provede operaci Umístění rozsahu (použije se tak FileAccess.Write , jak je uvedeno v předchozí tabulce).
    • Výsledek: Požadavek klienta REST selže se stavovým kódem 409 (konflikt) a kódem SharingViolationchyby . Klient SMB má soubor stále otevřený a odepře přístup k zápisu a odstranění.

Další část obsahuje komplexní tabulku scénářů porušení sdílení rozhraní FileREST API.

Důsledky režimu sdílení klienta SMB na FileREST

V závislosti na režimu sdílené složky, který určíte, když klient SMB otevře soubor, může fileREST vrátit stavový kód 409 (Konflikt) s kódem SharingViolationchyby . V následující tabulce je uvedeno několik scénářů.

Režim sdílení souborů klienta SMB Selhání operací FileREST s porušením sdílení
None

(Deny Read, Write, Delete)
Následující operace čtení, zápisu, zapůjčení a odstranění souboru selžou:

  • Vytvořit soubor
  • Získat soubor
  • Nastavení vlastností souboru
  • Nastavení metadat souboru
  • Odstranit soubor
  • Rozsah vložení
  • Rozsahy seznamu
  • Soubor zapůjčení
Shared Read

Deny Write, Delete)
Následující operace zápisu, zapůjčení a odstranění souboru selžou:

  • Vytvořit soubor
  • Nastavení vlastností souboru
  • Nastavení metadat souboru
  • Odstranit soubor
  • Rozsah vložení
  • Soubor zapůjčení
Shared Write

(Deny Read, Delete)
Následující operace čtení, zapůjčení a odstranění souboru selžou:

  • Vytvořit soubor
  • Získat soubor
  • Odstranit soubor
  • Rozsahy seznamu
  • Soubor zapůjčení
Shared Delete

(Deny Read, Write)
Následující operace čtení, zápisu a zapůjčení souboru selžou:

  • Vytvořit soubor
  • Získat soubor
  • Nastavení vlastností souboru
  • Nastavení metadat souboru
  • Rozsah vložení
  • Rozsahy seznamu
  • Odstranit soubor
  • Soubor zapůjčení
Shared Read/Write

(Deny Delete)
Následující operace zapůjčení a odstranění souboru selžou:

  • Vytvořit soubor
  • Odstranit soubor
  • Soubor zapůjčení
Shared Read/Delete

(Deny Write)
Následující operace zápisu, zapůjčení a odstranění souboru selžou:

  • Vytvořit soubor
  • Nastavení vlastností souboru
  • Nastavení metadat souboru
  • Rozsah vložení
  • Odstranit soubor
  • Soubor zapůjčení
Shared Write/Delete

(Deny Read)
Následující operace čtení a zapůjčení souboru selžou:

  • Získat soubor
  • Rozsahy seznamu
  • Odstranit soubor
  • Soubor zapůjčení
Shared Read/Write/Delete

(Deny Nothing)
Odstranit soubor

Azure Files vrací porušení sdílení pouze v případech, kdy jsou soubory otevřené na klientech SMB. Aby byla operace FileREST Delete File úspěšná, nemohou existovat žádní klienti SMB s popisovači otevřenými pro daný soubor. Další informace najdete v tématech Operace odstranění souboru a Interakce mezi oportunistickými zámky FileREST a SMB.

Důsledky zamykání souborů SMB pro rozhraní FILEREST Lease File API

V závislosti na možnostech přístupu k souborům, které určíte při otevření souboru klienta SMB, je možné, že rozhraní FILEREST Lease File API vrátí stavový kód 409 (Konflikt) s kódem SharingViolationchyby . Další informace najdete v následující tabulce:

Možnost přístupu k souborům klienta SMB Získání zapůjčení souboru bez aktivního zapůjčení pomocí rozhraní API pro zapůjčení souboru
Žádné Úspěšné
Read Úspěšné
Write Selhání kvůli SharingViolation
Odstranit Selhání kvůli SharingViolation
Číst|Zápis Selhání kvůli SharingViolation
Číst|Odstranit Selhání kvůli SharingViolation
Psaní|Odstranit Selhání kvůli SharingViolation
Číst|Psaní|Odstranit Selhání kvůli SharingViolation

Azure Files vrací porušení sdílení pouze v případech, kdy jsou soubory otevřené na klientech SMB. Všimněte si, že aby byla operace FileREST Zapůjčení souboru úspěšná, nemohou být pro tento soubor otevřeni žádní klienti SMB s popisovači zápisu nebo odstranění. Další informace najdete v tématu Operace zapůjčení souboru a Interakce mezi oportunistickými zámky FileREST a SMB.

Důsledky zapůjčení souboru FileREST pro uzamčení souborů SMB

Zapůjčení souboru poskytuje výhradní přístup k zápisu a odstranění souboru. Když klient SMB otevře soubor, musí respektovat zámek pro všechny soubory zapůjčené operací FileREST Zapůjčení souboru. K určení, jestli je možné dokončit operaci otevření souboru SMB, můžete použít následující tabulku:

Stav zapůjčení souboru FileREST Selhání operací SMB s porušením sdílení
Pronajatých Klienti SMB, kteří otevřou soubor s následujícím přístupem k souborům, selžou:

  • FileAccess.Write
  • FileAccess.Delete
  • FileAccess.Read|FileAccess.Write
  • FileAccess.Write|FileAccess.Delete
  • FileAccess.Read|FileAccess.Write|FileAccess.Delete
K dispozici. Žádné
Zlomené Žádné

Důsledky odstranění protokolu SMB pro FileREST

Když klient SMB otevře soubor pro odstranění, označí ho jako čekající na odstranění, dokud se všechny ostatní otevřené popisovače klienta SMB v daném souboru neuzavřou. I když je soubor označený jako čekající na odstranění, jakákoli operace FileREST u daného souboru vrátí stavový kód 409 (Conflict) s kódem SMBDeletePendingchyby . Stavový kód 404 (Nenalezena) se nevrátí, protože klient SMB může před zavřením souboru odebrat příznak čekající na odstranění. Jinými slovy, stavový kód 404 (Nenalezené) se očekává pouze v případě, že byl soubor odebrán.

I když je soubor ve stavu čekání na odstranění protokolu SMB, nebude zahrnut do List Files výsledků.

Všimněte si také, že operace FileREST Delete File a Delete Directory jsou potvrzeny atomicky a nemají za následek stav čekání na odstranění.

Důsledky atributu souboru na FileREST

Klienti SMB můžou číst a nastavovat atributy souborů, včetně:

  • Archiv
  • Jen pro čtení
  • Skrytý
  • Systémový

Pokud je soubor nebo adresář označen jako jen pro čtení, pak jakákoli operace FileREST, která se pokusí o zápis do souboru, selže se stavovým kódem 412 (Předběžná podmínka selhala) a kódem ReadOnlyAttributechyby . Mezi tyto operace patří:

  • Create File
  • Set File Properties
  • Set File Metadata
  • Put Range

Tyto atributy souborů nelze nastavit ani číst z klientů REST. Po vytvoření souboru jen pro čtení nebudou moct klienti REST zapisovat do souboru, dokud klient SMB neodebere atribut jen pro čtení.

Interakce mezi oportunistickými zámky FileREST a SMB

Opportunistický zámek SMB (oplock) je mechanismus ukládání do mezipaměti, který klienti SMB požadují za účelem zlepšení výkonu a omezení síťových přenosů. Klient SMB může ukládat do mezipaměti nejnovější stav určitého souboru nebo adresáře. Existuje několik typů oportunních zámků, které se označují jako typy zapůjčení SMB:

  • Čtení (R): Klient SMB může číst z místní mezipaměti.
  • Zápis (W): Klient SMB může zapisovat místně, aniž by bylo nutné vyprázdnit data zpět do sdílené složky Azure.
  • Popisovač (H):Klient SMB nemusí okamžitě informovat sdílenou složku Azure, když je popisovač zavřený. Tento typ zámku je užitečný, když aplikace pokračuje v otevírání a zavírání souborů se stejným režimem přístupu a sdílení.

Tyto typy zapůjčení jsou nezávislé na zadaném režimu přístupu a sdílení. Klient SMB se obvykle pokusí získat všechny typy zapůjčení vždy, když otevře nový popisovač pro soubor, bez ohledu na režim přístupu a sdílení.

V závislosti na volané operaci FileREST možná budete muset požádat o přerušení existujícího oportunistického zámku. V případě oplocku zápisu musí klient SMB vyprázdnit změny sdílené složky Azure uložené v mezipaměti. Tady jsou některé případy, kdy je potřeba porušovat každý typ oplocku:

  • Oplock čtení (R) musí být přerušen při každém vydání operace zápisu, například Put Range.

  • Oplock zápisu (W) se musí porušovat při každém vydání operace čtení, například Get File.

  • Oplock popisovače (H) musí být přerušen pokaždé, když klient vydá operaci odstranění. Azure Files vyžaduje, aby v případě úspěšné operace odstranění nebyly otevřeny žádné popisovače.

    Oplocky popisovačů se také přeruší, když u operace FileREST dojde k narušení sdílení s existujícím popisovačem PROTOKOLU SMB. K tomu dochází za účelem ověření, že popisovače jsou stále otevřeny aplikací spuštěnou na klientech.

Přerušení oplocku může vyžadovat vyprázdnění změn klienta SMB uloženého v mezipaměti, což může způsobit zpoždění v době odezvy operace. Vyprázdnění může také způsobit selhání operace se stavovým kódem 408 (vypršení časového limitu požadavku) a kódem ClientCacheFlushDelaychyby .

Následující části popisují scénáře, kdy dochází k přerušení oplocku.

Vyžaduje se přerušení oplocku a vyprázdnění klienta SMB a u klienta REST dochází ke zpoždění.

Uvažujte následující příklad:

  1. Klient SMB otevře soubor, získá oplock RWH a zapíše data místně.

  2. Klient REST odešle Get File požadavek.

    • Sdílená složka Azure přeruší oplock zápisu (W), takže klient bude mít oplock RH.
    • Klient SMB vyprázdní data uložená v mezipaměti do sdílené složky Azure a potvrdí přerušení oplocku.
    • Sdílená složka Azure zpracuje Get File požadavek a odpoví zpět s požadovanými daty.

V tomto příkladu dochází u klienta REST ke zpožděním. Příčinou této situace je přerušení oplocku a doba potřebná klientem SMB k vyprázdnění dat do sdílené složky Azure.

U následných volání nedošlo k Get File žádným dalším zpožděním, protože oplock zápisu (W) už byl přerušen.

Přerušení oplocku je povinné, ale u klienta REST nedojde ke zpoždění.

Uvažujte následující příklad:

  1. Klient SMB získal oplock RH.

  2. Klient REST odešle Put Range požadavek.

    • Sdílená složka Azure odešle klientovi SMB požadavek na přerušení oplocku a nečeká na odpověď.
    • Sdílená složka Azure zpracuje Put Range požadavek.

V tomto příkladu se vyžaduje přerušení oplocku, ale u požadavku nedochází k Put Range žádným dalším zpožděním. Při přerušení oplocku čtení není potřeba odpověď.

Azure Files chování

Následující tabulka shrnuje chování Azure Files pro každou operaci FileREST. Toto chování je založeno na stavu oplock klienta SMB, který již získal popisovač pro stejný soubor. Kromě toho chování předpokládá, že protokol SMB zpracovává přístup a sdílení nejsou v konfliktu s operací FileREST.

Pokud dojde ke konfliktu, je také přerušeno oplock popisovače, aby se zajistilo, že popisovač je stále otevřený na klientovi. V případě přerušení blokování oplock musí Azure Files počkat na potvrzení, že přerušení bylo úspěšné. V případě neblokujícího přerušení oplocku nemusí Azure Files čekat.

Operace FileREST Aktuální typy oplock Došlo k přerušení oplocku. Výsledné oplock
Získat soubor RWH Ano (blokování) RH
Získat soubor RH No RH
Získat soubor RW Ano (blokování) R
Získání vlastností souboru RWH Ano (blokování) RH
Získání vlastností souboru RH Ne RH
Získání vlastností souboru RW Ano (blokování) R
Rozsahy seznamu RWH Ano (blokování) RH
Rozsahy seznamu RH Ne RH
Rozsahy seznamu RW Ano (blokování) R
Získání metadat souboru RWH Ano (blokování) RH
Získání metadat souboru RH Ne RH
Získání metadat souboru RW Ano (blokování) R
Vytvoření seznamu souborů RWH No RWH
Vytvoření seznamu souborů RH Ne RH
Vytvoření seznamu souborů RW Ne RW
Rozsah vložení RWH Ano (blokování) Žádné
Rozsah vložení RH Ano (neblokuje se) Žádné
Rozsah vložení RW Ano (blokování) Žádné
Nastavení vlastností souboru RWH Ano (blokování) Žádné
Nastavení vlastností souboru RH Ano (neblokuje se) Žádné
Nastavení vlastností souboru RW Ano (blokování) Žádné
Nastavení metadat souboru RWH Ano (blokování) Žádné
Nastavení metadat souboru RH Ano (neblokuje se) Žádné
Nastavení metadat souboru RW Ano (blokování) Žádné
Odstranit soubor RWH Ano (blokování) RW
Odstranit soubor RH Ano (blokování) R
Odstranit soubor RW Ne RW

V případě, že se vyžaduje přerušení blokování oplocku, za určitých podmínek se operace FileREST nezdaří. Pokud se přerušení nepodaří během zadaného časového limitu požadavku nebo do 30 sekund (podle toho, co se dokončí dříve), vrátí služba stavový kód 408 (Časový limit požadavku) a kód ClientCacheFlushDelaychyby .

Požadavek Delete File také vyžaduje přerušení zapůjčení popisovače oplock (H). Přerušení popisovače zajistí, že klient SMB stále neotevře žádné popisovače souborů, když klient REST volá Delete File. Pokud dojde k narušení sdílení, požadavek selže se stavovým kódem 409 (konflikt) a kódem SharingViolationchyby .

Viz také

Azure Files koncepty