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

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 SharingViolationde error . El cliente SMB sigue teniendo el archivo abierto y deniega el acceso de lectura y eliminación.
  • 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 SharingViolationde error . El cliente SMB sigue teniendo el archivo abierto y deniega el acceso de escritura y eliminación.

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 SharingViolationde 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:

  • Creación de archivo
  • Get File
  • Set File Properties
  • Set File Metadata
  • Eliminar archivo
  • Put Range
  • List Ranges
  • Archivo de concesión
Shared Read

Deny Write, Delete)
Se producirá un error en las siguientes operaciones de escritura, concesión y eliminación en el archivo:

  • Creación de archivo
  • Set File Properties
  • Set File Metadata
  • Eliminar archivo
  • Put Range
  • Archivo de concesión
Shared Write

(Deny Read, Delete)
Se producirá un error en las siguientes operaciones de lectura, concesión y eliminación en el archivo:

  • Creación de archivo
  • Get File
  • Eliminar archivo
  • List Ranges
  • Archivo de concesión
Shared Delete

(Deny Read, Write)
Se producirá un error en las siguientes operaciones de lectura, escritura y concesión en el archivo:

  • Creación de archivo
  • Get File
  • Set File Properties
  • Set File Metadata
  • Put Range
  • List Ranges
  • Eliminar archivo
  • Archivo de concesión
Shared Read/Write

(Deny Delete)
Se producirá un error en las siguientes operaciones de concesión y eliminación en el archivo:

  • Creación de archivo
  • Eliminar archivo
  • Archivo de concesión
Shared Read/Delete

(Deny Write)
Se producirá un error en las siguientes operaciones de escritura, concesión y eliminación en el archivo:

  • Creación de archivo
  • Set File Properties
  • Set File Metadata
  • Put Range
  • Eliminar archivo
  • Archivo de concesión
Shared Write/Delete

(Deny Read)
Se producirá un error en las siguientes operaciones de lectura y concesión en el archivo:

  • Get File
  • List Ranges
  • Eliminar archivo
  • Archivo de concesión
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 SharingViolationde 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:

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

  1. El cliente SMB abre un archivo, adquiere un bloqueo oportunista RWH y escribe los datos localmente.

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

  1. El cliente SMB ha adquirido un bloqueo oportunista RH.

  2. 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 ClientCacheFlushDelayde 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 SharingViolationde error .

Consulte también

conceptos de Azure Files