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.
- A İstemcisi dosyayı ve FileShare.Write ile
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.
- A İstemcisi dosyayı ve FileShare.Read ile
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.
- A İstemcisi dosyayı ve FileShare.Write ile
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
SharingViolation
ile başarısız oluyor. SMB istemcisinde dosya hala açık ve Okuma/Silme erişimini reddeder.
- SMB istemcisi dosyayı ve FileShare.Write ile
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
SharingViolation
ile başarısız oluyor. SMB istemcisinde dosya hala açık ve Yazma/Silme erişimini reddeder.
- SMB istemcisi dosyayı ve FileShare.Read ile
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 SharingViolation
dö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:
|
Shared Read Deny Write, Delete) |
Dosyada aşağıdaki yazma, kiralama ve silme işlemleri başarısız olur:
|
Shared Write (Deny Read, Delete) |
Dosyada aşağıdaki okuma, kiralama ve silme işlemleri başarısız olur:
|
Shared Delete (Deny Read, Write) |
Dosyada aşağıdaki okuma, yazma ve kiralama işlemleri başarısız olur:
|
Shared Read/Write (Deny Delete) |
Dosyada aşağıdaki kiralama ve silme işlemleri başarısız olur:
|
Shared Read/Delete (Deny Write) |
Dosyada aşağıdaki yazma, kiralama ve silme işlemleri başarısız olur:
|
Shared Write/Delete (Deny Read) |
Dosyada aşağıdaki okuma ve kiralama işlemleri başarısız olur:
|
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 SharingViolation
409 (Ç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:
|
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 SMBDeletePending
dö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 ReadOnlyAttribute
baş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 Range
bir yazma işlemi her yayınlandığında Okuma (R) oplock'larının bozulması gerekir.Gibi
Get File
bir 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 ClientCacheFlushDelay
baş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:
SMB istemcisi bir dosya açar, RWH işlem kilidi alır ve verileri yerel olarak yazar.
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:
SMB istemcisi bir RH oplock aldı.
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 ClientCacheFlushDelay
dö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 File
SMB 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 SharingViolation
ile başarısız olur.