OpenZFS 2.1.14 és 2.2.2 frissítés a fájlsérülési hiba javításával

Az OpenZFS 2.1.14 és 2.2.2 projekt javító kiadásai, amelyek a ZFS fájlrendszer implementációját fejlesztik a következőhöz: Linux és a FreeBSD. A frissítések kijavítanak egy hibát a dnode gyorsítótár konzisztencia-ellenőrző kódjában, amely adatvesztést okozhatott az üres területeket tartalmazó fájlokban, amikor a módosítások után másolásra kerültek.

A probléma megoldására tett első kísérlet a 2.2.1-es verzióban történt, de a javítás hatástalannak bizonyult. A hiba sokáig észrevétlen maradt, és a coreutils 9.x csomagban található "cp" segédprogram módosítása után kezdett megnyilvánulni. Úgy vélik, hogy a Red Hat Enterprise-ban... Linux és az azon alapuló disztribúciók esetében a probléma nem jelentkezik, mivel az RHEL 9 a coreutils 8.x csomagot használja, amely eltérő logikával működik a "cp" segédprogram működéséhez.

A probléma akkor jelentkezik, ha olyan fájlmásoló segédprogramokat használ, amelyek képesek azonosítani és optimalizálni a fájlok üres területeit. Fájl másolásakor a betöltött fájlrendszerekben károsodás következhet be, ha a műveletet a változtatás után szinte azonnal végrehajtják, és az adatok egy része csak a piszkos gyorsítótárban marad, és még nem lett kiürítve a lemezre.

A fájlok üres régióinak kezelésének optimalizálása érdekében az OpenZFS a 0.6.2-es kiadás óta támogatja a SEEK_HOLE és SEEK_DATA műveleteket, amelyek lehetővé teszik a fájl üres régiójának kihagyását lemezről történő olvasáskor. Az üres területeket a rendszer csak azután ismeri fel és menti el a róluk szóló információkat, miután a gyorsítótárban lévő fájlhoz kapcsolódó összes fennmaradó adatot a lemezre ürítették. Az öblítés elindításához az OpenZFS rendelkezik egy ellenőrzéssel, amely kiértékeli a nem mentett adatok jelenlétét a gyorsítótárban, és a SEEK_HOLE és a SEEK_DATA használatához szükséges lemezkiürítést kényszeríti ki.

Sajnos az ellenőrzés hiányosnak bizonyult, és bizonyos körülmények között hibásan határozták meg a visszaállítási állapotra vonatkozó adatokat, és a lemez régi információkat tartalmazott a fájl tartalmáról, ha a kérés két gyorsítótár-visszaállítási művelet közötti rövid időintervallumra esett. . Az üres területek betöltését optimalizáló olvasási műveletek ebben a pillanatban kihagyhatják az adatok egy részének kiolvasását, üresnek tekintve, míg a fájllal dolgozó program korábban módosíthat az üres területeken. Ennek eredményeként a "cp" segédprogram használata egy olyan másolatot eredményezhet, amely üres területeket tartalmazott, ahol az eredeti fájlban nem volt.

Forrás: opennet.ru

Vásároljon megbízható tárhelyet DDoS védelemmel, VPS VDS szerverekkel rendelkező webhelyekhez 🔥 Vásároljon megbízható weboldal tárhelyet DDoS védelemmel, VPS VDS szerverekkel | ProHoster