Delen via


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.
  • 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.
  • 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.

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.
  • 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 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:

  • Bestand maken
  • Bestand ophalen
  • Bestandseigenschappen instellen
  • Bestandsmetagegevens instellen
  • Bestand verwijderen
  • Put-bereik
  • Lijstbereiken
  • Leasebestand
Shared Read

Deny Write, Delete)
De volgende schrijf-, lease- en verwijderbewerkingen voor het bestand mislukken:

  • Bestand maken
  • Bestandseigenschappen instellen
  • Bestandsmetagegevens instellen
  • Bestand verwijderen
  • Put-bereik
  • Leasebestand
Shared Write

(Deny Read, Delete)
De volgende lees-, lease- en verwijderingsbewerkingen voor het bestand mislukken:

  • Bestand maken
  • Bestand ophalen
  • Bestand verwijderen
  • Lijstbereiken
  • Leasebestand
Shared Delete

(Deny Read, Write)
De volgende lees-, schrijf- en leasebewerkingen voor het bestand mislukken:

  • Bestand maken
  • Bestand ophalen
  • Bestandseigenschappen instellen
  • Bestandsmetagegevens instellen
  • Put-bereik
  • Lijstbereiken
  • Bestand verwijderen
  • Leasebestand
Shared Read/Write

(Deny Delete)
De volgende lease- en verwijderbewerkingen voor het bestand mislukken:

  • Bestand maken
  • Bestand verwijderen
  • Leasebestand
Shared Read/Delete

(Deny Write)
De volgende schrijf-, lease- en verwijderbewerkingen voor het bestand mislukken:

  • Bestand maken
  • Bestandseigenschappen instellen
  • Bestandsmetagegevens instellen
  • Put-bereik
  • Bestand verwijderen
  • Leasebestand
Shared Write/Delete

(Deny Read)
De volgende lees- en leasebewerkingen voor het bestand mislukken:

  • Bestand ophalen
  • Lijstbereiken
  • Bestand verwijderen
  • Leasebestand
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 SharingViolationretourneert. 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:

  • FileAccess.Write
  • FileAccess.Delete
  • FileAccess.Read|FileAccess.Write
  • FileAccess.Write|FileAccess.Delete
  • FileAccess.Read|FileAccess.Write|FileAccess.Delete
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:

  1. De SMB-client opent een bestand, verkrijgt een RWH-oplock en schrijft gegevens lokaal.

  2. 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:

  1. De SMB-client heeft een RH-oplock verkregen.

  2. 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.

Zie ook

Azure Files concepten