Windows size şu ünlü uyarıyı veriyorsa işlem dosyaya erişemiyor çünkü dosya başka bir işlem tarafından kullanılıyorSorun dosyada değil: kulpu açık tutan süreçte. Suçluyu hızla bulmak, küçük bir sorun ile büyük bir üretim çöküşü arasındaki farkı yaratır.
Bu rehberde nihayet ihtiyacınız olan her şeyi bir araya getiriyoruz: Handle (Sysinternals) ile kilit nasıl aranır?, bunları nasıl doğrulayabiliriz Proses Monitörü, güvenli kararları nasıl otomatikleştireceğinizi PowerShell, fırsatçı engelleme ve paylaşım modu nasıl görünüyor? SMB/Azure Dosyaları, nasıl dahil olunur EDR/antivirüs, bir abluka ile aynı şey değildir SQL Server ve nasıl hata ayıklanacağı ve ayrıca aşağıdaki gibi kontrol alternatifleri Yıkılma ve Windows API'leri ile bayt aralığı kilitleme.
Dosya kilidi nedir ve neden oluşur?
Bir işlem, pratikte paylaşım modu olan bir dosyayı açtığında bir çökme meydana gelir. başkalarının yazmasını, yeniden adlandırmasını veya silmesini engellerGenellikle görülen belirti, bir servisin aynı anda başka bir servis tarafından incelenirken veya yazılırken erişimin engellenmesidir.
Windows Server'daki gerçek durumlarda, EDR veya antivirüs gibi bir yazılımın kullanılması nadir değildir. MsSense.exe (Uç Nokta için Microsoft Defender) Kritik bir anda bir dosyaya dokunulduğunda ve hizmetin başarısız olmasına neden olduğunda; bu gibi senaryolarda, deseni belgelemek ve doğru seviyede bir hariç tutma talebinde bulunmak (bazen GPO yeterli olmaz; EDR kiracısına gitmeniz gerekir) çıkış yoludur.

Bir dosyayı kilitleyen işlemi hızlı bir şekilde nasıl bulabilirsiniz: Kulp ve şirket
Yarar Handle (Sysinternals), işlem başına açık tutamaçları listeler ve geçici çökmeleri tespit etmek için mükemmeldir. Bir dizinin tamamından şüphelendiğinizde, yükseltilmiş bir konsol açın ve dosya veya klasör yoluna göre filtreleyin.
Başlangıçta çok iyi sonuç veren kılavuz emirleri: handle.exe -a C:\path\to\file ve eğer klasöre göre tercih ederseniz, kısmi eşleşmeleri kullanın; -u y -P İşlem bazında daraltabilirsiniz. Tıkanıklık kısa süreliyse, komutu bir döngüde çalıştırın ve günlüğe kaydedin Önemli anı kaçırmamak için.
Tıkanıklık devam ederse, Recursos'u izleyin (resmon.exe) dosya adına göre “İlişkili Tanımlayıcıları” aramanıza olanak tanır ve Process Explorer “Bul → Sapı veya DLL'yi Bul” seçeneğini sunar. Dosya birkaç saniyeden uzun süre takılı kalırsa bu iki seçenek çok basittir.
Process Monitor (ProcMon) ile suç mahallinin yeniden inşası
ProcMon, dosya sistemi çağrıları, kayıt defteri ve süreçler hakkında derinlemesine bilgi sağlar. yol ve yürütülebilir dosyaya göre filtreler Yalnızca ilgili olanı kaydedebilir ve hatayı yeniden ürettiğinizde durdurabilirsiniz. hangi ikili dosyaya dokunuyor, hangi sırayla ve hangi sonuçla (BAŞARILI, ERİŞİM ENGELLENDİ, vb.)
Çok fazla hacim oluşturduğu için uygulanır sıkı filtreler ve olayı yakaladığınız anda yakalamayı durdurun. Hizmet aralıklı olarak kesilirse, otomatikleştirin: tetikleyen bir betik Kulp/ProcMon tespit edildiğinde hata Size, ayarları yükseltmeniz veya ayarlamanız için zaman damgasıyla birlikte rahatsız edici süreci verecektir.
PowerShell ile güvenli kararları otomatikleştirin (ve kullanımda olan dosyaları taşımaktan kaçının)
Tipik senaryo: Bir araç (örneğin HandBrake) dosyaları bir klasörde bırakır ve bir komut dosyası bunları anında taşımaya çalışır. İşlemi, dosyalar hala yazılırken zorlamak kötü bir sonuç doğurur; bu iyi bir fikirdir. aktif tutamak kalmayana kadar hareketi erteleyinEğer mümkün değilse, şunu düşünün: silinmesi zor dosyaları silmek için alternatifler.
Pratik seçenekler: Dosyayı bir FileStream özel modda (paylaşılmamış); bir istisna atarsa, hala kullanımdadır. Ayrıca şunları da yapabilirsiniz: boyutun artmadığını kontrol edin X saniye boyunca veya Handle'a o dosyanın açık olduğu herhangi bir işlem olup olmadığını sorun. üstel geri çekilme ve yarışlardan kaçınmak için geçici bir uzatma ile "transit halinde" işaretler.
Güvenilir indirmelerden sonra menşe işareti (MOTW) olan dosyaların kilidini açmak için PowerShell çok doğrudan bir cmdlet ile çözer: Engellemeyi Kaldır-Dosya -Yol «C:\yol\dosya» veya Get-ChildItem «C:\path» | Engellemeyi Kaldır Dosyası Klasörler için. Akıllıca kullanın: yalnızca güvenilir kaynaklardan ve mümkünse bir antivirüs çalıştırdıktan sonra. İndirilenler klasörünüz açılmıyorsa, son çözüm.
Azure Dosya Blokları: SMB, FileREST ve SharingViolation Hatasının Görünme Nedeni
Azure Dosyaları'nda birkaç ağ geçidi vardır: SMB, NFS (farklı anlamlarla) ve DosyaREST (HTTPS). Buradaki önemli nokta, FileREST işlemleri, SMB aracılığıyla açılan bir dosyanın paylaşım moduna saygı göstermelidirAksi takdirde, 409 (Çatışma) alırsınız. Paylaşımİhlali.
Bir SMB istemcisi bir dosyayı açtığında, erişme (Hiçbiri, Oku, Yaz, OkuYaz, Sil) ile paylaşım modu (Hiçbiri, Oku, Yaz, OkuYaz, Sil). Örneğin, birisi bunu FileShare.Read ile açtıysa (Yazma ve Silme'yi reddeder), Aralığı Koy REST'ten başarısız olacak 409 Paylaşımİhlali yazma kolu kapatılana kadar.
Tipik durumlar: Bir KOBİ bunu şu şekilde açarsa: DosyaPaylaşımı.Yazma (Okumayı, Silme'yi reddeder) ve başka bir istemci dener Dosyayı al, çatışma göreceksiniz. Öte yandan, şu gibi işlemler: dizinleri listele veya özellikleri/meta verileri oku İçeriğe erişim gerektirmezler ve özel okuma kilidiyle çakışmazlar.
Ayrıca, bir SMB bir dosyayı açarsa Sil, bir durumda kalır silinmeyi bekliyor ve herhangi bir FileREST 409 ile başarısız oluyor SMBDeletePending (404 değil), çünkü silme işlemi tüm tutamaklar kapatıldığında gerçekleşir. Ve dikkat edin salt okunur öznitelik: İşaretlenirse, FileREST 412 değerini döndürür Salt Okunur Özniteliği yazma girişimlerinden önce.
SMB'deki oplock'lar: R, W, H ve etkileri
Jardines de Viveros fırsatçı ablukalar (oplock'lar) SMB istemcisinin önbellek okuma/yazma veya kapatma tutamaçlarını erteleme Performansı artırmak için. Üç türü vardır: R (önbellekten oku), W (yerel yazıp sonra boş bırak) ve H (Kapanışların bildirilmesini erteliyor).
Uyumsuz bir FileREST işlemi geldiğinde, Azure Dosyaları oplock'u kırmak: Eğer (W) yazıyorsa, istemci önbelleğinizi temizleyin ve REST devam etmeden önce onaylayın; bu gecikmeye neden olabilir ve zaman aşımı aşılırsa 408 hatası oluşur. İstemciÖnbellekTemizlemeGecikmesiRH okumaları için, kırılma her zaman bir yanıtın beklenmesini gerektirmez.
Örnek: SMB'de RWH varsa ve bir REST istemcisi sorarsa Dosyayı al, W bozulur (RH'den ayrılır) ve SMB önbelleğini temizler; REST onaydan sonra yanıt verir. Aralığı Koy ve bir RH, isteği engellemeden R'yi kırmaya yeterlidir, dolayısıyla ekstra gecikme olmaz.
FileREST'te Dosya Kiralama ve SMB ile Çatışmaları
bir taviz FileREST, yazma ve silme ayrıcalığı sağlar. Etkin bir kiralama varsa, bir SMB dosyayı açmaya çalışır. Dosya Erişimi.Yazma o Sil çökecektir. Ve tam tersi, eğer bir KOBİ'nin elinde şu bilgiler varsa yazma veya silme, FileREST aracılığıyla kiralama edinimi 409 SharingViolation ile başarısız olacak.
Operasyonel Özet: Böylece Dosyayı sil REST yoluyla başarılı olursa, hiçbir şey olamaz açık SMB tutamağı yokEğer H oplock da varsa, silmeden önce hiçbir tanımlayıcının kalmadığından emin olmak için H oplock kırılmalıdır.
Windows'ta bayt aralığı kilitleme: LockFile/LockFileEx, özel ve paylaşılan
Paylaşım modlarının ötesinde, Windows şunları sağlar: kilit bayt aralıkları Eşzamanlı yazmaları koordine etmek için bir dosya içinde Kilit Dosyası y LockFileEx Bir aralık tanımlıyorsunuz ve birisi oraya okumaya/yazmaya çalıştığında hata alıyor.
ile LockFileEx engelleme arasında seçim yapabilirsiniz exclusivo (herkese okuma ve yazma izni vermiyor) ve paylaşılan (ilk başta kendisini engelleyen süreç de dahil olmak üzere herkese yazmayı reddeder), salt okunur bölümler oluşturmak için çok kullanışlıdır. UnlockFile/UnlockFileEx ve serbest bırakmak uygulamanın sorumluluğundadır tüm alanlar Kolu kapatmadan önce.
API özellikle şu şekilde iyi çalışır: Çakışan G/Ç (ÇARPINTILI): Kilitleme/kilidi açma işleminin ne zaman tamamlandığını bilmek için yüksek/düşük ofset ve bir olay geçirirsiniz. Gelişmiş örneklerde, sabit boyutlu kayıtlara sahip bir dosya modellenir. ANA_KAYIT bitmap tahsisi, çoklu iş parçacıkları ve rastgele işlemler (oluşturma/değiştirme/silme) ile her şeyi koordine ederek aralık kilitleri yarışlardan kaçınmak için.
Yıkım: Kilitleme Politikası ve svn:needs-lock
Yıkım genellikle modelle daha iyi performans gösterir Kopyala-Değiştir-Birleştir, ancak kullanışlı olduğu durumlar (ikili dosyalar, maketler) vardır engelleme politikası. Ile svn:kilitlenmeye-ihtiyaçları kontrol edildiğinde dosyalar şu şekilde elde edilir: salt okunur Kullanıcı, önleyici bir uyarı görevi gören “Get Lock” butonuna tıklayana kadar.
Kilitler depoda ve yerel olarak belirteç olarak saklanır. Birisi tatile çıkarken kilitli dosyalar bırakırsa, kırmak veya çalmak kilit (dikkat gerektiren eylemler ve daha da iyisi, kanca komut dosyaları) kilit sonrası/kilit açma sonrası (e-posta yoluyla bildirimde bulunmak veya kimin zorla katılabileceğini kısıtlamak).
TortoiseSVN'de needs-lock ile işaretlenen dosyalar şu şekilde görünür: belirli simge Ve onaylama iletişim kutusu, onaylamadan sonra kilitleri serbest bırakmanızı teşvik etmek için kilitleri gösterir ("Kilitleri koru" seçeneğini belirlemediğiniz sürece). Tüm bunlar, kilitlemenin iş akışının bir parçası olduğu ekiplerde çakışmaları azaltmak içindir.
DFSR, Dağıtılmış Kilitleme ve Sanal Sürücü Harfleri
ile DFSR yok çoklu ana bilgisayar dağıtılmış kilidi: SMB dosya erişimi sağlar, DFSR ise sunucular arasında kilit farkındalığı olmadan değişiklikleri çoğaltır. Çoklu ana bilgisayar tasarımlarında, iki site aynı anda düzenleme yaparsa, son yazan ve diğer versiyon ConflictAndDeleted'a iniyor.
Uzak depolama alanlarına sahip ortamlar için, depolama alanını bir sanal sürücü harfi (örneğin, Gladinet tipi aracılar) yerel işletim sistemiyle bütünleşmenize, erişimi kontrol etmenize ve bir küresel kilitleme mekanizmasıYine de, maliyet/fayda oranını merkezi modellere (SharePoint/check-in veya tek bir sitede yetkili bir depoda yerel okuma) göre değerlendirin.
SQL Server Kilitleri: Dosya Kilitleriyle Karıştırmadan Kilitleri Tanılama
SQL Server'da kilitleme, motoru korumanın bir parçasıdır eşzamanlılık altında tutarlılıkSorun, bir oturumun kaynakları çok uzun süre tutar veya bir işlemi açık bırakın. Tarif, kök engelleyici, neyi çalıştırdığını ve neden çalıştırdığını görün.
DMV Temelleri: Bir sys.dm_exec_oturumları y sys.dm_exec_requests görmek için bloke_oturum_kimliği, devlet ve bekleme_türü; ile sys.dm_exec_input_buffer(SPID,0) son talimatı görüyorsunuz; sys.dm_os_waiting_tasks uygulamanın neyi beklediğini söyler; ve sys.dm_tran_locks Tutulan kilitleri görüntüler. Süre ve bağlam için bkz. dm_tran_active/oturum_işlemleri.
Kesin diziler için bir oturum açın Genişletilmiş Etkinlikler ile engellenen_işlem_raporu, "dikkat" ve "hata_bildirildi". İşlem engelleme eşiğini ayarlayın ve raporları kaydedin. Tipik sorunlar: onaylanmamış işlem zaman aşımından sonra (değerler XACT_ABORT'u AÇIK olarak ayarlayın), tüm satırları tüketmeyen (kilitleri koruyan) bir istemci veya motorun tek başına çözemeyeceği, uygulama ve veritabanı katmanları arasında dağıtılmış bir çıkmaz.
"Çökme" ön uç çökmesi olduğunda: DevTools Çökme Analizörü
Web'de engellenen dosyalardan daha fazla acı çekiyorsunuz küçültülmüş izler okunamıyor. Blok Analizörü Microsoft Kenar kullanarak küçültmek kaynak haritalar İstisnaları " ile işaretlersenizKaynak modülleri” (komut dosyası URL'leri ve SHA‑256 karmaları).
Bunu etkinleştirmek için destek kütüphanesini yükleyin ve şuna benzer bir şey çağırın: installErrorStackModuleAnnotations(Hata) Hatalarınızı yönetirken kaynak haritaların erişilebilir olduğundan (ideal olarak sembol sunucusu) emin olun. localhost önbelleğe almıyor haritalar ve akış gerçek üretim izlerine benziyor.
DevTools'da şunu açın: komut menüsü"Crash Analyzer" ifadesini arayın ve kaynak modüllerle birlikte izlemeyi yapıştırın. orijinal işlevler ve dosyalar, kodu yükleyin ve küçültülmüş yığını sorun sisteminize kopyalayın.
Bu karma yaklaşımla —Handle kulpu kimin tuttuğunu belirlemek için, ProcMon ne zaman ve nasıl olacağını yeniden yapılandırmak için, PowerShell MOTW'yi otomatikleştirmek ve yönetmek için, SMB/Azure Dosyaları 409'un neden bazen yağmur yağdığını anlamak için, Yıkılma y bayt aralığı kilitleme yazıları ve SQL/XEvents DMV veritabanı kilitlerini izole etmek tamamen mümkündür kesinti süresini azaltın ve tekrarları önleyin Çevre üzerindeki kontrolü kaybetmeden.
