Bestandsvergrendelingen beheren
Azure Files biedt toegang tot cloudbestandsshares via de volgende protocollen:
- Server Message Block (SMB)
- Netwerkbestandssysteem (NFS)
- FileREST (HTTPS)
In dit onderwerp wordt beschreven hoe u interacties voor bestandsvergrendeling tussen SMB en FileREST beheert. NFS-bestandsshares hebben verschillende vergrendelingssemantiek en ondersteunen een subset van de FileREST-API's. Dit onderwerp is niet van toepassing op NFS-bestandsshares.
SMB-bestandsvergrendeling
SMB-clients die bestandsshares koppelen, kunnen mechanismen voor het vergrendelen van het bestandssysteem gebruiken om de toegang tot gedeelde bestanden te beheren. Deze omvatten:
- Volledige bestandstoegang delen voor lezen, schrijven en verwijderen.
- Bytebereikvergrendelingen voor het beheren van lees- en schrijftoegang tot regio's binnen één bestand.
Wanneer een SMB-client een bestand opent, worden zowel de bestandstoegang als de modus voor delen opgegeven. De volgende opties voor bestandstoegang worden doorgaans gebruikt door SMB-clients, maar alle combinaties zijn toegestaan:
- Geen: Hiermee opent u een bestand voor alleen toegang tot het querykenmerk.
- Lezen: Hiermee opent u een bestand voor alleen leestoegang.
- Schrijven: Hiermee opent u een bestand voor alleen schrijftoegang.
- Lezen/schrijven: Hiermee opent u een bestand met lees-/schrijfmachtigingen.
- Verwijderen: Hiermee opent u een bestand om alleen toegang te verwijderen.
De volgende bestandssharemodi worden doorgaans gebruikt door SMB-clients:
- Geen: Hiermee wordt het delen van het huidige bestand geweigerd. Elke aanvraag voor het openen van het bestand met lees-, schrijf- of verwijderingstoegang mislukt totdat het bestand wordt gesloten.
- Gedeeld lezen: Hiermee kunt u het bestand later openen voor lezen. Als deze vlag niet is opgegeven, mislukt een aanvraag om het bestand te openen voor lezen, totdat het bestand wordt gesloten.
- Gedeeld schrijven: Hiermee kunt u het bestand later openen om het te schrijven. Als deze vlag niet is opgegeven, mislukt een aanvraag om het bestand te openen voor schrijven, totdat het bestand wordt gesloten.
- Gedeeld lezen/schrijven: Hiermee kunt u het bestand later openen om te lezen of te schrijven. Als deze vlag niet is opgegeven, mislukt een aanvraag om het bestand te openen voor lezen of schrijven, totdat het bestand wordt gesloten.
- Gedeeld verwijderen: Hiermee kunt u een bestand later verwijderen. Als deze vlag niet is opgegeven, mislukt een verzoek om het bestand te verwijderen totdat het bestand wordt gesloten.
Voorbeelden van geopende bestanden in SMB-client
Bekijk de volgende voorbeelden van geopende bestanden:
Bestand wordt geopend zonder schending van delen
- Client A opent het bestand met
FileAccess.Read
en FileShare.Write (vervolgens lezen/verwijderen wordt geweigerd tijdens het openen). - Client B opent vervolgens het bestand met
FileAccess.Write
met FileShare.Read (vervolgens schrijven/verwijderen wordt geweigerd tijdens het openen). - Resultaat: Dit is toegestaan, omdat er geen conflict is tussen bestandstoegang en bestandssharemodi.
- Client A opent het bestand met
Schending van delen vanwege bestandstoegang
- Client A opent het bestand met
FileAccess.Write
en FileShare.Read (vervolgens schrijven/verwijderen wordt geweigerd tijdens het openen). - Client B opent vervolgens het bestand met
FileAccess.Write
met FileShare.Write (vervolgens lezen/verwijderen wordt geweigerd tijdens het openen). - Resultaat: Client B ondervindt een schending van delen. De client heeft een bestandstoegang opgegeven die wordt geweigerd door de sharemodus die eerder is opgegeven door client A.
- Client A opent het bestand met
Schending van delen vanwege deelmodus
- Client A opent het bestand met
FileAccess.Write
en FileShare.Write (vervolgens lezen/verwijderen wordt geweigerd tijdens het openen). - Client B opent vervolgens het bestand met
FileAccess.Write
met FileShare.Read (vervolgens schrijven/verwijderen wordt geweigerd tijdens het openen). - Resultaat: Client B ondervindt een schending van delen. De client heeft een sharemodus opgegeven die schrijftoegang weigert tot een bestand dat nog is geopend voor schrijftoegang.
- Client A opent het bestand met
FileREST-bestandstoegang
Wanneer u een FileREST-bewerking uitvoert, moet deze bewerking de sharemodus respecteren die is opgegeven voor elk bestand dat op een SMB-client wordt geopend. Gebruik de volgende bestandstoegangsmodus om te bepalen of de bewerking kan worden voltooid:
FileREST-bewerking | Equivalent van bestandstoegang |
---|---|
Mappen en bestanden weergeven | N.v.t. |
Bestand maken | Schrijven, verwijderen. |
Bestand ophalen | Lezen. |
Bestandseigenschappen instellen | Schrijven. |
Bestandseigenschappen ophalen | N.v.t. |
Bestandsmetagegevens instellen | Schrijven. |
Metagegevens van bestanden ophalen | N.v.t. |
Bestand verwijderen | Verwijderen. |
Put-bereik | Schrijven. |
Lijstbereiken | Lezen. |
Leasebestand | Schrijven, verwijderen en gedeeld lezen voor de duur van de lease. |
Mappen en bestanden weergeven, Bestandseigenschappen ophalen en Metagegevens van bestanden ophalen werken niet op bestandsinhoud. Voor deze bewerkingen is geen leestoegang tot het bestand vereist (dat wil gezegd dat deze bewerkingen worden uitgevoerd, zelfs als een SMB-client het bestand heeft geopend voor exclusieve leestoegang).
Hier volgen voorbeelden van FileREST-aanvragen die communiceren met de SMB-sharemodi:
FileREST: schending van bestandsdeling ophalen
- De SMB-client opent het bestand met
FileAccess.Read
en FileShare.Write (eventuele lees-/verwijderbewerkingen worden geweigerd tijdens het openen). - De REST-client voert vervolgens een bewerking Bestand ophalen uit op het bestand (waarbij wordt gebruikt
FileAccess.Read
zoals opgegeven in de voorgaande tabel). -
Resultaat: De aanvraag van de REST-client mislukt met statuscode 409 (conflict) en foutcode
SharingViolation
. Het bestand is nog steeds geopend op de SMB-client en de toegang tot lezen/verwijderen wordt geweigerd.
- De SMB-client opent het bestand met
Schending van fileREST Put-bereik delen
- De SMB-client opent het bestand met
FileAccess.Write
en FileShare.Read (het volgende schrijven/verwijderen wordt geweigerd tijdens het openen). - De REST-client voert vervolgens een putbereikbewerking uit op het bestand (waarbij wordt gebruikt
FileAccess.Write
zoals opgegeven in de voorgaande tabel). -
Resultaat: De aanvraag van de REST-client mislukt met statuscode 409 (conflict) en foutcode
SharingViolation
. Het bestand is nog steeds geopend op de SMB-client en de toegang tot schrijven/verwijderen wordt geweigerd.
- De SMB-client opent het bestand met
De volgende sectie bevat een uitgebreide tabel met scenario's met bestandsrest-API-schendingen.
Gevolgen van de SMB-modus voor het delen van clients voor FileREST
Afhankelijk van de sharemodus die u opgeeft wanneer een SMB-client een bestand opent, is het mogelijk dat FileREST statuscode 409 (Conflict) retourneert met foutcode SharingViolation
. De volgende tabel bevat een aantal scenario's.
SMB-clientmodus voor het delen van bestanden | FileREST-bewerkingen mislukken met een schending van delen |
---|---|
None (Deny Read, Write, Delete) |
De volgende lees-, schrijf-, lease- en verwijderbewerkingen voor het bestand mislukken:
|
Shared Read Deny Write, Delete) |
De volgende schrijf-, lease- en verwijderbewerkingen voor het bestand mislukken:
|
Shared Write (Deny Read, Delete) |
De volgende lees-, lease- en verwijderingsbewerkingen voor het bestand mislukken:
|
Shared Delete (Deny Read, Write) |
De volgende lees-, schrijf- en leasebewerkingen voor het bestand mislukken:
|
Shared Read/Write (Deny Delete) |
De volgende lease- en verwijderbewerkingen voor het bestand mislukken:
|
Shared Read/Delete (Deny Write) |
De volgende schrijf-, lease- en verwijderbewerkingen voor het bestand mislukken:
|
Shared Write/Delete (Deny Read) |
De volgende lees- en leasebewerkingen voor het bestand mislukken:
|
Shared Read/Write/Delete (Deny Nothing) |
Bestand verwijderen |
Azure Files retourneert schendingen van delen alleen wanneer bestanden zijn geopend op SMB-clients. Een BestandREST-verwijderbewerking slaagt alleen als er geen SMB-clients zijn met ingangen geopend voor dat bestand. Zie de bewerking Bestand verwijderen en Interactie tussen opportunistische vergrendelingen bestandsREST en SMB voor meer informatie.
Gevolgen voor SMB-bestandsvergrendeling voor FileREST Lease File API
Afhankelijk van de opties voor bestandstoegang die u opgeeft wanneer een SMB-client een bestand opent, is het mogelijk dat de FileREST Lease File-API statuscode 409 (Conflict) met foutcode SharingViolation
retourneert. De volgende tabel bevat meer informatie:
Optie voor toegang tot SMB-clientbestanden | Lease verkrijgen in bestand zonder actieve lease met Lease File-API |
---|---|
Geen | Slaagt |
Lezen | Slaagt |
Schrijven | Mislukt vanwege SharingViolation |
Verwijderen | Mislukt vanwege SharingViolation |
Lezen|Schrijven | Mislukt vanwege SharingViolation |
Lezen|Verwijderen | Mislukt vanwege SharingViolation |
Schrijven |Verwijderen | Mislukt vanwege SharingViolation |
Lezen|Schrijven |Verwijderen | Mislukt vanwege SharingViolation |
Azure Files retourneert schendingen van delen alleen wanneer bestanden zijn geopend op SMB-clients. Houd er rekening mee dat er geen SMB-clients met schrijf- of verwijderingsingangen geopend kunnen zijn voor dat bestand om de bewerking FileREST-leasebestand te voltooien. Zie de bewerking Leasebestand en Interactie tussen opportunistische vergrendelingen van FileREST en SMB voor meer informatie.
FileREST Lease Bestandseffecten voor SMB-bestandsvergrendeling
Een lease van een bestand biedt exclusieve schrijf- en verwijderingstoegang tot het bestand. Wanneer een SMB-client een bestand opent, moet deze de vergrendeling respecteren voor elk bestand dat wordt geleased door de bewerking FileREST-leasebestand. U kunt de volgende tabel gebruiken om te bepalen of de bewerking voor het openen van het SMB-bestand kan worden voltooid:
FileREST-bestandsleasestatus | SMB-bewerkingen mislukken met een schending van delen |
---|---|
Geleasd | SMB-clients die het bestand openen met de volgende bestandstoegang, mislukken:
|
Beschikbaar | Geen |
Gebroken | Geen |
Gevolgen voor SMB-verwijdering voor FileREST
Wanneer een SMB-client een bestand opent om te verwijderen, wordt het bestand gemarkeerd als verwijderen in behandeling, totdat alle andere geopende ingangen van de SMB-client voor dat bestand zijn gesloten. Hoewel een bestand is gemarkeerd als verwijderen in behandeling, retourneert elke FileREST-bewerking op dat bestand statuscode 409 (Conflict), met foutcode SMBDeletePending
. Statuscode 404 (Niet gevonden) wordt niet geretourneerd, omdat de SMB-client de vlag voor verwijdering in behandeling kan verwijderen voordat het bestand wordt gesloten. Met andere woorden, statuscode 404 (Niet gevonden) wordt alleen verwacht wanneer het bestand is verwijderd.
Hoewel een bestand de status SMB-verwijdering in behandeling heeft, wordt het niet opgenomen in de List Files
resultaten.
Houd er ook rekening mee dat fileREST Delete File
en Delete Directory
bewerkingen atomisch worden doorgevoerd en niet resulteren in de status Verwijderen in behandeling.
Gevolgen voor bestandskenmerken voor FileREST
Het is mogelijk voor SMB-clients om bestandskenmerken te lezen en in te stellen, waaronder:
- Archiveren
- Alleen-lezen
- Verborgen
- Systeem
Als een bestand of map is gemarkeerd als alleen-lezen, mislukt elke FileREST-bewerking die probeert te schrijven naar het bestand met statuscode 412 (voorwaarde mislukt) en foutcode ReadOnlyAttribute
. Deze bewerkingen omvatten:
Create File
Set File Properties
Set File Metadata
Put Range
Deze bestandskenmerken kunnen niet worden ingesteld of gelezen vanuit REST-clients. Nadat een bestand alleen-lezen is gemaakt, kunnen REST-clients niet naar het bestand schrijven totdat de SMB-client het kenmerk Alleen-lezen verwijdert.
Interactie tussen opportunistische vergrendelingen van FileREST en SMB
Opportunistische SMB-vergrendeling (oplock) is een cachingmechanisme dat SMB-clients aanvragen om de prestaties te verbeteren en netwerkoverdrachten te verminderen. Een SMB-client kan de meest recente status van een bepaald bestand of bepaalde map opslaan in de cache. Er zijn meerdere opportunistische vergrendelingstypen, aangeduid als SMB-leasetypen:
- Lezen (R): de SMB-client kan lezen uit de lokale cache.
- Schrijven (W): de SMB-client kan lokaal schrijven, zonder dat de gegevens terug hoeven te worden gespoeld naar de Azure-bestandsshare.
- Handle (H): de SMB-client hoeft de Azure-bestandsshare niet onmiddellijk op de hoogte te stellen wanneer een ingang wordt gesloten. Dit vergrendelingstype is handig wanneer een toepassing bestanden met dezelfde toegangs- en deelmodus blijft openen en sluiten.
Deze leasetypen zijn onafhankelijk van de opgegeven toegangs- en deelmodus. Normaal gesproken probeert een SMB-client alle leasetypen te verkrijgen wanneer er een nieuwe ingang voor een bestand wordt geopend, ongeacht de toegangs- en deelmodus.
Afhankelijk van de aangeroepen FileREST-bewerking, moet u mogelijk een aanvraag indienen om een bestaande opportunistische vergrendeling te verbreken. In het geval van een schrijfoplock moet de SMB-client wijzigingen in de cache van de Azure-bestandsshare leegmaken. Hier volgen enkele gevallen waarin elk type oplock moet worden verbroken:
Een oplock voor lezen (R) moet worden verbroken wanneer een schrijfbewerking wordt uitgevoerd, zoals
Put Range
.Een schrijfoplock (W) moet worden verbroken wanneer een leesbewerking wordt uitgegeven, zoals
Get File
.Een oplock van de ingang (H) moet worden verbroken wanneer een client een verwijderbewerking uitgeeft. Azure Files vereist dat er geen ingangen kunnen worden geopend om een verwijderbewerking te voltooien.
Handle-oplocks worden ook verbroken wanneer een FileREST-bewerking te maken krijgt met een schending van delen met een bestaande SMB-ingang. Dit gebeurt om te controleren of de ingangen nog steeds worden geopend door een toepassing die op de clients wordt uitgevoerd.
Als de oplock wordt verbroken, kunnen wijzigingen in de SMB-client in de cache worden leeggemaakt, wat kan leiden tot vertragingen in de reactietijd van de bewerking. Leegmaken kan er ook toe leiden dat de bewerking mislukt met statuscode 408 (time-out voor aanvraag) en foutcode ClientCacheFlushDelay
.
In de volgende secties worden scenario's besproken waarbij oplocks worden verbroken.
Een oplockonderbreking en het leegmaken van de SMB-client zijn vereist en de REST-client ondervindt een vertraging
Kijk eens naar het volgende voorbeeld:
De SMB-client opent een bestand, verkrijgt een RWH-oplock en schrijft gegevens lokaal.
De REST-client verzendt een
Get File
aanvraag.- De Azure-bestandsshare verbreekt de schrijfoplock (W), waardoor de client een RH-oplock krijgt.
- De SMB-client verwijdert de gegevens in de cache van de Azure-bestandsshare en bevestigt dat de oplock is onderbroken.
- De Azure-bestandsshare verwerkt de
Get File
aanvraag en reageert terug met de aangevraagde gegevens.
In dit voorbeeld ondervindt de REST-client vertragingen. Deze situatie wordt veroorzaakt door de oplockonderbreking en de tijd die de SMB-client nodig heeft om de gegevens te wissen voor de Azure-bestandsshare.
Volgende aanroepen naar Get File
ondervinden geen extra vertragingen, omdat de schrijfoplock (W) al is verbroken.
Een oplockonderbreking is vereist, maar de REST-client ondervindt geen vertraging
Kijk eens naar het volgende voorbeeld:
De SMB-client heeft een RH-oplock verkregen.
De REST-client verzendt een
Put Range
aanvraag.- De Azure-bestandsshare verzendt een aanvraag voor oplockonderbreking naar de SMB-client en wacht niet op een antwoord.
- De Azure-bestandsshare verwerkt de
Put Range
aanvraag.
In dit voorbeeld is de oplockonderbreking vereist, maar ondervindt de Put Range
aanvraag geen extra vertragingen. Er is geen antwoord nodig wanneer de leesoplock wordt verbroken.
Azure Files gedrag
De volgende tabel bevat een overzicht van het gedrag van Azure Files voor elke FileREST-bewerking. Dit gedrag is gebaseerd op de oplockstatus van de SMB-client die al een ingang voor hetzelfde bestand heeft verkregen. Bovendien wordt ervan uitgegaan dat de SMB-afhandeling toegang en delen niet conflicteert met de fileREST-bewerking.
Als er een conflict is, wordt de oplock van de ingang ook verbroken om ervoor te zorgen dat de ingang nog steeds is geopend op de client. In het geval van een blokkerende oplock-onderbreking moet Azure Files wachten op een bevestiging dat de onderbreking is geslaagd. In het geval van een niet-blokkerende oplockonderbreking hoeft Azure Files niet te wachten.
FileREST-bewerking | Huidige oplocktypen | Oplockonderbreking uitgevoerd | Resulterende oplock |
---|---|---|---|
Bestand ophalen | RWH | Ja (blokkeren) | RH |
Bestand ophalen | RH | Nee | RH |
Bestand ophalen | RW | Ja (blokkeren) | R |
Bestandseigenschappen ophalen | RWH | Ja (blokkeren) | RH |
Bestandseigenschappen ophalen | RH | Nee | RH |
Bestandseigenschappen ophalen | RW | Ja (blokkeren) | R |
Lijstbereiken | RWH | Ja (blokkeren) | RH |
Lijstbereiken | RH | Nee | RH |
Lijstbereiken | RW | Ja (blokkeren) | R |
Metagegevens van bestanden ophalen | RWH | Ja (blokkeren) | RH |
Metagegevens van bestanden ophalen | RH | Nee | RH |
Metagegevens van bestanden ophalen | RW | Ja (blokkeren) | R |
Bestanden weergeven | RWH | Nee | RWH |
Bestanden weergeven | RH | Nee | RH |
Bestanden weergeven | RW | Nee | RW |
Put-bereik | RWH | Ja (blokkeren) | Geen |
Put-bereik | RH | Ja (niet-blokkerend) | Geen |
Put-bereik | RW | Ja (blokkeren) | Geen |
Bestandseigenschappen instellen | RWH | Ja (blokkeren) | Geen |
Bestandseigenschappen instellen | RH | Ja (niet-blokkerend) | Geen |
Bestandseigenschappen instellen | RW | Ja (blokkeren) | Geen |
Bestandsmetagegevens instellen | RWH | Ja (blokkeren) | Geen |
Bestandsmetagegevens instellen | RH | Ja (niet-blokkerend) | Geen |
Bestandsmetagegevens instellen | RW | Ja (blokkeren) | Geen |
Bestand verwijderen | RWH | Ja (blokkeren) | RW |
Bestand verwijderen | RH | Ja (blokkeren) | R |
Bestand verwijderen | RW | Nee | RW |
In het geval dat een blokkerende oplockonderbreking vereist is, mislukt de FileREST-bewerking onder bepaalde omstandigheden. Als het einde niet slaagt binnen de opgegeven time-out van de aanvraag, of binnen 30 seconden, afhankelijk van wat het eerst wordt voltooid, retourneert de service statuscode 408 (time-out van aanvraag) en foutcode ClientCacheFlushDelay
.
Voor de Delete File
aanvraag moet ook de lease van de oplock-ingang (H) worden verbroken. Als de ingang wordt verbroken, zorgt u ervoor dat er nog geen bestandsingangen worden geopend door een SMB-clienttoepassing wanneer een REST-client aanroept Delete File
. Als er sprake is van een schending van het delen, mislukt de aanvraag met statuscode 409 (conflict) en foutcode SharingViolation
.