Zarządzanie blokadami plików
Azure Files zapewnia dostęp do udziałów plików w chmurze za pomocą następujących protokołów:
- Blok komunikatów serwera (SMB)
- Sieciowy system plików (NFS)
- FileREST (HTTPS)
W tym temacie opisano sposób zarządzania interakcjami blokowania plików między protokółami SMB i FileREST. Udziały plików NFS mają różne semantyki blokowania i obsługują podzbiór interfejsów API FileREST. Ten temat nie dotyczy udziałów plików NFS.
Blokowanie plików SMB
Klienci SMB, którzy zainstalują udziały plików, mogą używać mechanizmów blokowania systemu plików w celu zarządzania dostępem do udostępnionych plików. Są one następujące:
- Udostępnianie całego dostępu do plików na potrzeby odczytu, zapisu i usuwania.
- Blokady zakresu bajtów w celu zarządzania dostępem do odczytu i zapisu w regionach w ramach jednego pliku.
Gdy klient SMB otworzy plik, określa zarówno dostęp do plików, jak i tryb udostępniania. Następujące opcje dostępu do plików są zwykle używane przez klientów SMB, choć wszystkie kombinacje są dozwolone:
- Brak: Otwiera plik tylko dla dostępu do atrybutów kwerendy.
- Odczytu: Otwiera plik tylko do odczytu.
- Napisz: Otwiera plik tylko do zapisu.
- Odczyt/zapis: Otwiera plik z uprawnieniami do odczytu/zapisu.
- Usunąć: Otwiera plik tylko w celu usunięcia dostępu.
Następujące tryby udziału plików są zwykle używane przez klientów SMB:
- Brak: Odrzuca udostępnianie bieżącego pliku. Każde żądanie otwarcia pliku z dostępem do odczytu, zapisu lub usuwania zakończy się niepowodzeniem, dopóki plik nie zostanie zamknięty.
- Odczyt udostępniony: Umożliwia kolejne otwarcie pliku do odczytu. Jeśli ta flaga nie zostanie określona, żadne żądanie otwarcia pliku do odczytu zakończy się niepowodzeniem, dopóki plik nie zostanie zamknięty.
- Zapis udostępniony: Umożliwia kolejne otwarcie pliku do zapisu. Jeśli ta flaga nie zostanie określona, żadne żądanie otwarcia pliku do zapisu zakończy się niepowodzeniem, dopóki plik nie zostanie zamknięty.
- Udostępniony odczyt/zapis: Umożliwia kolejne otwarcie pliku do odczytu lub zapisu. Jeśli ta flaga nie zostanie określona, żadne żądanie otwarcia pliku do odczytu lub zapisu zakończy się niepowodzeniem, dopóki plik nie zostanie zamknięty.
- Usuwanie udostępnione: Umożliwia kolejne usuwanie pliku. Jeśli ta flaga nie zostanie określona, żadne żądanie usunięcia pliku zakończy się niepowodzeniem, dopóki plik nie zostanie zamknięty.
Przykłady otwierania pliku klienta SMB
Rozważmy następujące przykłady otwartych plików:
Plik zostanie otwarty bez naruszenia zasad udostępniania
- Klient A otwiera plik z elementem
FileAccess.Read
FileShare.Write (odrzuca kolejne operacje odczytu/usuwania podczas otwierania). - Klient B następnie otwiera plik z funkcją
FileAccess.Write
FileShare.Read (odrzuca kolejne operacje zapisu/usuwania podczas otwierania). - Wynik: Jest to dozwolone, ponieważ nie ma konfliktu między trybami dostępu do plików i udziałem plików.
- Klient A otwiera plik z elementem
Naruszenie udostępniania z powodu dostępu do plików
- Klient A otwiera plik i
FileAccess.Write
PlikShare.Read (odrzuca kolejne operacje zapisu/usuwania podczas otwierania). - Klient B następnie otwiera plik z funkcją
FileAccess.Write
FileShare.Write (odrzuca kolejne operacje odczytu/usuwania podczas otwierania). - Wynik: Klient B napotyka naruszenie udostępniania. Klient określił dostęp do pliku, który jest blokowany przez tryb udostępniania określony wcześniej przez klienta A.
- Klient A otwiera plik i
Naruszenie udostępniania z powodu trybu udostępniania
- Klient A otwiera plik z elementem
FileAccess.Write
FileShare.Write (odrzuca kolejne operacje odczytu/usuwania podczas otwierania). - Klient B następnie otwiera plik z funkcją
FileAccess.Write
FileShare.Read (odrzuca kolejne operacje zapisu/usuwania podczas otwierania). - Wynik: Klient B napotyka naruszenie udostępniania. Klient określił tryb udostępniania, który odmawia dostępu do zapisu do pliku, który jest nadal otwarty w celu uzyskania dostępu do zapisu.
- Klient A otwiera plik z elementem
Dostęp do plików FILEREST
Podczas wykonywania operacji FileREST ta operacja musi być zgodna z trybem udziału określonym dla każdego otwartego pliku na kliencie SMB. Użyj następującego trybu dostępu do plików, aby określić, czy można ukończyć operację:
Operacja FileREST | Odpowiednik dostępu do plików |
---|---|
Katalogi listy i pliki | Nie dotyczy. |
Tworzenie pliku | Pisanie, usuwanie. |
Pobieranie pliku | Odczytu. |
Ustawianie właściwości pliku | Napisz. |
Pobieranie właściwości pliku | Nie dotyczy. |
Ustawianie metadanych pliku | Napisz. |
Pobieranie metadanych pliku | Nie dotyczy. |
Usuwanie pliku | Usuwanie. |
Umieść zakres | Napisz. |
Zakresy listy | Odczytu. |
Plik dzierżawy | Zapis, usuwanie i odczyt udostępniony przez czas trwania dzierżawy. |
Katalogi listy i pliki, Pobierz właściwości pliku i Pobierz metadane plików nie działają na zawartości pliku. Te operacje nie wymagają dostępu do odczytu do pliku (czyli te operacje kończą się powodzeniem nawet wtedy, gdy klient SMB ma otwarty plik w celu uzyskania wyłącznego dostępu do odczytu).
Poniżej przedstawiono przykłady żądań FileREST współdziałających z trybami udziału SMB:
PlikREST Pobierz naruszenie udostępniania plików
- Klient SMB otwiera plik z elementem
FileAccess.Read
i FileShare.Write (odrzuca kolejne operacje odczytu/usuwania podczas otwierania). - Następnie klient REST wykonuje operację Get File (Pobierz plik ) w pliku (w związku z czym jest używana
FileAccess.Read
zgodnie z powyższymi tabelami). -
Wynik: Żądanie klienta REST kończy się niepowodzeniem z kodem stanu 409 (konflikt) i kodem
SharingViolation
błędu . Klient SMB nadal ma otwarty plik i odmawia dostępu do odczytu/usuwania.
- Klient SMB otwiera plik z elementem
Naruszenie funkcji FileREST Put Range sharing
- Klient SMB otwiera plik z elementem
FileAccess.Write
i FileShare.Read (odrzuca kolejne operacje zapisu/usuwania podczas otwierania). - Następnie klient REST wykonuje operację Put Range na pliku (tym samym przy użyciu
FileAccess.Write
określonej w poprzedniej tabeli). -
Wynik: Żądanie klienta REST kończy się niepowodzeniem z kodem stanu 409 (konflikt) i kodem
SharingViolation
błędu . Klient SMB nadal ma otwarty plik i odmawia dostępu do zapisu/usuwania.
- Klient SMB otwiera plik z elementem
W następnej sekcji przedstawiono kompleksową tabelę scenariuszy naruszenia zasad udostępniania interfejsu API FileREST.
Implikacje trybu udostępniania klienta SMB w pliku FileREST
W zależności od trybu udostępniania określonego po otwarciu pliku przez klienta SMB możliwe jest zwrócenie kodu stanu 409 (konflikt) z kodem SharingViolation
błędu. W poniższej tabeli wymieniono wiele scenariuszy.
Tryb udostępniania plików klienta SMB | Operacje FileREST kończą się niepowodzeniem z naruszeniem udostępniania |
---|---|
None (Deny Read, Write, Delete) |
Następujące operacje odczytu, zapisu, dzierżawy i usuwania pliku kończą się niepowodzeniem:
|
Shared Read Deny Write, Delete) |
Następujące operacje zapisu, dzierżawy i usuwania pliku kończą się niepowodzeniem:
|
Shared Write (Deny Read, Delete) |
Następujące operacje odczytu, dzierżawy i usuwania pliku kończą się niepowodzeniem:
|
Shared Delete (Deny Read, Write) |
Następujące operacje odczytu, zapisu i dzierżawy pliku kończą się niepowodzeniem:
|
Shared Read/Write (Deny Delete) |
Następujące operacje dzierżawy i usuwania pliku kończą się niepowodzeniem:
|
Shared Read/Delete (Deny Write) |
Następujące operacje zapisu, dzierżawy i usuwania pliku kończą się niepowodzeniem:
|
Shared Write/Delete (Deny Read) |
Następujące operacje odczytu i dzierżawy pliku zakończy się niepowodzeniem:
|
Shared Read/Write/Delete (Deny Nothing) |
Usuń plik |
Azure Files zwraca naruszenia udostępniania tylko wtedy, gdy pliki są otwarte na klientach SMB. Aby operacja FileREST Delete File zakończyła się pomyślnie, nie może być żadnych klientów protokołu SMB z otwartymi dojściami do tego pliku. Aby uzyskać więcej informacji, zobacz operację Usuń plik i interakcję między blokadami FileREST i SMB opportunistic.
Implikacje dotyczące blokowania plików SMB w interfejsie API plików dzierżawy FileREST
W zależności od opcji dostępu do plików, które określisz, kiedy klient SMB otworzy plik, interfejs API pliku dzierżawy FileREST może zwrócić kod stanu 409 (konflikt) z kodem SharingViolation
błędu . Poniższa tabela zawiera dodatkowe informacje:
Opcja dostępu do plików klienta SMB | Uzyskiwanie dzierżawy pliku bez aktywnej dzierżawy za pomocą interfejsu API dzierżawy |
---|---|
Brak | Zakończy się pomyślnie |
Read | Zakończy się pomyślnie |
Write | Niepowodzenie z powodu SharingViolation |
Usuń | Niepowodzenie z powodu SharingViolation |
Odczyt|Napisz | Niepowodzenie z powodu SharingViolation |
Odczyt|Usunąć | Niepowodzenie z powodu SharingViolation |
Zapis|Usunąć | Niepowodzenie z powodu SharingViolation |
Odczyt|Zapis|Usunąć | Niepowodzenie z powodu SharingViolation |
Azure Files zwraca naruszenia udostępniania tylko wtedy, gdy pliki są otwarte na klientach SMB. Należy pamiętać, że aby operacja FileREST Lease File zakończyła się pomyślnie, nie może istnieć klient SMB z otwartymi uchwytami zapisu lub usuwania dla tego pliku. Aby uzyskać więcej informacji, zobacz operację Dzierżawy pliku i interakcję między blokadami FileREST i SMB oportunistycznymi.
Implikacje dotyczące pliku dzierżawy FileREST na potrzeby blokowania plików SMB
Dzierżawa pliku zapewnia wyłączny dostęp do zapisu i usuwania pliku. Gdy klient SMB otworzy plik, musi przestrzegać blokady dla dowolnego pliku dzierżawionego przez operację FileREST Lease File. Poniższa tabela umożliwia określenie, czy można ukończyć operację otwierania pliku SMB:
Stan dzierżawy pliku FileREST | Operacje SMB kończą się niepowodzeniem z naruszeniem zasad udostępniania |
---|---|
Dzierżawionych | Klienci SMB otwierający plik z następującym dostępem do pliku nie powiedzie się:
|
Dostępne | Brak |
Złamane | Brak |
Implikacje usuwania protokołu SMB w plikuREST
Gdy klient SMB otworzy plik do usunięcia, oznacza plik jako oczekujący na usunięcie, dopóki wszystkie inne dojścia klienta SMB otwarte dojścia do tego pliku zostaną zamknięte. Gdy plik jest oznaczony jako oczekujący na usunięcie, każda operacja FileREST w tym pliku zwróci kod stanu 409 (konflikt), z kodem SMBDeletePending
błędu . Kod stanu 404 (Nie znaleziono) nie jest zwracany, ponieważ klient SMB może usunąć flagę oczekującego usunięcia przed zamknięciem pliku. Innymi słowy, kod stanu 404 (Nie znaleziono) jest oczekiwany tylko po usunięciu pliku.
Plik znajduje się w stanie oczekiwania na usunięcie protokołu SMB, ale nie zostanie uwzględniony w wynikach List Files
.
Należy również pamiętać, że operacje FileREST i Delete Directory
FileREST Delete File
są zatwierdzane niepodziealnie i nie powodują oczekiwania na usunięcie stanu.
Wpływ atrybutu pliku na PlikREST
Klienci SMB mogą odczytywać i ustawiać atrybuty plików, w tym:
- Archiwum
- Tylko odczyt
- Ukryty
- System
Jeśli plik lub katalog jest oznaczony jako tylko do odczytu, każda operacja FileREST, która próbuje zapisać w pliku, zakończy się niepowodzeniem z kodem stanu 412 (Niepowodzenie warunku wstępnego) i kodem ReadOnlyAttribute
błędu . Te operacje obejmują:
Create File
Set File Properties
Set File Metadata
Put Range
Tych atrybutów plików nie można ustawić ani odczytać z klientów REST. Po utworzeniu pliku tylko do odczytu klienci REST nie mogą zapisywać w pliku, dopóki klient SMB nie usunie atrybutu tylko do odczytu.
Interakcja między blokadami FileREST i SMB oportunistycznymi
Blokada oportunistyczna protokołu SMB (oplock) to mechanizm buforowania, którego żądają klienci SMB, aby zwiększyć wydajność i zmniejszyć transfery sieciowe. Klient SMB może buforować najnowszy stan określonego pliku lub katalogu. Istnieje wiele oportunistycznych typów blokad, nazywanych typami dzierżaw SMB:
- Odczyt (R): klient SMB może odczytywać z lokalnej pamięci podręcznej.
- Zapis (W): klient SMB może zapisywać lokalnie bez konieczności opróżniania danych z powrotem do udziału plików platformy Azure.
- Obsługa (H): Klient SMB nie jest wymagany do natychmiastowego powiadamiania udziału plików platformy Azure o zamknięciu dojścia. Ten typ blokady jest przydatny, gdy aplikacja kontynuuje otwieranie i zamykanie plików z tym samym trybem dostępu i udostępniania.
Te typy dzierżaw są niezależne od określonego trybu dostępu i udostępniania. Zazwyczaj klient SMB próbuje uzyskać wszystkie typy dzierżaw za każdym razem, gdy otwiera nowe dojście do pliku, niezależnie od trybu dostępu i udostępniania.
W zależności od wywołanej operacji FileREST może być konieczne zażądanie przerwania istniejącej blokady oportunistycznej. W przypadku operacji zapisu klient SMB musi opróżnić buforowane zmiany w udziale plików platformy Azure. Oto kilka przypadków, w których każdy typ oplocka musi zostać przerwany:
Blokada operacji odczytu (R) musi zostać przerwana przy każdym wydaniu operacji zapisu, takiej jak
Put Range
.Blokada zapisu (W) musi być uszkodzona przy każdym wydaniu operacji odczytu, takiej jak
Get File
.Blokada oplock dojścia (H) musi zostać przerwana za każdym razem, gdy klient wystawia operację usuwania. Azure Files wymaga, aby nie można było otworzyć żadnych dojść, jeśli operacja usuwania zakończy się pomyślnie.
Obsługa blokad jest również uszkodzona, gdy operacja FileREST napotyka naruszenie udostępniania z istniejącym dojściem SMB. Dzieje się tak, aby sprawdzić, czy dojścia są nadal otwierane przez aplikację działającą na klientach.
Przerwanie operacji może wymagać opróżnienia buforowanych zmian klienta SMB, co może powodować opóźnienia w czasie odpowiedzi operacji. Opróżnianie może również spowodować niepowodzenie operacji z kodem stanu 408 (limit czasu żądania) i kodem ClientCacheFlushDelay
błędu .
W poniższych sekcjach omówiono scenariusze, w których blokady oplocks są uszkodzone.
Wymagane jest przerwanie operacji oplock i opróżnienie klienta SMB, a klient REST ma opóźnienie
Rozpatrzmy następujący przykład:
Klient SMB otwiera plik, uzyskuje oplock RWH i zapisuje dane lokalnie.
Klient REST wysyła
Get File
żądanie.- Udział plików platformy Azure przerywa działanie operacji zapisu (W), pozostawiając klienta z oplockiem RH.
- Klient SMB opróżnia buforowane dane względem udziału plików platformy Azure i potwierdza przerwanie operacji.
- Udział plików platformy Azure przetwarza
Get File
żądanie i odpowiada z powrotem na żądane dane.
W tym przykładzie klient REST doświadcza opóźnień. Taka sytuacja jest spowodowana przez przerwanie operacji oplock, a czas potrzebny klientowi SMB na opróżnienie danych z udziału plików platformy Azure.
Kolejne wywołania Get File
nie doświadczają żadnych dodatkowych opóźnień, ponieważ blokada zapisu (W) została już przerwana.
Wymagane jest przerwanie operacji oplock, ale klient REST nie będzie występować z opóźnieniem
Rozpatrzmy następujący przykład:
Klient SMB nabył oplock RH.
Klient REST wysyła
Put Range
żądanie.- Udział plików platformy Azure wysyła żądanie przerwania operacji do klienta SMB i nie czeka na odpowiedź.
- Udział plików platformy
Put Range
Azure przetwarza żądanie.
W tym przykładzie wymagana jest przerwa oplocka, ale Put Range
żądanie nie ma żadnych dodatkowych opóźnień. Odpowiedź nie jest potrzebna podczas przerywania operacji odczytu.
zachowanie Azure Files
Poniższa tabela zawiera podsumowanie zachowania Azure Files dla każdej operacji FileREST. To zachowanie jest oparte na stanie oplock klienta SMB, który uzyskał już dojście do tego samego pliku. Ponadto zachowanie zakłada, że protokół SMB obsługuje dostęp i udostępnianie nie powodują konfliktu z operacją FileREST.
Jeśli występuje konflikt, blokada uchwytu jest również uszkodzona, aby upewnić się, że dojście jest nadal otwarte na kliencie. W przypadku blokującej przerwy oplock Azure Files musi poczekać na potwierdzenie, że przerwa zakończyła się pomyślnie. W przypadku nieblokacyjnej przerwy oplock nie trzeba czekać Azure Files.
Operacja FileREST | Bieżące typy oplocka | Wykonano przerwanie oplocka | Wynikowy oplock |
---|---|---|---|
Pobieranie pliku | RWH | Tak (blokowanie) | RH |
Pobieranie pliku | RH | Nie | RH |
Pobieranie pliku | RW | Tak (blokowanie) | R |
Pobieranie właściwości pliku | RWH | Tak (blokowanie) | RH |
Pobieranie właściwości pliku | RH | Nie | RH |
Pobieranie właściwości pliku | RW | Tak (blokowanie) | R |
Zakresy list | RWH | Tak (blokowanie) | RH |
Zakresy list | RH | Nie | RH |
Zakresy list | RW | Tak (blokowanie) | R |
Pobieranie metadanych pliku | RWH | Tak (blokowanie) | RH |
Pobieranie metadanych pliku | RH | Nie | RH |
Pobieranie metadanych pliku | RW | Tak (blokowanie) | R |
Wyświetlanie listy plików | RWH | Nie | RWH |
Wyświetlanie listy plików | RH | Nie | RH |
Wyświetlanie listy plików | RW | Nie | RW |
Umieść zakres | RWH | Tak (blokowanie) | Brak |
Umieść zakres | RH | Tak (brak blokowania) | Brak |
Umieść zakres | RW | Tak (blokowanie) | Brak |
Ustawianie właściwości pliku | RWH | Tak (blokowanie) | Brak |
Ustawianie właściwości pliku | RH | Tak (brak blokowania) | Brak |
Ustawianie właściwości pliku | RW | Tak (blokowanie) | Brak |
Ustawianie metadanych pliku | RWH | Tak (blokowanie) | Brak |
Ustawianie metadanych pliku | RH | Tak (brak blokowania) | Brak |
Ustawianie metadanych pliku | RW | Tak (blokowanie) | Brak |
Usuń plik | RWH | Tak (blokowanie) | RW |
Usuń plik | RH | Tak (blokowanie) | R |
Usuń plik | RW | Nie | RW |
W przypadku, gdy jest wymagane blokowanie przerwy oplock, w pewnych warunkach operacja FileREST kończy się niepowodzeniem. Jeśli przerwa nie powiedzie się w ramach określonego limitu czasu żądania lub w ciągu 30 sekund, w zależności od tego, która z nich zostanie ukończona jako pierwsza, usługa zwróci kod stanu 408 (limit czasu żądania) i kod ClientCacheFlushDelay
błędu .
Żądanie Delete File
wymaga również przerwania dzierżawy uchwytu oplock (H). Przerwanie dojścia gwarantuje, że nie ma dojść do plików nadal otwartych przez aplikację kliencką SMB, gdy klient REST wywołuje metodę Delete File
. W przypadku naruszenia udostępniania żądanie kończy się niepowodzeniem z kodem stanu 409 (konflikt) i kodem SharingViolation
błędu .