Udostępnij za pośrednictwem


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

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 SharingViolationbłędu . Klient SMB nadal ma otwarty plik i odmawia dostępu do odczytu/usuwania.
  • 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 SharingViolationbłędu . Klient SMB nadal ma otwarty plik i odmawia dostępu do zapisu/usuwania.

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 SharingViolationbłę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:

  • Tworzenie pliku
  • Pobieranie pliku
  • Ustawianie właściwości pliku
  • Ustawianie metadanych pliku
  • Usuń plik
  • Umieść zakres
  • Zakresy listy
  • Plik dzierżawy
Shared Read

Deny Write, Delete)
Następujące operacje zapisu, dzierżawy i usuwania pliku kończą się niepowodzeniem:

  • Tworzenie pliku
  • Ustawianie właściwości pliku
  • Ustawianie metadanych pliku
  • Usuń plik
  • Umieść zakres
  • Plik dzierżawy
Shared Write

(Deny Read, Delete)
Następujące operacje odczytu, dzierżawy i usuwania pliku kończą się niepowodzeniem:

  • Tworzenie pliku
  • Pobieranie pliku
  • Usuń plik
  • Zakresy listy
  • Plik dzierżawy
Shared Delete

(Deny Read, Write)
Następujące operacje odczytu, zapisu i dzierżawy pliku kończą się niepowodzeniem:

  • Tworzenie pliku
  • Pobieranie pliku
  • Ustawianie właściwości pliku
  • Ustawianie metadanych pliku
  • Umieść zakres
  • Zakresy listy
  • Usuń plik
  • Plik dzierżawy
Shared Read/Write

(Deny Delete)
Następujące operacje dzierżawy i usuwania pliku kończą się niepowodzeniem:

  • Tworzenie pliku
  • Usuń plik
  • Plik dzierżawy
Shared Read/Delete

(Deny Write)
Następujące operacje zapisu, dzierżawy i usuwania pliku kończą się niepowodzeniem:

  • Tworzenie pliku
  • Ustawianie właściwości pliku
  • Ustawianie metadanych pliku
  • Umieść zakres
  • Usuń plik
  • Plik dzierżawy
Shared Write/Delete

(Deny Read)
Następujące operacje odczytu i dzierżawy pliku zakończy się niepowodzeniem:

  • Pobieranie pliku
  • Zakresy listy
  • Usuń plik
  • Plik dzierżawy
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 SharingViolationbłę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ę:

  • FileAccess.Write
  • FileAccess.Delete
  • FileAccess.Read|FileAccess.Write
  • FileAccess.Write|FileAccess.Delete
  • FileAccess.Read|FileAccess.Write|FileAccess.Delete
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 SMBDeletePendingbłę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 ReadOnlyAttributebłę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 ClientCacheFlushDelaybłę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:

  1. Klient SMB otwiera plik, uzyskuje oplock RWH i zapisuje dane lokalnie.

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

  1. Klient SMB nabył oplock RH.

  2. 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 ClientCacheFlushDelaybłę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 SharingViolationbłędu .

Zobacz też

Azure Files pojęcia