Administrar bloqueos de archivos
Azure Files proporciona acceso a recursos compartidos de archivos en la nube mediante los siguientes protocolos:
- Bloque de mensajes del servidor (SMB)
- Network File System (NFS)
- FileREST (HTTPS)
En este tema se describe cómo administrar las interacciones de bloqueo de archivos entre SMB y FileREST. Los recursos compartidos de archivos NFS tienen una semántica de bloqueo diferente y admiten un subconjunto de las API de FileREST. Este tema no es aplicable a los recursos compartidos de archivos NFS.
Bloqueo de archivos SMB
Los clientes SMB que montan recursos compartidos de archivos pueden usar mecanismos de bloqueo del sistema de archivos para administrar el acceso a archivos compartidos. Se incluyen los siguientes:
- Uso compartido de acceso a todos los archivos para lectura, escritura y eliminación.
- Bloqueos de intervalo de bytes para administrar el acceso de lectura y escritura a las regiones dentro de un único archivo.
Cuando un cliente SMB abre un archivo, especifica tanto el acceso a archivos como el modo de recurso compartido. Los clientes SMB suelen usar las siguientes opciones de acceso a archivos, aunque se permiten todas las combinaciones:
- Ninguno: Abre un archivo solo para el acceso a atributos de consulta.
- Leer: Abre un archivo solo para acceso de lectura.
- Escribir: Abre un archivo solo para el acceso de escritura.
- Lectura y escritura: Abre un archivo con permisos de lectura y escritura.
- Eliminar: Abre un archivo solo para eliminar el acceso.
Los clientes SMB utilizan normalmente los siguientes modos de recurso compartido de archivos:
- Ninguno: Rechaza el uso compartido del archivo actual. Se producirá un error en cualquier solicitud para abrir el archivo con acceso de lectura, escritura o eliminación, hasta que se cierre el archivo.
- Lectura compartida: Permite la apertura posterior del archivo para su lectura. Si no se especifica esta marca, se producirá un error en cualquier solicitud para abrir el archivo para su lectura hasta que se cierre el archivo.
- Escritura compartida: Permite la apertura posterior del archivo para escribir. Si no se especifica esta marca, se producirá un error en cualquier solicitud para abrir el archivo para escribir, hasta que se cierre el archivo.
- Lectura y escritura compartidas: Permite la apertura posterior del archivo para leer o escribir. Si no se especifica esta marca, se producirá un error en cualquier solicitud para abrir el archivo para leer o escribir, hasta que se cierre el archivo.
- Eliminación compartida: Permite la eliminación posterior de un archivo. Si no se especifica esta marca, se producirá un error en cualquier solicitud para eliminar el archivo hasta que se cierre el archivo.
Ejemplos de archivos abiertos de cliente SMB
A continuación, se muestran algunos ejemplos para abrir archivos:
El archivo se abre sin infracción de uso compartido
- El cliente A abre el archivo con
FileAccess.Read
y FileShare.Write (deniega la lectura y eliminación posteriores mientras está abierto). - A continuación, el cliente B abre el archivo con
FileAccess.Write
FileShare.Read (deniega la escritura y eliminación posteriores mientras está abierto). - Resultado: Esto se permite porque no hay ningún conflicto entre los modos de acceso a archivos y recursos compartidos de archivos.
- El cliente A abre el archivo con
Infracción de uso compartido debido al acceso a archivos
- El cliente A abre el archivo con
FileAccess.Write
y FileShare.Read (deniega la escritura o eliminación posteriores mientras está abierto). - A continuación, el cliente B abre el archivo con
FileAccess.Write
FileShare.Write (deniega la lectura y eliminación posteriores mientras está abierto). - Resultado: El cliente B encuentra una infracción de uso compartido. El cliente especificó un acceso a archivos denegado por el modo de recurso compartido especificado anteriormente por el cliente A.
- El cliente A abre el archivo con
Infracción de uso compartido debido al modo de uso compartido
- El cliente A abre el archivo con
FileAccess.Write
y FileShare.Write (deniega la lectura y eliminación posteriores mientras está abierto). - A continuación, el cliente B abre el archivo con
FileAccess.Write
FileShare.Read (deniega la escritura y eliminación posteriores mientras está abierto). - Resultado: El cliente B encuentra una infracción de uso compartido. El cliente especificó un modo de recurso compartido que deniega el acceso de escritura a un archivo que todavía está abierto para el acceso de escritura.
- El cliente A abre el archivo con
Acceso a archivos FileREST
Al realizar una operación FileREST, esta operación debe respetar el modo de recurso compartido especificado para cualquier archivo abierto en un cliente SMB. Use el siguiente modo de acceso a archivos para determinar si se puede completar la operación:
Operación FileREST | Equivalente al acceso a archivos |
---|---|
Enumerar directorios y archivos | N/D |
Crear archivo | Escritura, eliminación. |
Get File | Lectura. |
Establecer propiedades del archivo | Escritura. |
Obtener propiedades del archivo | N/D |
Set File Metadata | Escritura. |
Obtener metadatos del archivo | N/D |
Eliminar archivo | Eliminar: |
Put Range | Escritura. |
Enumerar intervalos | Lectura. |
Archivo de concesión | Escritura, eliminación y lectura compartida durante la concesión. |
Enumerar directorios y archivos, Obtener propiedades de archivo y Obtener metadatos de archivo no funcionan en el contenido del archivo. Estas operaciones no requieren acceso de lectura al archivo (es decir, estas operaciones se realizan correctamente incluso si un cliente SMB tiene el archivo abierto para acceso de lectura exclusivo).
A continuación se muestran ejemplos de solicitudes FileREST que interactúan con los modos de recurso compartido SMB:
Infracción de obtención de archivos de obtención de archivos
- El cliente SMB abre el archivo con
FileAccess.Read
y FileShare.Write (deniega la lectura y eliminación posteriores mientras está abierto). - A continuación, el cliente REST realiza una operación Get File en el archivo (con lo que se usa
FileAccess.Read
como se especifica en la tabla anterior). -
Resultado: Se produce un error en la solicitud del cliente REST con el código de estado 409 (conflicto) y el código
SharingViolation
de error . El cliente SMB sigue teniendo el archivo abierto y deniega el acceso de lectura y eliminación.
- El cliente SMB abre el archivo con
Infracción de uso compartido de intervalos put de FileREST
- El cliente SMB abre el archivo con
FileAccess.Write
y FileShare.Read (deniega la escritura o eliminación posteriores mientras está abierto). - A continuación, el cliente REST realiza una operación Put Range en el archivo (usando
FileAccess.Write
de este modo, como se especifica en la tabla anterior). -
Resultado: Se produce un error en la solicitud del cliente REST con el código de estado 409 (conflicto) y el código
SharingViolation
de error . El cliente SMB sigue teniendo el archivo abierto y deniega el acceso de escritura y eliminación.
- El cliente SMB abre el archivo con
En la siguiente sección se incluye una tabla completa de escenarios de infracción de uso compartido de la API FileREST.
Implicaciones del modo de uso compartido de cliente SMB en FileREST
Según el modo de recurso compartido que especifique cuando un cliente SMB abre un archivo, es posible que FileREST devuelva el código de estado 409 (Conflicto) con el código SharingViolation
de error . En la tabla siguiente se enumeran varios escenarios.
Modo de uso compartido de archivos de cliente SMB | Error en las operaciones de FileREST con una infracción de uso compartido |
---|---|
None (Deny Read, Write, Delete) |
Se producirá un error en las siguientes operaciones de lectura, escritura, concesión y eliminación en el archivo:
|
Shared Read Deny Write, Delete) |
Se producirá un error en las siguientes operaciones de escritura, concesión y eliminación en el archivo:
|
Shared Write (Deny Read, Delete) |
Se producirá un error en las siguientes operaciones de lectura, concesión y eliminación en el archivo:
|
Shared Delete (Deny Read, Write) |
Se producirá un error en las siguientes operaciones de lectura, escritura y concesión en el archivo:
|
Shared Read/Write (Deny Delete) |
Se producirá un error en las siguientes operaciones de concesión y eliminación en el archivo:
|
Shared Read/Delete (Deny Write) |
Se producirá un error en las siguientes operaciones de escritura, concesión y eliminación en el archivo:
|
Shared Write/Delete (Deny Read) |
Se producirá un error en las siguientes operaciones de lectura y concesión en el archivo:
|
Shared Read/Write/Delete (Deny Nothing) |
Eliminar archivo |
Azure Files devuelve infracciones de uso compartido solo cuando los archivos están abiertos en clientes SMB. Para que una operación FileREST Delete File se realice correctamente, no puede haber clientes SMB con identificadores abiertos en ese archivo. Para obtener más información, vea la operación Eliminar archivo e Interacción entre FileREST y bloqueos oportunistas de SMB.
Implicaciones de bloqueo de archivos SMB en FileREST Lease File API
Dependiendo de las opciones de acceso a archivos que especifique cuando un cliente SMB abra un archivo, es posible que fileREST Lease File File API devuelva el código de estado 409 (Conflicto), con código SharingViolation
de error . En la tabla siguiente se proporciona más información:
Opción de acceso a archivos de cliente SMB | Adquisición de la concesión en un archivo sin una concesión activa con la API de archivo de concesión |
---|---|
Ninguno | Se realiza correctamente |
Lectura | Se realiza correctamente |
Escritura | Se produce un error debido a SharingViolation |
Eliminar | Se produce un error debido a SharingViolation |
Lectura|Escribir | Se produce un error debido a SharingViolation |
Lectura|Eliminar | Se produce un error debido a SharingViolation |
Escribir|Eliminar | Se produce un error debido a SharingViolation |
Lectura|Escribir|Eliminar | Se produce un error debido a SharingViolation |
Azure Files devuelve infracciones de uso compartido solo cuando los archivos están abiertos en clientes SMB. Tenga en cuenta que, para que una operación de archivo de concesión de FileREST se realice correctamente, no puede haber clientes SMB con identificadores de escritura o eliminación abiertos en ese archivo. Para obtener más información, vea la operación de archivo de concesión e interacción entre FileREST y bloqueos oportunistas de SMB.
Implicaciones del archivo de concesión de FileREST para el bloqueo de archivos SMB
Una concesión en un archivo proporciona acceso exclusivo de escritura y eliminación al archivo. Cuando un cliente SMB abre un archivo, debe respetar el bloqueo de cualquier archivo concedido por la operación FileREST Lease File. Puede usar la tabla siguiente para determinar si se puede completar la operación de archivo abierto SMB:
Estado de concesión de archivos FileREST | Error en las operaciones de SMB con una infracción de uso compartido |
---|---|
Leased | Los clientes SMB que abren el archivo con el siguiente acceso a archivos producirán un error:
|
Disponible | Ninguno |
Interrumpido | Ninguno |
Implicaciones de eliminación de SMB en FileREST
Cuando un cliente SMB abre un archivo para eliminarlo, marca el archivo como eliminación pendiente, hasta que se cierren todos los demás identificadores de apertura del cliente SMB en ese archivo. Mientras un archivo está marcado como eliminación pendiente, cualquier operación FileREST en ese archivo devolverá el código de estado 409 (Conflicto), con código SMBDeletePending
de error . No se devuelve el código de estado 404 (no encontrado), ya que es posible que el cliente SMB quite la marca de eliminación pendiente antes de cerrar el archivo. En otras palabras, el código de estado 404 (No encontrado) solamente se espera cuando el archivo se ha quitado.
Aunque un archivo está en un estado de eliminación pendiente de SMB, no se incluirá en los List Files
resultados.
Tenga en cuenta también que las operaciones y Delete Directory
FileREST Delete File
se confirman de forma atómica y no dan lugar a un estado de eliminación pendiente.
Implicaciones del atributo de archivo en FileREST
Los clientes SMB pueden leer y establecer atributos de archivo, incluidos:
- Archivar
- Solo lectura
- Hidden
- Sistema
Si un archivo o directorio está marcado como de solo lectura, cualquier operación FileREST que intente escribir en el archivo producirá un error con el código de estado 412 (Error de condición previa) y el código ReadOnlyAttribute
de error . Entre las operaciones se incluyen:
Create File
Set File Properties
Set File Metadata
Put Range
Estos atributos de archivo no se pueden establecer ni leer desde clientes REST. Después de realizar un archivo de solo lectura, los clientes REST no pueden escribir en el archivo hasta que el cliente SMB quita el atributo de solo lectura.
Interacción entre FileREST y bloqueos oportunistas de SMB
El bloqueo oportunista de SMB (bloqueo oportunista) es un mecanismo de almacenamiento en caché que los clientes SMB solicitan con el fin de mejorar el rendimiento y reducir las transferencias de red. Un cliente SMB puede almacenar en caché el estado más reciente de un archivo o directorio determinado. Hay varios tipos de bloqueo oportunista, denominados tipos de concesión SMB:
- Lectura (R): el cliente SMB puede leer desde la memoria caché local.
- Escritura (W): el cliente SMB puede escribir localmente, sin necesidad de volver a vaciar los datos en el recurso compartido de archivos de Azure.
- Handle (H):el cliente SMB no es necesario para notificar inmediatamente al recurso compartido de archivos de Azure cuando se cierra un identificador. Este tipo de bloqueo es útil cuando una aplicación continúa abriendo y cerrando archivos con el mismo modo de acceso y uso compartido.
Estos tipos de concesión son independientes del modo de acceso y uso compartido especificado. Normalmente, un cliente SMB intenta adquirir todos los tipos de concesión cada vez que abre un nuevo identificador en un archivo, independientemente del modo de acceso y uso compartido.
Según la operación FileREST a la que se llama, es posible que tenga que solicitar que interrumpa un bloqueo oportunista existente. En el caso de un interbloqueo de escritura, el cliente SMB debe vaciar los cambios almacenados en caché en el recurso compartido de archivos de Azure. Estos son algunos ejemplos en los que se deben interrumpir los tipos de operación de bloqueo oportunista:
Un interbloqueo de lectura (R) debe romperse cada vez que se emite una operación de escritura, como
Put Range
.Se debe romper un interbloqueo de escritura (W) cada vez que se emite una operación de lectura, como
Get File
.Se debe romper un bloqueo de operación handle (H) cada vez que un cliente emite una operación de eliminación. Azure Files requiere que no se puedan abrir identificadores si una operación de eliminación se realiza correctamente.
Los bloqueos de operación de identificador también se interrumpen cuando una operación FileREST se enfrenta a una infracción de uso compartido con un identificador SMB existente. Esto ocurre para comprobar que una aplicación que se ejecuta en los clientes sigue abriendo los identificadores.
La interrupción del interbloqueo puede requerir cambios de cliente SMB almacenados en caché, lo que puede provocar retrasos en el tiempo de respuesta de la operación. El vaciado también puede provocar un error en la operación con el código de estado 408 (tiempo de espera de solicitud) y el código ClientCacheFlushDelay
de error .
En las secciones siguientes se describen escenarios en los que se interrumpen los interbloqueos.
Se requiere un interbloqueo de interbloqueo y un vaciado del cliente SMB, y el cliente REST experimenta un retraso.
Considere el ejemplo siguiente:
El cliente SMB abre un archivo, adquiere un bloqueo oportunista RWH y escribe los datos localmente.
El cliente REST envía una
Get File
solicitud.- El recurso compartido de archivos de Azure interrumpe el interbloqueo de escritura (W), dejando al cliente con un interbloqueo RH.
- El cliente SMB vacía sus datos almacenados en caché en el recurso compartido de archivos de Azure y confirma la interrupción de interbloqueo de operación.
- El recurso compartido de archivos de Azure procesa la
Get File
solicitud y responde con los datos solicitados.
En este ejemplo, el cliente REST experimenta retrasos. Esta situación se debe a la interrupción del interbloqueo de operación y el tiempo que tarda el cliente SMB en vaciar sus datos en el recurso compartido de archivos de Azure.
Las llamadas posteriores para Get File
no experimentar retrasos adicionales, ya que el interbloqueo de escritura (W) ya se ha interrumpido.
Se requiere una interrupción de bloqueo oportunista, pero el cliente REST no experimentará ningún retraso
Considere el ejemplo siguiente:
El cliente SMB ha adquirido un bloqueo oportunista RH.
El cliente REST envía una
Put Range
solicitud.- El recurso compartido de archivos de Azure envía una solicitud de interrupción de interbloqueo al cliente SMB y no espera una respuesta.
- El recurso compartido de archivos de Azure procesa la
Put Range
solicitud.
En este ejemplo, se requiere la interrupción de interbloqueo, pero la Put Range
solicitud no experimenta retrasos adicionales. No se necesita una respuesta al interrumpir el interbloqueo de lectura.
comportamiento de Azure Files
En la tabla siguiente se resume el comportamiento de Azure Files para cada operación FileREST. Este comportamiento se basa en el estado de interbloqueo del cliente SMB que ya ha adquirido un identificador en el mismo archivo. Además, el comportamiento supone que el SMB controla el acceso y el uso compartido no entran en conflicto con la operación FileREST.
Si hay un conflicto, el bloqueo oportunista del identificador también se interrumpe para asegurarse de que el identificador está todavía abierto en el cliente. En el caso de un interbloqueo de bloqueo, Azure Files debe esperar una confirmación de que la interrupción se realizó correctamente. En el caso de una interrupción de bloqueo de operación sin bloqueo, Azure Files no tiene que esperar.
Operación FileREST | Tipos de interbloqueo actuales | Interrupción de interbloqueo realizada | Interbloqueo resultante |
---|---|---|---|
Get File | RWH | Sí (bloqueo) | RH |
Get File | RH | No | RH |
Get File | RW | Sí (bloqueo) | R |
Get Container Properties | RWH | Sí (bloqueo) | RH |
Get Container Properties | RH | No | RH |
Get Container Properties | RW | Sí (bloqueo) | R |
List Ranges | RWH | Sí (bloqueo) | RH |
List Ranges | RH | No | RH |
List Ranges | RW | Sí (bloqueo) | R |
Obtener metadatos de archivo | RWH | Sí (bloqueo) | RH |
Obtener metadatos de archivo | RH | No | RH |
Obtener metadatos de archivo | RW | Sí (bloqueo) | R |
Enumeración de archivos | RWH | No | RWH |
Enumeración de archivos | RH | No | RH |
Enumeración de archivos | RW | No | RW |
Put Range | RWH | Sí (bloqueo) | Ninguno |
Put Range | RH | Sí (sin bloqueo) | Ninguno |
Put Range | RW | Sí (bloqueo) | Ninguno |
Set File Properties | RWH | Sí (bloqueo) | Ninguno |
Set File Properties | RH | Sí (sin bloqueo) | Ninguno |
Set File Properties | RW | Sí (bloqueo) | Ninguno |
Set File Metadata | RWH | Sí (bloqueo) | Ninguno |
Set File Metadata | RH | Sí (sin bloqueo) | Ninguno |
Set File Metadata | RW | Sí (bloqueo) | Ninguno |
Eliminar archivo | RWH | Sí (bloqueo) | RW |
Eliminar archivo | RH | Sí (bloqueo) | R |
Eliminar archivo | RW | No | RW |
En caso de que se requiera una interrupción de bloqueo de bloqueo, en determinadas condiciones, se produce un error en la operación FileREST. Si la interrupción no se realiza correctamente dentro del tiempo de espera de solicitud especificado o en un plazo de 30 segundos, lo que se complete primero, el servicio devuelve el código de estado 408 (tiempo de espera de solicitud) y el código ClientCacheFlushDelay
de error .
La Delete File
solicitud también requiere interrumpir la concesión del identificador de interbloqueo (H). La interrupción del identificador garantiza que no hay ningún identificador de archivo abierto por una aplicación cliente SMB cuando un cliente REST llama a Delete File
. Si hay una infracción de uso compartido, se produce un error en la solicitud con el código de estado 409 (conflicto) y el código SharingViolation
de error .