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.
- Klient A otevře soubor s
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.
- Klient A otevře soubor s
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.
- Klient A otevře soubor s
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
SharingViolation
chyby . Klient SMB má soubor stále otevřený a odepře přístup pro čtení a odstranění.
- Klient SMB otevře soubor pomocí
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
SharingViolation
chyby . Klient SMB má soubor stále otevřený a odepře přístup k zápisu a odstranění.
- Klient SMB otevře soubor pomocí
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 SharingViolation
chyby . 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:
|
Shared Read Deny Write, Delete) |
Následující operace zápisu, zapůjčení a odstranění souboru selžou:
|
Shared Write (Deny Read, Delete) |
Následující operace čtení, zapůjčení a odstranění souboru selžou:
|
Shared Delete (Deny Read, Write) |
Následující operace čtení, zápisu a zapůjčení souboru selžou:
|
Shared Read/Write (Deny Delete) |
Následující operace zapůjčení a odstranění souboru selžou:
|
Shared Read/Delete (Deny Write) |
Následující operace zápisu, zapůjčení a odstranění souboru selžou:
|
Shared Write/Delete (Deny Read) |
Následující operace čtení a zapůjčení souboru selžou:
|
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 SharingViolation
chyby . 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:
|
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 SMBDeletePending
chyby . 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 ReadOnlyAttribute
chyby . 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 ClientCacheFlushDelay
chyby .
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:
Klient SMB otevře soubor, získá oplock RWH a zapíše data místně.
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:
Klient SMB získal oplock RH.
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 ClientCacheFlushDelay
chyby .
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 SharingViolation
chyby .