Ako vam Windows da poznato upozorenje da proces ne može pristupiti datoteci jer je koristi drugi procesProblem nije u datoteci: problem je u procesu koji drži kontrolnu tačku otvorenom. Brzo pronalaženje krivca čini razliku između manjeg problema i masovnog pada produkcije.
U ovom vodiču konačno objedinjujemo sve što vam je potrebno: Kako tražiti brave pomoću Handle-a (Sysinternals), kako ih potkrijepiti sa Process Monitor, kako automatizirati sigurne odluke pomoću PowerShell, kako izgleda oportunistički način blokiranja i dijeljenja u SMB/Azure datoteke, kako se neko može uključiti EDR/antivirus, što nije isto što i blokada SQL Server i kako ga debugirati, kao i kontrolisati alternative kao što su subverzija i zaključavanje bajtnog opsega pomoću Windows API-ja.
Šta je zaključavanje datoteke i zašto se javlja?
Do pada sistema dolazi kada proces otvori datoteku s načinom dijeljenja koji u praksi... sprečava druge da pišu, preimenuju ili brišuUobičajeni simptom je „Pristup odbijen“ kada jedna usluga pokušava manipulirati njome istovremeno dok druga pregledava ili upisuje u nju.
U stvarnim slučajevima na Windows Serveru, nije neuobičajeno da EDR ili antivirusni program poput MsSense.exe (Microsoft Defender za krajnje tačke) dodirnuti datoteku u kritičnom trenutku i uzrokovati prekid usluge; u takvim scenarijima, dokumentiraj obrazac i zahtjev za izuzeće na ispravnom nivou (ponekad GPO nije dovoljan; morate se obratiti EDR zakupcu) je izlaz.

Kako brzo pronaći proces koji zaključava datoteku: Handle and company
Korisnost rukovati (Sysinternals) prikazuje otvorene ručke za svaki proces i savršen je za traženje prolaznih rušenja. Otvorite konzolu s povišenim privilegijama i filtrirajte po putanji datoteke ili mape kada sumnjate na cijeli direktorij.
Smjernice koje odlično funkcioniraju za početak: handle.exe -a C:\putanja\do\datoteke a ako više volite po mapi, koristite djelomična podudaranja; sa -u y -p Možete to suziti po procesu. Ako je blokada kratkotrajna, pokrenite naredbu u petlji i ispišite je u dnevnik kako ne bi propustili ključni trenutak.
Kada blokada i dalje postoji, Monitor resursa (resmon.exe) vam omogućava pretraživanje „Povezanih identifikatora“ po nazivu datoteke i Process Explorer nudi "Pronađi → Pronađi identifikator ili DLL." Ove dvije opcije su vrlo jednostavne ako je datoteka zaglavljena duže od nekoliko sekundi.
Rekonstrukcija mjesta zločina pomoću Process Monitora (ProcMon)
ProcMon pruža dubok uvid u pozive datotečnog sistema, registar i procese. Sa filtrira po putanji i izvršnoj datoteci Možete snimiti samo ono što je relevantno i zaustaviti se čim reproducirate grešku. Vidjet ćete Koji binarni fajl dodiruje datoteku, kojim redoslijedom i s kojim rezultatom (USPJEH, PRISTUP ODBIJEN, itd.).
Budući da generira mnogo volumena, primjenjuje se strogi filteri i prekinite snimanje čim primijetite događaj. Ako usluga povremeno ne radi, automatizirajte: skriptu koja aktivira Rukovanje/ProcMon prilikom otkrivanja greška dat će vam opis postupka u kojem ste upozoreni s vremenskom oznakom za eskalaciju ili prilagođavanje postavki.
Automatizirajte sigurne odluke pomoću PowerShella (i izbjegnite premještanje datoteka koje se koriste)
Tipičan scenario: Alat (npr. HandBrake) ostavlja datoteke u folderu, a skripta pokušava da ih premjesti u hodu. Forsiranje operacije dok se još pišu loše završava; to je dobra ideja. odgodi kretanje dok ne prestanu biti aktivne ručkeAko to nije moguće, razmislite alternative za brisanje teško izbrisivih datoteka.
Praktične opcije: pokušajte otvoriti datoteku pomoću FileStream u ekskluzivnom načinu rada (nedijeljeno); ako izbaci izuzetak, još uvijek je u upotrebi. Također možete provjerite da se veličina ne povećava X sekundi ili pitajte Handle da li postoje procesi sa tom datotekom otvorenom. Dodaj eksponencijalno odustajanje i označava "u tranzitu" s privremenim produženjem kako bi se izbjegle utrke.
Za otključavanje datoteka sa oznakom porijekla (MOTW) nakon pouzdanih preuzimanja, PowerShell rješava problem pomoću vrlo direktnog cmdleta: koristite Deblokiraj-Datoteku -Putanja «C:\putanja\datoteka» ili Get-ChildItem «C:\path» | Unblock-File za mape. Koristite ga mudro: samo iz pouzdanih izvora i, ako je moguće, nakon pokretanja antivirusnog programa. Ako se mapa s preuzimanjima ne otvori, provjerite konačno rješenje.
Blokovi Azure datoteka: SMB, FileREST i zašto se pojavljuje kršenje dijeljenja
U Azure Files postoji nekoliko pristupnika: SMB, NFS (sa različitom semantikom) i FileREST (HTTPS). Ključno je ovdje da FileREST operacije moraju poštovati način dijeljenja datoteke otvorene putem SMB-a.Ako ne, dobit ćete grešku 409 (konflikt) sa Kršenje pravila dijeljenja.
Kada SMB klijent otvori datoteku, on kombinuje pristup (Ništa, Čitanje, Pisanje, Čitanje/Pisanje, Brisanje) sa način dijeljenja (Ništa, Čitanje, Pisanje, Čitanje i pisanje, Brisanje). Na primjer, ako ga je neko otvorio pomoću FileShare.Read (onemogućava pisanje i brisanje), Raspon za stavljanje iz REST-a će propasti sa 409 Kršenje pravila dijeljenja sve dok se ručica za pisanje ne zatvori.
Tipični slučajevi: ako ga je SMB otvorio sa FileShare.Write (odbija čitanje, brisanje) i drugi klijent pokušava Preuzmi datoteku, vidjet ćete konflikt. S druge strane, operacije poput lista direktorijuma ili čita svojstva/metapodatke Ne zahtijevaju pristup sadržaju i nisu u sukobu s ekskluzivnim zaključavanjem za čitanje.
Također, ako SMB otvori datoteku za izbrisati, ostaje u stanju čeka brisanje i svaki FileREST ne uspijeva sa greškom 409 SMBBrisanjeNaČekanju (ne 404), jer se brisanje materijalizuje kada su svi ručki zatvoreni. I pazite na atribut samo za čitanjeAko je označeno, FileREST vraća 412 AtributSamoSleČitanje protiv pokušaja pisanja.
Oplockovi u SMB-u: R, W, H i njihovi efekti
u oportunističke blokade (oplockovi) omogućavaju SMB klijentu čita/piše u kešu ili odgađa zatvaranje ručki za poboljšanje performansi. Postoje tri vrste: R (čitanje iz keš memorije), W (napiši lokalno i isprazni kasnije) i H (odlaže obavještenje o zatvaranjima).
Kada stigne nekompatibilna FileREST operacija, Azure Files probiti oplockAko piše (W), klijent mora obrišite keš memoriju i potvrdite prije nego što REST nastavi; ovo može uzrokovati kašnjenje, a ako se prekorači vremensko ograničenje, pojavit će se greška 408. Odgoda ispiranja keš memorije klijentaZa očitanja relativne vlažnosti, prekid ne zahtijeva uvijek čekanje odgovora.
Primjer: Ako SMB ima RWH i REST klijent pita Preuzmi datoteku, W je pokvaren (napušta RH) i SMB prazni svoju keš memoriju; REST odgovara nakon potvrde. Sa Raspon za stavljanje i RH, dovoljno je prekinuti R bez blokiranja zahtjeva, tako da nema dodatnog kašnjenja.
Zakup datoteka u FileREST-u i njihov sukob sa SMB-om
Una koncesija FileREST dodjeljuje ekskluzivnost za pisanje i brisanje. Ako postoji aktivni zakup, SMB pokušava otvoriti datoteku sa FileAccess.Write o izbrisati će se srušiti. I obrnuto, ako SMB drži ručke pisanje ili brisanje, sticanje zakupa putem FileREST-a neće uspjeti sa greškom 409 SharingViolation.
Operativni sažetak: Dakle, Izbriši datoteku putem REST-a uspije, ne može biti nema otvorenih SMB ručkiAko postoji i H oplock, treba ga prekinuti kako bi se osiguralo da ne ostanu preostali identifikatori prije brisanja.
Zaključavanje bajtnog opsega u Windowsu: LockFile/LockFileEx, ekskluzivno i dijeljeno
Pored načina dijeljenja, Windows omogućava rasponi bajtova zaključavanja unutar datoteke za koordinaciju istovremenih pisanja. Sa LockFile y LockFileEx Definišete raspon i ako neko pokuša da čita/piše tamo, dobiće grešku.
con LockFileEx možete birati između blokiranja ekskluzivno (zabranjuje čitanje i pisanje svima) i dijeljeno (zabranjuje pisanje svima, uključujući i proces koji ga je prvi blokirao), vrlo korisno za kreiranje odjeljaka samo za čitanje. Otključava se sa OtključajDatoteku/OtključajDatotekuEx i odgovornost je aplikacije da objavi svim oblastima prije zatvaranja ručke.
API posebno dobro funkcioniše sa Preklapajući I/O (PREKRIVA SE): Prosljeđujete visoki/niski pomak i događaj da biste znali kada je zaključavanje/otključavanje završeno. U naprednim primjerima, modelira se datoteka sa zapisima fiksne veličine, GLAVNI_ZAPISI s alokacijom bitmapa, više niti i nasumičnim operacijama (kreiranje/modificiranje/brisanje), koordinirajući sve sa intervalne brave da izbjegnu utrke.
Subverzija: Politika zaključavanja i svn:needs-lock
Subverzija obično bolje funkcioniše s modelom. Kopiraj–Izmijeni–Spoji, ali postoje slučajevi (binarne datoteke, mockupovi) gdje je zgodno imati politika blokiranja. Sa svn:needs-lock provjereno, datoteke se dobijaju kao samo za čitanje dok korisnik ne klikne na "Get Lock", što djeluje kao preventivno upozorenje.
Brave se pohranjuju u repozitoriju, a također i lokalno kao tokeni. Ako neko ode na odmor i ostavi zaključane datoteke, možete slomiti ili ukrasti brava (radnje koje zahtijevaju pažnju i, još bolje, hook skripte) nakon zaključavanja/nakon otključavanja obavijestiti putem e-pošte ili ograničiti ko može prisiliti).
U TortoiseSVN-u, datoteke označene sa needs-lock pojavljuju se sa određena ikona A dijalog za potvrdu (commit) prikazuje zaključavanja kako bi se potaknulo njihovo otpuštanje nakon potvrde (osim ako ne odaberete "Zadrži zaključavanja"). Sve ovo kako bi se smanjili konflikti u timovima gdje je zaključavanje dio radnog procesa.
DFSR, distribuirano zaključavanje i slova virtuelnih diskova
con DFSR ne postoji a distribuirana brava s više hostovaSMB omogućava pristup datotekama, DFSR replicira promjene bez prepoznavanja zaključavanja između servera. U dizajnima s više glavnih servera, ako dvije lokacije uređuju istovremeno, posljednji koji piše a druga verzija završava na ConflictAndDeleted.
Za okruženja sa udaljenim repozitorijima, strategije kao što je predstavljanje skladišta sa slovo virtuelnog diska (npr. agenti tipa Gladinet) omogućavaju vam integraciju s lokalnim operativnim sistemom, kontrolu pristupa i aktiviranje globalni mehanizam zaključavanjaIpak, odmjerite troškove i koristi u odnosu na centralizirane modele (SharePoint/prijava ili lokalno čitanje s autoritativnim repozitorijem na jednoj lokaciji).
SQL Server brave: Dijagnosticiranje brava bez miješanja s bravama datoteka
U SQL Serveru zaključavanje je dio mehanizma za održavanje konzistentnost pod konkurentnošćuProblem nastaje kada sesija predugo zadržava resurse ili ostaviti transakciju otvorenom. Recept je pronaći blokator korijena, pogledajte šta pokreće i zašto.
Osnove DMV-a: Jedan sys.dm_exec_sessions y sys.dm_exec_requests vidjeti blokirajući_id_sesije, država i tip_čekanja; sa sys.dm_exec_input_buffer(SPID,0) vidite posljednju instrukciju; sys.dm_os_waiting_tasks govori vam šta aplikacija čeka; i sys.dm_tran_locks Prikazuje zadržane brave. Za trajanje i kontekst, pogledajte dm_tran_active/session_transactions.
Za tačne sekvence, podignite sesiju Prošireni događaji con izvještaj_o_blokiranom_procesu, „pažnja“ i „prijavljena_greška“. Podesite prag blokiranja procesa i sačuvajte izvještaje. Tipični problemi: nepotvrđena transakcija nakon isteka vremena (vrijednosti POSTAVI XACT_ABORT NA UKLJUČENO), klijent koji ne konzumira sve redove (zadržava brave) ili zastoj raspoređen između sloja aplikacije i baze podataka koji mehanizam ne može sam riješiti.
Kada je "pad" pad na front-endu: DevTools Crash Analyzer
Na webu, više od blokiranih datoteka, patite minificirani tragovi nečitljivo. Analizator blokova Microsoft Edge deminificirati korištenjem izvorne mape ako označite izuzetke sa "Izvorni moduli” (URL-ovi skripti i SHA-256 heševi).
Da biste ga omogućili, instalirajte biblioteku podrške i pozovite nešto poput installErrorStackModuleAnnotations(Greška) prilikom upravljanja greškama. Pobrinite se da su izvorne mape dostupne (idealno, server simbola), znajući da localhost ne kešira mape i tok izgledaju kao pravi tragovi proizvodnje.
U DevTools-u otvorite meni komandi, potražite "Crash Analyzer" i zalijepite trag sa izvornim modulima. Vidjet ćete originalne funkcije i datoteke, prenesite kod i kopirajte deminificirani stek u svoj sistem za rješavanje problema.
S ovim mješovitim pristupom —rukovati da se utvrdi ko drži kvaku, ProcMon rekonstruisati kada i kako, PowerShell automatizirati i upravljati MOTW-om, SMB/Azure datoteke da bi se razumjelo zašto ponekad pada kiša na autoputu 409, subverzija y zaključavanje raspona bajtova kontrolisati pisane radove i SQL/XEvents DMV izolirati brave baze podataka - sasvim je moguće smanjite vrijeme zastoja i spriječite recidive bez gubitka kontrole nad okolinom.
