Përditësimi OpenZFS 2.1.14 dhe 2.2.2 me rregullimin e një gabimi që çonte në dëmtimin e skedarëve

Janë formuar rishikimet korrektuese të projekteve OpenZFS 2.1.14 dhe 2.2.2, që zhvillojnë zbatimin e sistemit të skedarëve ZFS për Linux dhe FreeBSD. Në azhurnime është zgjidhur një problem në kodin e verifikimit të qëndrueshmërisë së dnodit, që çon në dëmtimin e të dhënave në skedarët që përmbanin zona të zbrazëta, gjatë kopjimit të tyre pas bërë ndryshimeve.

Fillimisht, problemi u përpoq të zgjidhej në versionin 2.2.1, por rregullimi u tregua joefektiv. Gabimi ka mbetur i paditur për një kohë të gjatë dhe filloi të shfaqet pas ndryshimeve të bëra në utilitarin "cp" në paketën coreutils 9.x. Supozohet se këtu në Red Hat Enterprise Linux dhe shpërndarjet e bazuara mbi të, problemi nuk shfaqet, pasi në RHEL 9 përdoret paketa coreutils 8.x me një logjikë tjetër pune të utilitarit "cp".

Problemi shfaqet kur përdoren utilitarët e kopjimit të skedarëve, që dinë të identifikojnë dhe optimizojnë zonat e zbrazëta në skedarë. Dëmtimi mund të ndodhi në sistemet e ngarkuara të skedarëve gjatë kopjimit të një skedari, nëse operacioni kryhet pothuajse menjëherë pas ndryshimit dhe një pjesë e të dhënave mbetet vetëm në cache-in e papastër dhe ende nuk është shkarkuar në disk.

Për optimizimin e punës me zonat e zbrazëta në skedarë, OpenZFS, duke filluar nga publikimi 0.6.2, mbështet operacionet SEEK_HOLE dhe SEEK_DATA, që lejojnë kalimin e zonës së zbrazët të skedarit gjatë leximit nga disku. Njohja e zonave të zbrazëta dhe ruajtja e informacionit për to bëhet vetëm pas shkarkimit në disk të të dhënave që mbetën në cache, të lidhura me skedarin. Për të iniciuar shkarkimin, OpenZFS ka një verifikim që vlerëson praninë në cache të të dhënave të pamjaftueshme dhe kryen një shkarkim të detyruar të informacionit në disk, të nevojshëm për përdorimin e SEEK_HOLE dhe SEEK_DATA.

Fatkeqë, verifikimi doli të ishte i paplotë dhe në disa raste, të dhënat mbi gjendjen e rikthimit u përcaktuan gabimisht, duke i dhënë diskut informacion të vjetër rreth përmbajtjes së skedarit, nëse kërkesa binte në një dritare të vogël kohore midis dy operacioneve të rikthimit të të dhënave nga cache. Operacionet e leximin, që optimizojnë ngarkimin e zonave bosh, në atë moment mund të kishin humbur leximin e disa të dhënave, duke i konsideruar ato si të zbrazëta, ndërkohë që programi që punonte me skedarin mund të kishte bërë ndryshime në zonat bosh më parë. Si rezultat, përdorimi i utilitarit "cp" mund të kishte çuar në krijimin e një kopje që përmbante zona bosh aty ku ato nuk ishin në skedarin origjinal.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster