Ažuriranje OpenZFS 2.1.14 i 2.2.2 rješava grešku koja može dovesti do oštećenja datoteka.

Formirani su korektivni izdanja projekta OpenZFS 2.1.14 i 2.2.2, koji razvija implementaciju datotečnog sustava ZFS za Linux i FreeBSD. U ažuriranjima je riješen problem u kodu provjere usklađenosti predmemorije dnode, koji je uzrokovao oštećenje podataka u datotekama koje su sadržavale prazna područja, prilikom njihovog kopiranja nakon izvršenih promjena.

Prvotno je pokušano riješiti problem u verziji 2.2.1, ali ispravak se pokazao neučinkovitim. Greška je dugo vremena ostala neprimijećena i počela se manifestirati nakon promjena u alatu „cp” u paketu coreutils 9.x. Pretpostavlja se da se u Red Hat Enterprise Linux-u i distribucijama temeljenim na njemu problem ne manifestira, jer RHEL 9 koristi paket coreutils 8.x s drugačijom logikom rada alata „cp.”

Problem se pojavljuje prilikom korištenja alata za kopiranje datoteka koji mogu prepoznati i optimizirati prazna područja u datotekama. Oštećenje može nastati u opterećenim datotečnim sustavima prilikom kopiranja datoteke, ako se operacija izvrši gotovo odmah nakon promjene i dio podataka ostane samo u dirty-cache-u i još nije ispražnjen na disk.

Za optimizaciju rada s praznim područjima u datotekama, OpenZFS, počevši od izdanja 0.6.2, podržava operacije SEEK_HOLE i SEEK_DATA, koje omogućuju preskakanje praznog područja datoteke prilikom čitanja s diska. Prepoznavanje praznih područja i očuvanje informacija o njima odvija se samo nakon ispražnjenja svih preostalih podataka u predmemoriji povezanih s datotekom na disk. Za iniciranje ispražnjenja u OpenZFS postoji provjera koja ocjenjuje prisutnost nespremljenih podataka u predmemoriji i vrši prisilno ispražnjenje informacija na disk, što je potrebno za korištenje SEEK_HOLE i SEEK_DATA.

Nažalost, provjera je bila nepotpuna i u određenim okolnostima podaci o stanju resetiranja nisu ispravno utvrđeni, a na disku su se nalazili stari podaci o sadržaju datoteke, ako je zahtjev upao u kratki vremenski okvir između dva resetiranja podataka iz cache-a. Operacije čitanja, koje optimiziraju učitavanje praznih područja, u tom trenutku mogle su propustiti čitanje dijela podataka, smatrajući ih praznima, dok je program koji je radio s datotekom mogao prethodno unijeti promjene u prazna područja. Kao rezultat, korištenje alata "cp" moglo je dovesti do stvaranja kopije koja sadrži prazna područja gdje ih nije bilo u izvornoj datoteci.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster