Dosya kilitlerini yönetme

Azure Dosyalar aşağıdaki protokoller aracılığıyla bulut dosya paylaşımlarına erişim sağlar:

  • Sunucu İleti Bloğu (SMB)
  • Ağ Dosya Sistemi (NFS)
  • FileREST (HTTPS)

Bu konuda, SMB ile FileREST arasındaki dosya kilitleme etkileşimlerinin nasıl yönetileceğini açıklanmaktadır. NFS dosya paylaşımları farklı kilitleme semantiğine sahiptir ve FileREST API'lerinin bir alt kümesini destekler. Bu konu NFS dosya paylaşımları için geçerli değildir.

SMB dosya kilitleme

Dosya paylaşımlarını bağlayan SMB istemcileri, paylaşılan dosyalara erişimi yönetmek için dosya sistemi kilitleme mekanizmalarını kullanabilir. Bu modüller şunlardır:

  • Okuma, yazma ve silme için tüm dosya erişimi paylaşımı.
  • Tek bir dosya içindeki bölgelere okuma ve yazma erişimini yönetmek için bayt aralığı kilitlenir.

SMB istemcisi bir dosyayı açtığında hem dosya erişimini hem de paylaşım modunu belirtir. Tüm birleşimlere izin verilse de, aşağıdaki dosya erişim seçenekleri genellikle SMB istemcileri tarafından kullanılır:

  • Hiçbiri: Yalnızca sorgu özniteliği erişimi için bir dosya açar.
  • Okuma: Salt okuma erişimi için bir dosya açar.
  • Yazmak: Yalnızca yazma erişimi için bir dosya açar.
  • Okuma/Yazma: Okuma/yazma izinlerine sahip bir dosyayı açar.
  • Silmek: Yalnızca silme erişimi için bir dosya açar.

Aşağıdaki dosya paylaşım modları genellikle SMB istemcileri tarafından kullanılır:

  • Hiçbiri: Geçerli dosyanın paylaşımını reddeder. Dosyayı okuma, yazma veya silme erişimiyle açma isteği, dosya kapatılana kadar başarısız olur.
  • Paylaşılan Okuma: Dosyanın daha sonra okunması için açılmasına izin verir. Bu bayrak belirtilmezse, dosya kapatılana kadar dosyayı okuma için açma isteği başarısız olur.
  • Paylaşılan Yazma: Dosyanın yazılmasının ardından açılmasına izin verir. Bu bayrak belirtilmezse, dosya kapatılana kadar dosyayı yazmak üzere açma isteği başarısız olur.
  • Paylaşılan Okuma/Yazma: Dosyanın okuma veya yazma için daha sonra açılmasına izin verir. Bu bayrak belirtilmezse, dosya kapatılana kadar dosyayı okuma veya yazma için açma isteği başarısız olur.
  • Paylaşılan Silme: Bir dosyanın daha sonra silinmesine izin verir. Bu bayrak belirtilmezse, dosya kapatılana kadar dosyayı silme isteği başarısız olur.

SMB istemcisi açık dosya örnekleri

Aşağıdaki açık dosya örneklerini göz önünde bulundurun:

  • Dosya paylaşım ihlali olmadan açılıyor

    • A İstemcisi dosyayı ve FileShare.Write ile FileAccess.Read açar (açıkken sonraki Okuma/Silme işlemini reddeder).
    • B istemcisi dosyayı FileShare.Read ile FileAccess.Write açar (açıkken sonraki Yazma/Silme işlemini reddeder).
    • Sonuç: Dosya erişimi ile dosya paylaşımı modları arasında çakışma olmadığından buna izin verilir.
  • Dosya erişimi nedeniyle paylaşım ihlali

    • A İstemcisi dosyayı ve FileShare.Read ile FileAccess.Write açar (açıkken sonraki Yazma/Silme işlemini reddeder).
    • B istemcisi dosyayı FileShare.Write ile FileAccess.Write açar (açıkken sonraki Okuma/Silme işlemini reddeder).
    • Sonuç: B istemcisi bir paylaşım ihlaliyle karşılaşır. İstemci, daha önce İstemci A tarafından belirtilen paylaşım modu tarafından reddedilen bir dosya erişimi belirtti.
  • Paylaşım modundan kaynaklanan paylaşım ihlali

    • A İstemcisi dosyayı ve FileShare.Write ile FileAccess.Write açar (açıkken sonraki Okuma/Silme işlemini reddeder).
    • B istemcisi dosyayı FileShare.Read ile FileAccess.Write açar (açıkken sonraki Yazma/Silme işlemini reddeder).
    • Sonuç: B istemcisi bir paylaşım ihlaliyle karşılaşır. İstemci, yazma erişimi için hala açık olan bir dosyaya yazma erişimini reddeden bir paylaşım modu belirtti.

FileREST dosya erişimi

Bir FileREST işlemi gerçekleştirdiğinizde, bu işlem SMB istemcisinde açık olan herhangi bir dosya için belirtilen paylaşım moduna saygı göstermelidir. İşlemin tamamlanıp tamamlanamadığını belirlemek için aşağıdaki dosya erişim modunu kullanın:

FileREST işlemi Dosya erişimi eşdeğeri
Dizinleri ve Dosyaları Listele Yok.
Dosya Oluştur Yaz, Sil.
Dosya Al Okuma.
Dosya Özelliklerini Ayarla Yazmak.
Dosya Özelliklerini Al Yok.
Dosya Meta Verilerini Ayarla Yazmak.
Dosya Meta Verilerini Alma Yok.
Dosya Sil Sil.
Aralığı Koy Yazmak.
Liste Aralıkları Okuma.
Kira Dosyası Kiralama süresi boyunca Yazma, Silme ve Paylaşılan Okuma.

Liste Dizinleri ve Dosyalar, Dosya Özelliklerini Al ve Dosya Meta Verilerini Al , dosya içeriğinde çalışmaz. Bu işlemler dosyaya okuma erişimi gerektirmez (yani, bir SMB istemcisi özel okuma erişimi için açık olsa bile bu işlemler başarılı olur).

SMB paylaşım modlarıyla etkileşim kuran FileREST isteklerine örnekler aşağıda verilmiştir:

  • FileREST Dosya paylaşımı ihlalini alma

    • SMB istemcisi dosyayı ve FileShare.Write ile FileAccess.Read açar (açıkken sonraki Okuma/Silme işlemini reddeder).
    • REST istemcisi daha sonra dosya üzerinde bir Dosya Al işlemi gerçekleştirir (böylece önceki tabloda belirtildiği gibi kullanır FileAccess.Read ).
    • Sonuç: REST istemcisinin isteği durum kodu 409 (Çakışma) ve hata kodu SharingViolationile başarısız oluyor. SMB istemcisinde dosya hala açık ve Okuma/Silme erişimini reddeder.
  • FileREST Put Range paylaşım ihlali

    • SMB istemcisi dosyayı ve FileShare.Read ile FileAccess.Write açar (açıkken sonraki Yazma/Silme işlemini reddeder).
    • REST istemcisi daha sonra dosyada bir Aralık Koy işlemi gerçekleştirir (böylece önceki tabloda belirtildiği gibi kullanır FileAccess.Write ).
    • Sonuç: REST istemcisinin isteği durum kodu 409 (Çakışma) ve hata kodu SharingViolationile başarısız oluyor. SMB istemcisinde dosya hala açık ve Yazma/Silme erişimini reddeder.

Sonraki bölümde FileREST API paylaşım ihlali senaryolarının kapsamlı bir tablosu yer almaktadır.

SMB istemci paylaşım modunun FileREST üzerindeki etkileri

SMB istemcisi bir dosyayı açtığında belirttiğiniz paylaşım moduna bağlı olarak, FileREST'nin hata koduyla 409 (Çakışma) durum kodunu SharingViolationdöndürmesi mümkündür. Aşağıdaki tabloda bir dizi senaryo listelemektedir.

SMB istemci dosyası paylaşım modu FileREST işlemleri paylaşım ihlaliyle başarısız oluyor
None

(Deny Read, Write, Delete)
Dosyada aşağıdaki okuma, yazma, kiralama ve silme işlemleri başarısız olur:

  • Dosya Oluştur
  • Dosya Al
  • Dosya Özelliklerini Ayarla
  • Dosya Meta Verilerini Ayarla
  • Dosya Sil
  • Aralığı Koy
  • Liste Aralıkları
  • Kira Dosyası
Shared Read

Deny Write, Delete)
Dosyada aşağıdaki yazma, kiralama ve silme işlemleri başarısız olur:

  • Dosya Oluştur
  • Dosya Özelliklerini Ayarla
  • Dosya Meta Verilerini Ayarla
  • Dosya Sil
  • Aralığı Koy
  • Kira Dosyası
Shared Write

(Deny Read, Delete)
Dosyada aşağıdaki okuma, kiralama ve silme işlemleri başarısız olur:

  • Dosya Oluştur
  • Dosya Al
  • Dosya Sil
  • Liste Aralıkları
  • Kira Dosyası
Shared Delete

(Deny Read, Write)
Dosyada aşağıdaki okuma, yazma ve kiralama işlemleri başarısız olur:

  • Dosya Oluştur
  • Dosya Al
  • Dosya Özelliklerini Ayarla
  • Dosya Meta Verilerini Ayarla
  • Aralığı Koy
  • Liste Aralıkları
  • Dosya Sil
  • Kira Dosyası
Shared Read/Write

(Deny Delete)
Dosyada aşağıdaki kiralama ve silme işlemleri başarısız olur:

  • Dosya Oluştur
  • Dosya Sil
  • Kira Dosyası
Shared Read/Delete

(Deny Write)
Dosyada aşağıdaki yazma, kiralama ve silme işlemleri başarısız olur:

  • Dosya Oluştur
  • Dosya Özelliklerini Ayarla
  • Dosya Meta Verilerini Ayarla
  • Aralığı Koy
  • Dosya Sil
  • Kira Dosyası
Shared Write/Delete

(Deny Read)
Dosyada aşağıdaki okuma ve kiralama işlemleri başarısız olur:

  • Dosya Al
  • Liste Aralıkları
  • Dosya Sil
  • Kira Dosyası
Shared Read/Write/Delete

(Deny Nothing)
Dosya Sil

Azure Dosyalar, paylaşım ihlallerini yalnızca dosyalar SMB istemcilerinde açık olduğunda döndürür. FileREST Dosya Silme işleminin başarılı olması için, bu dosyada tanıtıcıları açık olan SMB istemcisi olamaz. Daha fazla bilgi için bkz. Dosya Silme işlemi ve FileREST ile SMB fırsatçı kilitleri arasındaki etkileşim.

SMB dosya kilitlemenin FileREST Kira Dosyası API'sinde etkileri

SMB istemcisi bir dosyayı açtığında belirttiğiniz dosya erişim seçeneklerine bağlı olarak, FileREST Kira Dosyası API'sinin hata koduyla SharingViolation409 (Çakışma) durum kodunu döndürmesi mümkündür. Aşağıdaki tabloda daha fazla bilgi sağlanmaktadır:

SMB istemci dosyası erişim seçeneği Kira Dosyası API'siyle etkin kiralama olmadan dosya üzerinde kiralama alma
Hiçbiri Başarılı
Read Başarılı
Write Şu nedenden dolayı başarısız oluyor: SharingViolation
Sil Şu nedenden dolayı başarısız oluyor: SharingViolation
Okuma|Yazmak Şu nedenden dolayı başarısız oluyor: SharingViolation
Okuma|Silmek Şu nedenden dolayı başarısız oluyor: SharingViolation
Yazma|Silmek Şu nedenden dolayı başarısız oluyor: SharingViolation
Okuma|Yazma|Silmek Şu nedenden dolayı başarısız oluyor: SharingViolation

Azure Dosyalar, paylaşım ihlallerini yalnızca dosyalar SMB istemcilerinde açık olduğunda döndürür. Bir FileREST Kira Dosyası işleminin başarılı olması için, bu dosyada Yazma veya Silme tanıtıcıları açık SMB istemcisi olmadığını unutmayın. Daha fazla bilgi için bkz . Kira Dosyası işlemi ve FileREST ile SMB fırsatçı kilitleri arasındaki etkileşim.

FileREST Kira Dosyası, SMB dosya kilitleme için etkileri

Bir dosyadaki kiralama, dosyaya özel yazma ve silme erişimi sağlar. SMB istemcisi bir dosyayı açtığında, FileREST Kira Dosyası işlemi tarafından kiralanan tüm dosyalar için kilidi dikkate almalıdır. SMB açık dosya işleminin tamamlanıp tamamlanmayacağını belirlemek için aşağıdaki tabloyu kullanabilirsiniz:

FileREST dosya kiralama durumu Paylaşım ihlaliyle başarısız olan SMB işlemleri
Kiralanan Dosyayı aşağıdaki dosya erişimiyle açan SMB istemcileri başarısız olur:

  • FileAccess.Write
  • FileAccess.Delete
  • FileAccess.Read|FileAccess.Write
  • FileAccess.Write|FileAccess.Delete
  • FileAccess.Read|FileAccess.Write|FileAccess.Delete
Kullanılabilir Hiçbiri
Kırık Hiçbiri

SMB silmenin FileREST üzerindeki etkileri

SMB istemcisi bir dosyayı silmek üzere açtığında, bu dosyadaki diğer tüm SMB istemcisi açma tanıtıcıları kapatılana kadar dosyayı silmeyi bekliyor olarak işaretler. Bir dosya silme bekleniyor olarak işaretlenmiş olsa da, bu dosyadaki herhangi bir FileREST işlemi hata koduyla 409 (Çakışma) durum kodunu SMBDeletePendingdöndürür. SMB istemcisinin dosyayı kapatmadan önce bekleyen silme bayrağını kaldırması mümkün olduğundan durum kodu 404 (Bulunamadı) döndürülmedi. Başka bir deyişle, durum kodu 404 (Bulunamadı) yalnızca dosya kaldırıldığında beklenir.

Bir dosya SMB silmeyi bekliyor durumundayken sonuçlara List Files dahil edilmeyecektir.

Ayrıca FileREST Delete File ve Delete Directory işlemlerin atomik olarak işlendiğini ve silme durumunun beklemede olduğuna dikkat edin.

FileREST üzerindeki dosya özniteliği etkileri

SMB istemcilerinin aşağıdakiler de dahil olmak üzere dosya özniteliklerini okuması ve ayarlaması mümkündür:

  • Arşiv
  • Salt okunur
  • Gizli
  • Sistem

Bir dosya veya dizin salt okunur olarak işaretlenirse, dosyaya yazmaya çalışan tüm FileREST işlemleri 412 durum kodu (Önkoşul Başarısız) ve hata koduyla ReadOnlyAttributebaşarısız olur. Bu işlemler şunları kapsar:

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

Bu dosya öznitelikleri REST istemcilerinden ayarlanamaz veya okunamaz. Bir dosya salt okunur hale getirildikten sonra, SMB istemcisi salt okunur özniteliği kaldırana kadar REST istemcileri dosyaya yazamaz.

FileREST ile SMB fırsatçı kilitleri arasındaki etkileşim

SMB fırsatçı kilidi (oplock), SMB istemcilerinin performansı geliştirmek ve ağ aktarımlarını azaltmak için istediği bir önbelleğe alma mekanizmasıdır. SMB istemcisi belirli bir dosya veya dizinin en son durumunu önbelleğe alabilir. SMB kira türleri olarak adlandırılan birden çok fırsatçı kilit türü vardır:

  • Okuma (R):SMB istemcisi yerel önbellekten okuyabilir.
  • Yazma (W):SMB istemcisi verileri Azure dosya paylaşımına geri boşaltmaya gerek kalmadan yerel olarak yazabilir.
  • Tanıtıcı (H):Bir tanıtıcı kapatıldığında SMB istemcisinin Azure dosya paylaşımını hemen bilgilendirmesi gerekmez. Bu kilit türü, bir uygulama aynı erişim ve paylaşım moduna sahip dosyaları açmaya ve kapatmaya devam ettiğinde yararlıdır.

Bu kira türleri, belirtilen erişim ve paylaşım modundan bağımsızdır. Genellikle SMB istemcisi, erişim ve paylaşım modundan bağımsız olarak bir dosyaya yeni tanıtıcı açtığında tüm kira türlerini almayı dener.

Adlı FileREST işlemine bağlı olarak, mevcut fırsatçı kilidi bozma isteğinde bulunmanız gerekebilir. Yazma işlemi kilidi söz konusu olduğunda, SMB istemcisinin önbelleğe alınmış değişiklikleri Azure dosya paylaşımında temizlemesi gerekir. Her oplock türünün bozulması gereken bazı durumlar şunlardır:

  • Gibi Put Rangebir yazma işlemi her yayınlandığında Okuma (R) oplock'larının bozulması gerekir.

  • Gibi Get Filebir okuma işlemi her düzenlendiğinde Yazma (W) oplock'larının bozulması gerekir.

  • İstemci bir silme işlemi başlattığında tanıtıcı (H) işlem kilidi kırılmalıdır. Azure Dosyalar, silme işleminin başarılı olması durumunda hiçbir tanıtıcının açık olmamasını gerektirir.

    Bir FileREST işlemi mevcut bir SMB tanıtıcısıyla paylaşım ihlaliyle karşılaştığında tanıtıcı oplock'ları da bozulur. Bu, tanıtıcıların istemcilerde çalışan bir uygulama tarafından hala açıldığını doğrulamak için oluşur.

Oplock'un bozulması, önbelleğe alınmış SMB istemci değişikliklerinin boşaltılması gerektirebilir ve bu da işlem yanıt süresinde gecikmelere neden olabilir. Temizleme işlemi, 408 durum kodu (İstek Zaman Aşımı) ve hata koduyla ClientCacheFlushDelaybaşarısız olmasına da neden olabilir.

Aşağıdaki bölümlerde oplock'ların bozuk olduğu senaryolar açıklanmıştır.

Oplock kesmesi ve SMB istemcisi temizleme gereklidir ve REST istemcisi bir gecikme yaşar

Aşağıdaki örneği inceleyin:

  1. SMB istemcisi bir dosya açar, RWH işlem kilidi alır ve verileri yerel olarak yazar.

  2. REST istemcisi bir Get File istek gönderir.

    • Azure dosya paylaşımı yazma (W) oplock'unu kırarak istemciyi rh oplock ile bırakır.
    • SMB istemcisi önbelleğe alınmış verilerini Azure dosya paylaşımına boşaltır ve oplock sonunu kabul eder.
    • Azure dosya paylaşımı isteği işler Get File ve istenen verilerle yanıt verir.

Bu örnekte REST istemcisi gecikmeler yaşar. Bu durum, oplock kesmesi ve SMB istemcisinin verilerini Azure dosya paylaşımına boşaltması için geçen süreden kaynaklanır.

Yazma (W) işlem kilidi zaten bozuk olduğundan sonraki çağrılarda Get File ek gecikmeler yaşanmıyor.

Oplock sonu gereklidir, ancak REST istemcisi gecikme yaşamaz

Aşağıdaki örneği inceleyin:

  1. SMB istemcisi bir RH oplock aldı.

  2. REST istemcisi bir Put Range istek gönderir.

    • Azure dosya paylaşımı SMB istemcisine bir oplock kesme isteği gönderir ve yanıt beklemez.
    • Azure dosya paylaşımı isteği işler Put Range .

Bu örnekte, oplock sonu gereklidir, ancak Put Range istekte ek gecikmeler olmaz. Okuma oplock'u kırıldığında yanıt gerekmez.

Azure Dosyalar davranışı

Aşağıdaki tabloda her FileREST işlemi için Azure Dosyalar davranışı özetlemektedir. Bu davranış, aynı dosyada zaten bir tanıtıcı edinmiş olan SMB istemcisinin oplock durumunu temel alır. Ayrıca davranış, SMB'nin erişim ve paylaşımı işlemesinin FileREST işlemiyle çakışmadığını varsayar.

Çakışma varsa, tanıtıcının istemcide hala açık olduğundan emin olmak için tanıtıcı oplock da bozulur. Engelleyen bir oplock sonu söz konusu olduğunda, Azure Dosyalar kesmenin başarılı olduğunu belirten bir bildirim beklemelidir. Engelleyici olmayan bir oplock sonu söz konusu olduğunda Azure Dosyalar beklemesi gerekmez.

FileREST işlemi Geçerli oplock türleri Oplock sonu gerçekleştirildi Sonuçta elde edilen oplock
Dosya Al RWH Evet (Engelleme) RH
Dosya Al RH No RH
Dosya Al RW Evet (Engelleme) R
Dosya Özelliklerini Alma RWH Evet (Engelleme) RH
Dosya Özelliklerini Alma RH No RH
Dosya Özelliklerini Alma RW Evet (Engelleme) R
Liste Aralıkları RWH Evet (Engelleme) RH
Liste Aralıkları RH No RH
Liste Aralıkları RW Evet (Engelleme) R
Dosya Meta Verilerini Alma RWH Evet (Engelleme) RH
Dosya Meta Verilerini Alma RH No RH
Dosya Meta Verilerini Alma RW Evet (Engelleme) R
Dosyaları listeleme RWH No RWH
Dosyaları listeleme RH No RH
Dosyaları listeleme RW No RW
Aralığı Koy RWH Evet (Engelleme) Hiçbiri
Aralığı Koy RH Evet (Engelleyici Değil) Hiçbiri
Aralığı Koy RW Evet (Engelleme) Hiçbiri
Dosya Özelliklerini Ayarla RWH Evet (Engelleme) Hiçbiri
Dosya Özelliklerini Ayarla RH Evet (Engelleyici Değil) Hiçbiri
Dosya Özelliklerini Ayarla RW Evet (Engelleme) Hiçbiri
Dosya Meta Verilerini Ayarla RWH Evet (Engelleme) Hiçbiri
Dosya Meta Verilerini Ayarla RH Evet (Engelleyici Değil) Hiçbiri
Dosya Meta Verilerini Ayarla RW Evet (Engelleme) Hiçbiri
Dosya Sil RWH Evet (Engelleme) RW
Dosya Sil RH Evet (Engelleme) R
Dosya Sil RW No RW

Engelleyici bir oplock sonu gerektiğinde, belirli koşullar altında FileREST işlemi başarısız olur. Kesme belirtilen istek zaman aşımı içinde veya 30 saniye içinde başarılı olmazsa, hangisi önce tamamlanırsa, hizmet 408 durum kodunu (İstek Zaman Aşımı) ve hata kodunu ClientCacheFlushDelaydöndürür.

İstek ayrıca Delete File oplock tanıtıcısı (H) kirasını bozmayı da gerektirir. Tanıtıcının bozulması, REST istemcisi çağırdığında Delete FileSMB istemci uygulaması tarafından hala açılmış dosya tanıtıcılarının olmamasını sağlar. Paylaşım ihlali varsa istek 409 (Çakışma) durum kodu ve hata kodu SharingViolationile başarısız olur.

Ayrıca bkz.

Azure Dosyalar kavramları