Gestire i blocchi dei file

File di Azure fornisce l'accesso alle condivisioni file cloud tramite i protocolli seguenti:

  • Server Message Block (SMB)
  • File system di rete (NFS)
  • FileREST (HTTPS)

Questo argomento descrive come gestire le interazioni di blocco dei file tra SMB e FileREST. Le condivisioni file NFS presentano semantiche di blocco diverse e supportano un subset delle API FileREST. Questo argomento non è applicabile per le condivisioni file NFS.

Blocco file SMB

I client SMB che montano condivisioni file possono usare meccanismi di blocco del file system per gestire l'accesso ai file condivisi. Queste includono:

  • Condivisione completa dell'accesso ai file per la lettura, la scrittura e l'eliminazione.
  • Blocchi di intervalli di byte per gestire l'accesso in lettura e scrittura alle aree all'interno di un singolo file.

Quando un client SMB apre un file, specifica sia l'accesso ai file che la modalità di condivisione. Le opzioni di accesso ai file seguenti vengono in genere usate dai client SMB, anche se tutte le combinazioni sono consentite:

  • Nessuno: Apre un file solo per l'accesso all'attributo di query.
  • Leggere: Apre un file solo per l'accesso in lettura.
  • Scrivere: Apre un file solo per l'accesso in scrittura.
  • Lettura/scrittura: Apre un file con autorizzazioni di lettura/scrittura.
  • Elimina: Apre un file solo per eliminare l'accesso.

I client SMB usano in genere le modalità di condivisione file seguenti:

  • Nessuno: Rifiuta la condivisione del file corrente. Qualsiasi richiesta di apertura del file con accesso in lettura, scrittura o eliminazione avrà esito negativo fino alla chiusura del file.
  • Lettura condivisa: Consente l'apertura successiva del file per la lettura. Se questo flag non è specificato, qualsiasi richiesta per aprire il file per la lettura avrà esito negativo, fino a quando il file non viene chiuso.
  • Scrittura condivisa: Consente l'apertura successiva del file per la scrittura. Se questo flag non è specificato, qualsiasi richiesta per aprire il file per la scrittura avrà esito negativo, fino a quando il file non viene chiuso.
  • Lettura/scrittura condivisa: Consente l'apertura successiva del file per la lettura o la scrittura. Se questo flag non è specificato, qualsiasi richiesta per aprire il file per la lettura o la scrittura avrà esito negativo, fino a quando il file non viene chiuso.
  • Eliminazione condivisa: Consente l'eliminazione successiva di un file. Se questo flag non è specificato, qualsiasi richiesta di eliminazione del file avrà esito negativo finché il file non viene chiuso.

Esempi di file aperti dal client SMB

Valutare gli esempi di apertura file seguenti:

  • Il file viene aperto senza violazione di condivisione

    • Client A apre il file con FileAccess.Read e FileShare.Write (nega la successiva lettura/eliminazione durante l'apertura).
    • Il client B apre quindi il file con FileAccess.Write FileShare.Read (nega la scrittura/eliminazione successiva durante l'apertura).
    • Risultato: Ciò è consentito, perché non esiste alcun conflitto tra le modalità di accesso ai file e condivisione file.
  • Violazione della condivisione a causa dell'accesso ai file

    • Client A apre il file con FileAccess.Write e FileShare.Read (nega la scrittura/eliminazione successiva durante l'apertura).
    • Il client B apre quindi il file con FileAccess.Write FileShare.Write (nega la lettura/eliminazione successiva durante l'apertura).
    • Risultato: Il client B rileva una violazione della condivisione. Il client ha specificato un accesso ai file negato dalla modalità di condivisione specificata in precedenza da Client A.
  • Violazione della condivisione a causa della modalità di condivisione

    • Client A apre il file con FileAccess.Write e FileShare.Write (nega la successiva lettura/eliminazione durante l'apertura).
    • Il client B apre quindi il file con FileAccess.Write FileShare.Read (nega la scrittura/eliminazione successiva durante l'apertura).
    • Risultato: Il client B rileva una violazione della condivisione. Il client ha specificato una modalità di condivisione che nega l'accesso in scrittura a un file ancora aperto per l'accesso in scrittura.

Accesso fileREST

Quando si esegue un'operazione FileREST, questa operazione deve rispettare la modalità di condivisione specificata per qualsiasi file aperto in un client SMB. Usare la modalità di accesso ai file seguente per determinare se l'operazione può essere completata:

Operazione FileREST Equivalente all'accesso ai file
Elenca directory e file N/D.
Creare file Scrittura, eliminazione.
Get File Lettura.
Imposta proprietà file Scrittura.
Ottenere proprietà file N/D.
Set File Metadata Scrittura.
Recupera metadati di file N/D.
Delete File Delete.
Put Range Scrittura.
List Ranges Lettura.
Lease File Scrittura, eliminazione e lettura condivisa per la durata del lease.

Elencare directory e file, ottenere proprietà file e ottenere metadati file non funzionano sul contenuto del file. Queste operazioni non richiedono l'accesso in lettura al file, ovvero queste operazioni hanno esito positivo anche se un client SMB ha il file aperto per l'accesso in lettura esclusivo.

Di seguito sono riportati esempi di richieste FileREST che interagiscono con le modalità di condivisione SMB:

  • Violazione di condivisione fileREST

    • Il client SMB apre il file con FileAccess.Read e FileShare.Write (nega la successiva lettura/eliminazione durante l'apertura).
    • Il client REST esegue quindi un'operazione Get File nel file ( usando FileAccess.Read così come specificato nella tabella precedente).
    • Risultato: La richiesta del client REST ha esito negativo con il codice di stato 409 (Conflitto) e il codice SharingViolationdi errore . Il client SMB ha ancora il file aperto e nega l'accesso di lettura/eliminazione.
  • Violazione di condivisione dell'intervallo fileREST Put

    • Il client SMB apre il file con FileAccess.Write e FileShare.Read (nega la successiva scrittura/eliminazione durante l'apertura).
    • Il client REST esegue quindi un'operazione Put Range nel file (usando FileAccess.Write così come specificato nella tabella precedente).
    • Risultato: La richiesta del client REST ha esito negativo con il codice di stato 409 (Conflitto) e il codice SharingViolationdi errore . Il client SMB ha ancora il file aperto e nega l'accesso Write/Delete.

La sezione successiva include una tabella completa di scenari di violazione della condivisione api FileREST.

Implicazioni della modalità di condivisione client SMB su FileREST

A seconda della modalità di condivisione specificata quando un client SMB apre un file, è possibile che FileREST restituisca codice di stato 409 (conflitto) con codice SharingViolationdi errore . Nella tabella seguente sono elencati diversi scenari.

Modalità di condivisione file client SMB Operazioni fileREST non riuscite con una violazione di condivisione
None

(Deny Read, Write, Delete)
Le operazioni di lettura, scrittura, lease ed eliminazione seguenti nel file avranno esito negativo:

  • Create File
  • Get File
  • Set File Properties
  • Set File Metadata
  • Elimina file
  • Put Range
  • List Ranges
  • Lease File
Shared Read

Deny Write, Delete)
Le operazioni di scrittura, lease ed eliminazione seguenti sul file avranno esito negativo:

  • Create File
  • Set File Properties
  • Set File Metadata
  • Elimina file
  • Put Range
  • Lease File
Shared Write

(Deny Read, Delete)
Le operazioni di lettura, lease ed eliminazione seguenti sul file avranno esito negativo:

  • Create File
  • Get File
  • Elimina file
  • List Ranges
  • Lease File
Shared Delete

(Deny Read, Write)
Le operazioni di lettura, scrittura e lease seguenti sul file avranno esito negativo:

  • Create File
  • Get File
  • Set File Properties
  • Set File Metadata
  • Put Range
  • List Ranges
  • Elimina file
  • Lease File
Shared Read/Write

(Deny Delete)
Le operazioni di lease ed eliminazione seguenti sul file avranno esito negativo:

  • Create File
  • Elimina file
  • Lease File
Shared Read/Delete

(Deny Write)
Le operazioni di scrittura, lease ed eliminazione seguenti sul file avranno esito negativo:

  • Create File
  • Set File Properties
  • Set File Metadata
  • Put Range
  • Elimina file
  • Lease File
Shared Write/Delete

(Deny Read)
Le operazioni di lettura e lease seguenti sul file avranno esito negativo:

  • Get File
  • List Ranges
  • Elimina file
  • Lease File
Shared Read/Write/Delete

(Deny Nothing)
Elimina file

File di Azure restituisce violazioni di condivisione solo quando i file sono aperti nei client SMB. Affinché un'operazione di eliminazione file FileREST abbia esito positivo, non possono essere presenti client SMB con handle aperti su tale file. Per altre informazioni, vedere Delete File operation and Interaction between FileREST and SMB opportunistic locks.For more information, see the Delete File operation and Interaction between FileREST and SMB opportunistic locks.

Implicazioni per il blocco dei file SMB nell'API file di lease FileREST

A seconda delle opzioni di accesso ai file specificate quando un client SMB apre un file, è possibile che l'API file di lease FileREST restituisca il codice di stato 409 (conflitto), con codice SharingViolationdi errore . Nella tabella seguente vengono fornite ulteriori informazioni:

Opzione di accesso ai file client SMB Acquisire il lease sul file senza un lease attivo con l'API file di lease
Nessuno Riesce
Read Riesce
Write Non riesce a causa di SharingViolation
Elimina Non riesce a causa di SharingViolation
Lettura|Scrivere Non riesce a causa di SharingViolation
Lettura|Elimina Non riesce a causa di SharingViolation
Scrittura |Elimina Non riesce a causa di SharingViolation
Lettura|Scrittura |Elimina Non riesce a causa di SharingViolation

File di Azure restituisce violazioni di condivisione solo quando i file sono aperti nei client SMB. Si noti che per l'esito positivo di un'operazione file di lease FileREST non possono essere presenti client SMB con handle di scrittura o eliminazione aperti su tale file. Per altre informazioni, vedere l'operazione lease file e l'interazione tra blocchi opportunistici FileREST e SMB.

Implicazioni del file di lease FileREST per il blocco dei file SMB

Un lease in un file fornisce accesso esclusivo in scrittura ed eliminazione al file. Quando un client SMB apre un file, deve rispettare il blocco per qualsiasi file in lease dall'operazione FileREST Lease File. È possibile utilizzare la tabella seguente per determinare se è possibile completare l'operazione SMB open file:

Stato di lease del file FILEREST Le operazioni SMB hanno esito negativo con una violazione di condivisione
Con lease I client SMB che aprono il file con l'accesso file seguente avranno esito negativo:

  • FileAccess.Write
  • FileAccess.Delete
  • FileAccess.Read|FileAccess.Write
  • FileAccess.Write|FileAccess.Delete
  • FileAccess.Read|FileAccess.Write|FileAccess.Delete
Disponibile Nessuno
Rotto Nessuno

Implicazioni per l'eliminazione di SMB in FileREST

Quando un client SMB apre un file per l'eliminazione, contrassegna il file come eliminazione in sospeso, fino a quando non vengono chiusi tutti gli altri handle di apertura del client SMB in tale file. Mentre un file è contrassegnato come eliminazione in sospeso, qualsiasi operazione FileREST su tale file restituirà il codice di stato 409 (Conflitto), con codice SMBDeletePendingdi errore . Il codice di stato 404 (Non trovato) non viene restituito, perché è possibile che il client SMB rimuova il flag di eliminazione in sospeso prima di chiudere il file. In altre parole, il codice di stato 404 (Non trovato) è previsto solo dopo la rimozione del file.

Mentre un file si trova in uno stato di eliminazione in sospeso SMB, non verrà incluso nei List Files risultati.

Si noti anche che il commit delle operazioni e Delete Directory FileREST Delete File viene eseguito in modo atomico e non comporta lo stato di eliminazione in sospeso.

Implicazioni degli attributi di file in FileREST

Ai client SMB è consentito leggere e impostare gli attributi dei file, ad esempio:

  • Archiviazione
  • Sola lettura
  • Nascosto
  • Sistema

Se un file o una directory è contrassegnata come di sola lettura, qualsiasi operazione FileREST che tenta di scrivere nel file avrà esito negativo con codice di stato 412 (Precondizione non riuscita) e codice ReadOnlyAttributeerrore . tra cui:

  • Create File
  • Set File Properties
  • Set File Metadata
  • Put Range

Questi attributi di file non possono essere impostati o letti dai client REST. Dopo che un file viene reso di sola lettura, i client REST non sono in grado di scrivere nel file finché il client SMB non rimuove l'attributo di sola lettura.

Interazione tra blocchi opportunistici FileREST e SMB

Il blocco opportunistico SMB (oplock) è un meccanismo di memorizzazione nella cache richiesto dai client SMB per migliorare le prestazioni e ridurre i trasferimenti di rete. Un client SMB può memorizzare nella cache lo stato più recente di un file o di una directory specifica. Esistono più tipi di blocco opportunistico, noti come tipi di lease SMB:

  • Lettura (R): il client SMB può leggere dalla cache locale.
  • Scrittura (W): il client SMB può scrivere in locale, senza la necessità di scaricare nuovamente i dati nella condivisione file di Azure.
  • Handle (H): il client SMB non è necessario per inviare immediatamente una notifica alla condivisione file di Azure quando un handle viene chiuso. Questo tipo di blocco è utile quando un'applicazione continua ad aprire e chiudere i file con la stessa modalità di accesso e condivisione.

Questi tipi di lease sono indipendenti dalla modalità di accesso e condivisione specificata. In genere, un client SMB tenta di acquisire tutti i tipi di lease ogni volta che apre un nuovo handle in un file, indipendentemente dalla modalità di accesso e condivisione.

A seconda dell'operazione FileREST chiamata, potrebbe essere necessario richiedere di interrompere un blocco opportunistico esistente. Nel caso di un oplock di scrittura, il client SMB deve scaricare le modifiche memorizzate nella cache nella condivisione file di Azure. Di seguito sono riportati alcuni casi in cui è necessario interrompere ciascun tipo di blocco opportunistico:

  • Un oplock di lettura (R) deve essere interrotto ogni volta che viene eseguita un'operazione di scrittura, ad esempio Put Range.

  • Un oplock write (W) deve essere interrotto ogni volta che viene eseguita un'operazione di lettura, ad esempio Get File.

  • Un oplock handle (H) deve essere interrotto ogni volta che un client genera un'operazione di eliminazione. File di Azure richiede che nessun handle possa essere aperto se un'operazione di eliminazione ha esito positivo.

    Gli oplock di handle vengono interrotti anche quando un'operazione FileREST presenta una violazione di condivisione con un handle SMB esistente. Ciò si verifica per verificare che gli handle siano ancora aperti da un'applicazione in esecuzione nei client.

L'interruzione dell'oplock potrebbe richiedere lo scaricamento delle modifiche del client SMB memorizzate nella cache, che possono causare ritardi nel tempo di risposta dell'operazione. Lo scaricamento potrebbe anche causare l'esito negativo dell'operazione con il codice di stato 408 (timeout della richiesta) e il codice ClientCacheFlushDelaydi errore .

Le sezioni seguenti illustrano gli scenari in cui gli oplock vengono interrotti.

Sono necessari un'interruzione di oplock e lo scaricamento del client SMB e il client REST riscontra un ritardo

Prendere in considerazione gli esempi seguenti:

  1. Il client SMB apre un file, acquisisce il blocco opportunistico RWH e scrive i dati localmente.

  2. Il client REST invia una Get File richiesta.

    • La condivisione file di Azure interrompe l'oplock di scrittura (W), lasciando il client con un oplock RH.
    • Il client SMB scarica i dati memorizzati nella cache nella condivisione file di Azure e riconosce l'interruzione di oplock.
    • La condivisione file di Azure elabora la Get File richiesta e risponde con i dati richiesti.

In questo esempio il client REST riscontra ritardi. Questa situazione è causata dall'interruzione di blocco e dal tempo impiegato dal client SMB per scaricare i dati nella condivisione file di Azure.

Le chiamate successive a Get File non riscontrano ritardi aggiuntivi, perché l'oplock di scrittura (W) è già stato interrotto.

È richiesta l'interruzione di un blocco opportunistico, ma il client REST non riscontrerà ritardi

Prendere in considerazione gli esempi seguenti:

  1. Il client SMB ha acquisito un blocco opportunistico di lettura e handle (LH).

  2. Il client REST invia una Put Range richiesta.

    • La condivisione file di Azure invia una richiesta di interruzione di blocco al client SMB e non attende una risposta.
    • La condivisione file di Azure elabora la Put Range richiesta.

In questo esempio, l'interruzione di oplock è obbligatoria, ma la Put Range richiesta non riscontra ritardi aggiuntivi. Una risposta non è necessaria quando si interrompe l'oplock di lettura.

comportamento File di Azure

Nella tabella seguente viene riepilogato il comportamento di File di Azure per ogni operazione FileREST. Questo comportamento si basa sullo stato di oplock del client SMB che ha già acquisito un handle nello stesso file. Inoltre, il comportamento presuppone che l'SMB gestisca l'accesso e la condivisione non siano in conflitto con l'operazione FileREST.

Se viene rilevato un conflitto, viene interrotto anche il blocco opportunistico dell'handle per garantire che l'handle sia ancora aperto nel client. Nel caso di un'interruzione di blocco, File di Azure deve attendere che l'interruzione sia stata completata correttamente. Nel caso di un'interruzione di oplock non blocca, File di Azure non deve attendere.

Operazione FileREST Tipi di oplock correnti Interruzione oplock eseguita Blocco operativo risultante
Get File LSH Sì (di blocco) LH
Get File LH No LH
Get File LS Sì (di blocco) R
Get File Properties LSH Sì (di blocco) LH
Get File Properties LH No LH
Get File Properties LS Sì (di blocco) R
List Ranges LSH Sì (di blocco) LH
List Ranges LH No LH
List Ranges LS Sì (di blocco) R
Recupera metadati di file LSH Sì (di blocco) LH
Recupera metadati di file LH No LH
Recupera metadati di file LS Sì (di blocco) R
Elencare file LSH No LSH
Elencare file LH No LH
Elencare file LS No LS
Put Range LSH Sì (di blocco) Nessuno
Put Range LH Sì (non di blocco) Nessuno
Put Range LS Sì (di blocco) Nessuno
Set File Properties LSH Sì (di blocco) Nessuno
Set File Properties LH Sì (non di blocco) Nessuno
Set File Properties LS Sì (di blocco) Nessuno
Set File Metadata LSH Sì (di blocco) Nessuno
Set File Metadata LH Sì (non di blocco) Nessuno
Set File Metadata LS Sì (di blocco) Nessuno
Elimina file LSH Sì (di blocco) LS
Elimina file LH Sì (di blocco) R
Elimina file LS No LS

Nel caso in cui sia necessaria un'interruzione di blocco, in determinate condizioni, l'operazione FileREST ha esito negativo. Se l'interruzione non riesce entro il timeout della richiesta specificata o entro 30 secondi, il servizio restituisce prima il codice di stato 408 (Timeout richiesta) e il codice ClientCacheFlushDelaydi errore .

La Delete File richiesta richiede anche l'interruzione del lease di handle oplock (H). L'interruzione dell'handle garantisce che non ci siano handle di file ancora aperti da un'applicazione client SMB quando un client REST chiama Delete File. Se si verifica una violazione della condivisione, la richiesta ha esito negativo con il codice di stato 409 (Conflitto) e il codice SharingViolationdi errore .

Vedi anche

concetti di File di Azure