Gérer les verrous de fichiers
Azure Files permet d’accéder aux partages de fichiers cloud via les protocoles suivants :
- SMB (Server Message Block)
- NFS (Network File System)
- FileREST (HTTPS)
Cette rubrique explique comment gérer les interactions de verrouillage de fichiers entre SMB et FileREST. Les partages de fichiers NFS ont une sémantique de verrouillage différente et prennent en charge un sous-ensemble des API FileREST. Cette rubrique ne s’applique pas aux partages de fichiers NFS.
Verrouillage de fichiers SMB
Les clients SMB qui montent des partages de fichiers peuvent utiliser des mécanismes de verrouillage du système de fichiers pour gérer l’accès aux fichiers partagés. Il s’agit notamment des paramètres suivants :
- partage de l'accès à la totalité du fichier pour la lecture, l'écriture et la suppression ;
- verrouillages de plages d'octets pour gérer l'accès en lecture et en écriture à des zones à l'intérieur d'un fichier.
Lorsqu’un client SMB ouvre un fichier, il spécifie à la fois l’accès au fichier et le mode de partage. Les options d’accès aux fichiers suivantes sont généralement utilisées par les clients SMB, bien que toutes les combinaisons soient autorisées :
- Aucun: Ouvre un fichier pour l’accès à l’attribut de requête uniquement.
- Lire: Ouvre un fichier pour l’accès en lecture uniquement.
- Écrire: Ouvre un fichier pour l’accès en écriture uniquement.
- Lecture/écriture : Ouvre un fichier avec des autorisations de lecture/écriture.
- Supprimer: Ouvre un fichier pour supprimer l’accès uniquement.
Les clients SMB utilisent généralement les modes de partage de fichiers suivants :
- Aucun: Refuse le partage du fichier actif. Toute demande d’ouverture du fichier avec un accès en lecture, écriture ou suppression échoue, jusqu’à ce que le fichier soit fermé.
- Lecture partagée : Autorise l’ouverture ultérieure du fichier pour la lecture. Si cet indicateur n’est pas spécifié, toute demande d’ouverture du fichier pour lecture échoue, jusqu’à ce que le fichier soit fermé.
- Écriture partagée : Autorise l’ouverture ultérieure du fichier pour l’écriture. Si cet indicateur n’est pas spécifié, toute demande d’ouverture du fichier pour écriture échoue, jusqu’à ce que le fichier soit fermé.
- Lecture/écriture partagée : Autorise l’ouverture ultérieure du fichier pour la lecture ou l’écriture. Si cet indicateur n’est pas spécifié, toute demande d’ouverture du fichier à des fins de lecture ou d’écriture échoue, jusqu’à ce que le fichier soit fermé.
- Suppression partagée : Permet la suppression ultérieure d’un fichier. Si cet indicateur n’est pas spécifié, toute demande de suppression du fichier échoue tant que le fichier n’est pas fermé.
Exemples de fichiers ouverts du client SMB
Examinez les exemples suivants d'ouverture de fichier :
Le fichier s’ouvre sans violation de partage
- Le client A ouvre le fichier avec
FileAccess.Read
et FileShare.Write (refuse la lecture/suppression ultérieure lors de l’ouverture). - Le client B ouvre ensuite le fichier avec
FileAccess.Write
avec FileShare.Read (refuse l’écriture/la suppression ultérieure lors de l’ouverture). - Résultat: Cela est autorisé, car il n’y a aucun conflit entre l’accès aux fichiers et les modes de partage de fichiers.
- Le client A ouvre le fichier avec
Violation de partage en raison de l’accès aux fichiers
- Le client A ouvre le fichier avec
FileAccess.Write
et FileShare.Read (refuse l’écriture/la suppression ultérieure lors de l’ouverture). - Le client B ouvre ensuite le fichier avec
FileAccess.Write
avec FileShare.Write (refuse la lecture/suppression ultérieure lors de l’ouverture). - Résultat: Le client B rencontre une violation de partage. Le client a spécifié un accès aux fichiers qui est refusé par le mode de partage spécifié précédemment par le client A.
- Le client A ouvre le fichier avec
Violation de partage en raison du mode de partage
- Le client A ouvre le fichier avec
FileAccess.Write
et FileShare.Write (refuse la lecture/suppression ultérieure lors de l’ouverture). - Le client B ouvre ensuite le fichier avec
FileAccess.Write
avec FileShare.Read (refuse l’écriture/la suppression ultérieure lors de l’ouverture). - Résultat: Le client B rencontre une violation de partage. Le client a spécifié un mode de partage qui refuse l’accès en écriture à un fichier qui est toujours ouvert pour l’accès en écriture.
- Le client A ouvre le fichier avec
Accès aux fichiers FileREST
Lorsque vous effectuez une opération FileREST, cette opération doit respecter le mode de partage spécifié pour tout fichier ouvert sur un client SMB. Utilisez le mode d’accès aux fichiers suivant pour déterminer si l’opération peut être terminée :
Opération FileREST | Accès aux fichiers équivalent |
---|---|
Répertorier des répertoires et des fichiers | N/A. |
Créer un fichier | Écriture, Suppression. |
Obtention de fichier | Lecture. |
Définir les propriétés d’un fichier | Écriture. |
Obtenir les propriétés d’un fichier | N/A. |
Définition des métadonnées d'un fichier | Écriture. |
Obtenir les métadonnées d’un fichier | N/A. |
Supprimer le fichier | Suppression. |
Put Range | Écriture. |
Liste des plages | Lecture. |
Fichier de bail | Écriture, Suppression et Lecture partagée pendant la durée du bail. |
Répertorier les répertoires et les fichiers, Obtenir les propriétés de fichier et Obtenir les métadonnées de fichier ne fonctionnent pas sur le contenu du fichier. Ces opérations ne nécessitent pas d’accès en lecture au fichier (autrement dit, ces opérations réussissent même si un client SMB a le fichier ouvert pour un accès en lecture exclusif).
Voici des exemples de requêtes FileREST qui interagissent avec les modes de partage SMB :
FichierREST Obtenir une violation de partage de fichiers
- Le client SMB ouvre le fichier avec
FileAccess.Read
et FileShare.Write (refuse la lecture/la suppression ultérieure lors de l’ouverture). - Le client REST effectue ensuite une opération Get File sur le fichier (en utilisant
FileAccess.Read
ainsi comme spécifié dans le tableau précédent). -
Résultat: La demande du client REST échoue avec status code 409 (Conflit) et le code
SharingViolation
d’erreur . Le client SMB a toujours le fichier ouvert et refuse l’accès en lecture/suppression.
- Le client SMB ouvre le fichier avec
Violation du partage de plage FileREST Put
- Le client SMB ouvre le fichier avec
FileAccess.Write
et FileShare.Read (refuse l’écriture/la suppression ultérieure lors de l’ouverture). - Le client REST effectue ensuite une opération Put Range sur le fichier (en utilisant
FileAccess.Write
ainsi comme spécifié dans le tableau précédent). -
Résultat: La demande du client REST échoue avec status code 409 (Conflit) et le code
SharingViolation
d’erreur . Le client SMB a toujours le fichier ouvert et refuse l’accès Écriture/Suppression.
- Le client SMB ouvre le fichier avec
La section suivante inclut un tableau complet des scénarios de violation de l’API FileREST.
Implications du mode de partage du client SMB sur FileREST
Selon le mode de partage que vous spécifiez lorsqu’un client SMB ouvre un fichier, il est possible pour FileREST de retourner status code 409 (Conflit) avec le code SharingViolation
d’erreur . Le tableau suivant répertorie un certain nombre de scénarios.
Mode de partage de fichiers client SMB | Échec des opérations FileREST avec une violation de partage |
---|---|
None (Deny Read, Write, Delete) |
Les opérations de lecture, d’écriture, de location et de suppression suivantes sur le fichier échouent :
|
Shared Read Deny Write, Delete) |
Les opérations d’écriture, de location et de suppression suivantes sur le fichier échouent :
|
Shared Write (Deny Read, Delete) |
Les opérations de lecture, de location et de suppression suivantes sur le fichier échouent :
|
Shared Delete (Deny Read, Write) |
Les opérations de lecture, d’écriture et de bail suivantes sur le fichier échouent :
|
Shared Read/Write (Deny Delete) |
Les opérations de bail et de suppression suivantes sur le fichier échouent :
|
Shared Read/Delete (Deny Write) |
Les opérations d’écriture, de location et de suppression suivantes sur le fichier échouent :
|
Shared Write/Delete (Deny Read) |
Les opérations de lecture et de bail suivantes sur le fichier échouent :
|
Shared Read/Write/Delete (Deny Nothing) |
Supprimer le fichier |
Azure Files retourne les violations de partage uniquement lorsque les fichiers sont ouverts sur les clients SMB. Pour qu’une opération de suppression de fichier FileREST réussisse, il ne peut y avoir de clients SMB avec des handles ouverts sur ce fichier. Pour plus d’informations, consultez l’opération Supprimer un fichier et Interaction entre les verrous opportunistes FileREST et SMB.
Implications du verrouillage de fichiers SMB sur l’API FileREST Lease File
Selon les options d’accès aux fichiers que vous spécifiez lorsqu’un client SMB ouvre un fichier, il est possible que l’API Fichier de bail FileREST retourne status code 409 (Conflit), avec le code SharingViolation
d’erreur . Le tableau suivant fournit des informations supplémentaires :
Option d’accès au fichier client SMB | Acquérir un bail sur fichier sans bail actif avec l’API Fichier de bail |
---|---|
None | Réussite |
Lire | Réussite |
Write | Échoue en raison de SharingViolation |
DELETE | Échoue en raison de SharingViolation |
Lecture|Écrire | Échoue en raison de SharingViolation |
Lecture|Supprimer | Échoue en raison de SharingViolation |
Écriture|Supprimer | Échoue en raison de SharingViolation |
Lecture|Écriture|Supprimer | Échoue en raison de SharingViolation |
Azure Files retourne les violations de partage uniquement lorsque les fichiers sont ouverts sur les clients SMB. Notez que pour qu’une opération FileREST Lease File réussisse, il ne peut y avoir de clients SMB avec des handles d’écriture ou de suppression ouverts sur ce fichier. Pour plus d’informations, consultez l’opération De fichier de bail et Interaction entre les verrous opportunistes FileREST et SMB.
Implications du fichier de bail FileREST pour le verrouillage de fichiers SMB
Un bail sur un fichier fournit un accès exclusif en écriture et en suppression au fichier. Lorsqu’un client SMB ouvre un fichier, il doit respecter le verrou de tout fichier loué par l’opération FileREST Lease File. Vous pouvez utiliser le tableau suivant pour déterminer si l’opération d’ouverture de fichier SMB peut être effectuée :
État du bail de fichier FileREST | Échec des opérations SMB avec une violation de partage |
---|---|
Loué | Les clients SMB qui ouvrent le fichier avec l’accès au fichier suivant échouent :
|
Disponible | None |
Rompu | None |
Implications de la suppression SMB sur FileREST
Lorsqu’un client SMB ouvre un fichier pour suppression, il marque le fichier comme étant en attente de suppression, jusqu’à ce que tous les autres handles ouverts du client SMB sur ce fichier soient fermés. Lorsqu’un fichier est marqué comme étant en attente de suppression, toute opération FileREST sur ce fichier retourne status code 409 (Conflit), avec le code SMBDeletePending
d’erreur . Le code d’état 404 (Introuvable) n’est pas retourné, car il est possible pour le client SMB de supprimer l’indicateur de suppression en attente avant de fermer le fichier. En d'autres termes, le code d'état 404 (Introuvable) ne peut être renvoyé que si le fichier a été supprimé.
Lorsqu’un fichier est dans un état de suppression en attente de suppression SMB, il n’est pas inclus dans les List Files
résultats.
Notez également que les opérations FileREST Delete File
et Delete Directory
sont validées de manière atomique et n’entraînent pas l’état de suppression en attente.
Implications d’attribut de fichier sur FileREST
Les clients SMB peuvent lire et définir les attributs de fichier suivants :
- Archive
- Lecture seule
- Hidden
- Système
Si un fichier ou un répertoire est marqué en lecture seule, toute opération FileREST qui tente d’écrire dans le fichier échoue avec status code 412 (échec de la condition préalable) et le code ReadOnlyAttribute
d’erreur . Ces opérations comprennent :
Create File
Set File Properties
Set File Metadata
Put Range
Ces attributs de fichier ne peuvent pas être définis ou lus à partir de clients REST. Une fois qu’un fichier est en lecture seule, les clients REST ne peuvent pas écrire dans le fichier tant que le client SMB n’a pas supprimé l’attribut en lecture seule.
Interaction entre les verrous opportunistes FileREST et SMB
Un verrou opportuniste SMB (oplock) est un mécanisme de mise en cache qu'un client SMB demande pour améliorer les performances et réduire les transferts réseau. Un client SMB peut mettre en cache l’état le plus récent d’un fichier ou d’un répertoire particulier. Il existe plusieurs types de verrous opportunistes, appelés types de baux SMB :
- Lecture (R) : le client SMB peut lire à partir du cache local.
- Écriture (W) : le client SMB peut écrire localement, sans avoir à vider les données dans le partage de fichiers Azure.
- Handle (H) : le client SMB n’est pas tenu d’avertir immédiatement le partage de fichiers Azure lorsqu’un handle est fermé. Ce type de verrou est utile lorsqu’une application continue d’ouvrir et de fermer des fichiers avec le même mode d’accès et de partage.
Ces types de bail sont indépendants du mode d’accès et de partage spécifié. En règle générale, un client SMB tente d’acquérir tous les types de bail chaque fois qu’il ouvre un nouveau handle sur un fichier, quel que soit le mode d’accès et de partage.
Selon l’opération FileREST appelée, vous devrez peut-être demander à rompre un verrou opportuniste existant. Dans le cas d’un oplock d’écriture, le client SMB doit vider les modifications mises en cache dans le partage de fichiers Azure. Voici quelques cas où chaque type de verrou oplock doit être rompu :
Un oplock en lecture (R) doit être rompu chaque fois qu’une opération d’écriture est émise, telle que
Put Range
.Un oplock d’écriture (W) doit être rompu chaque fois qu’une opération de lecture est émise, telle que
Get File
.Un oplock handle (H) doit être rompu chaque fois qu’un client émet une opération de suppression. Azure Files nécessite qu’aucun handle ne puisse être ouvert si une opération de suppression doit réussir.
Les oplocks de handle sont également rompus lorsqu’une opération FileREST fait face à une violation de partage avec un handle SMB existant. Cela se produit pour vérifier que les handles sont toujours ouverts par une application en cours d’exécution sur les clients.
La rupture de l’oplock peut nécessiter le vidage des modifications du client SMB mis en cache, ce qui peut entraîner des retards dans le temps de réponse de l’opération. Le vidage peut également entraîner l’échec de l’opération avec status code 408 (délai d’expiration de la demande) et le code ClientCacheFlushDelay
d’erreur .
Les sections suivantes décrivent les scénarios où les verrous oplocks sont rompus.
Un arrêt d’opération de verrouillage et un vidage du client SMB sont requis, et le client REST subit un retard
Prenons l’exemple suivant :
Le client ouvre un fichier, acquiert un verrou oplock RWH, et écrit les données localement.
Le client REST envoie une
Get File
requête.- Le partage de fichiers Azure interrompt le verrouillage d’opération d’écriture (W), laissant le client avec un oplock RH.
- Le client SMB vide ses données mises en cache sur le partage de fichiers Azure et reconnaît l’arrêt du blocage d’opération.
- Le partage de fichiers Azure traite la
Get File
demande et répond avec les données demandées.
Dans cet exemple, le client REST subit des retards. Cette situation est due au blocage d’opération et au temps nécessaire au vidage de ses données par le client SMB sur le partage de fichiers Azure.
Les appels ultérieurs à Get File
ne rencontrent pas de retards supplémentaires, car le verrou d’opération d’écriture (W) a déjà été rompu.
Une rupture de verrou oplock est requise, mais le client REST ne subit pas de retard
Prenons l’exemple suivant :
Le client SMB a acquis un verrou oplock RH.
Le client REST envoie une
Put Range
requête.- Le partage de fichiers Azure envoie une demande d’arrêt d’opération au client SMB et n’attend pas de réponse.
- Le partage de fichiers Azure traite la
Put Range
demande.
Dans cet exemple, l’arrêt du blocage d’opération est requis, mais la Put Range
demande ne connaît pas de retards supplémentaires. Une réponse n’est pas nécessaire lors de la rupture du verrouillage d’opération de lecture.
Azure Files comportement
Le tableau suivant récapitule le comportement de Azure Files pour chaque opération FileREST. Ce comportement est basé sur l’état oplock du client SMB qui a déjà acquis un handle sur le même fichier. En outre, le comportement suppose que l’accès et le partage du handle SMB ne sont pas en conflit avec l’opération FileREST.
En cas de conflit, le verrou oplock Descripteur est également rompu pour s'assurer que le descripteur est toujours ouvert sur le client. En cas d’arrêt de blocage, Azure Files devez attendre un accusé de réception indiquant que l’arrêt a réussi. En cas d’arrêt de blocage non bloquant, Azure Files n’a pas besoin d’attendre.
Opération FileREST | Types d’oplocks actuels | Arrêt d’oplock effectué | Oplock résultant |
---|---|---|---|
Obtention de fichier | RWH | Oui (bloquant) | RH |
Obtention de fichier | RH | Non | RH |
Obtention de fichier | L/E | Oui (bloquant) | R |
Obtenir les propriétés d'un fichier (Get File Properties) | RWH | Oui (bloquant) | RH |
Obtenir les propriétés d'un fichier (Get File Properties) | RH | Non | RH |
Obtenir les propriétés d'un fichier (Get File Properties) | L/E | Oui (bloquant) | R |
Liste des plages | RWH | Oui (bloquant) | RH |
Liste des plages | RH | Non | RH |
Liste des plages | L/E | Oui (bloquant) | R |
Obtenir les métadonnées d’un fichier | RWH | Oui (bloquant) | RH |
Obtenir les métadonnées d’un fichier | RH | Non | RH |
Obtenir les métadonnées d’un fichier | L/E | Oui (bloquant) | R |
Lister les fichiers | RWH | Non | RWH |
Lister les fichiers | RH | Non | RH |
Lister les fichiers | L/E | Non | L/E |
Put Range | RWH | Oui (bloquant) | None |
Put Range | RH | Oui (non bloquant) | None |
Put Range | L/E | Oui (bloquant) | None |
Définition des propriétés d'un fichier | RWH | Oui (bloquant) | None |
Définition des propriétés d'un fichier | RH | Oui (non bloquant) | None |
Définition des propriétés d'un fichier | L/E | Oui (bloquant) | None |
Définition des métadonnées d'un fichier | RWH | Oui (bloquant) | None |
Définition des métadonnées d'un fichier | RH | Oui (non bloquant) | None |
Définition des métadonnées d'un fichier | L/E | Oui (bloquant) | None |
Supprimer le fichier | RWH | Oui (bloquant) | L/E |
Supprimer le fichier | RH | Oui (bloquant) | R |
Supprimer le fichier | L/E | Non | L/E |
Dans le cas où un blocage oplock break est nécessaire, dans certaines conditions, l’opération FileREST échoue. Si l’arrêt ne réussit pas dans le délai d’expiration de la demande spécifié, ou dans les 30 secondes, selon ce qui se termine en premier, le service retourne status code 408 (Délai d’expiration de la demande) et le code ClientCacheFlushDelay
d’erreur .
La Delete File
demande nécessite également la rupture du bail de handle d’oplock (H). La rupture du handle garantit qu’aucun handle de fichier n’est toujours ouvert par une application cliente SMB lorsqu’un client REST appelle Delete File
. En cas de violation de partage, la demande échoue avec le code status 409 (conflit) et le code SharingViolation
d’erreur .