Përfshirja e kernelit Linux 6.2 sjell përmirësime për Btrfs, lidhur me rregullimin e problemit "write hole" në implementimin e RAID 5/6. Problemi qëndron në faktin se, nëse ndodh një crash gjatë shkruarjes, fillimisht është e pamundur të kuptohet se cilat blloqe në cilat prej pajisjeve të RAID kanë shkruar saktë, e cila administratë nuk është përfunduar. Në rastin e përpjekjes për të rivendosur RAID në një situatë të tillë, mund të ndodhin shkatërrime të bllokëve përkatës të bllokëve të pashkruar, pasi gjendja e blloqeve të RAID është asinkronizuar. Ky problem ndodh në çdo array RAID1/5/6 ku nuk janë marrë masa speciale për të luftuar efektin e tillë.
Në implementimin e RAID, si RAID1 në btrfs, ky problem zgjidhet përmes përdorimit të checksum-eve në të dy kopjet, në rast të mos përputhjes, të dhënat thjesht rikuperohen nga kopja e dytë. Ky qasje gjithashtu funksionon nëse ndonjë pajisje fillon të japë të dhëna të pasakta në vend të një dështimi të plotë.
Megjithatë, në rastin e RAID5/6, sistemi i dosjeve nuk ruan checksum-e për blloqet e paritetit: në një situatë normale, saktësia e blloqeve kontrollohet nga fakti se ato janë të gjitha të pajisura me një checksum, dhe blloku i paritetit mund të rindërtohet nga të dhënat. Megjithatë, në rastin e një shkrimi të pjesshëm, ky qasje në disa situata mund të mos funksionojë. Në këtë rast, gjatë rikuperimit të array-it, nuk përjashtohet që blloqet e prekur nga shkrimi i papërfunduar të rikuperohen gabimisht.
Në rastin e btrfs, ky problem është më i rëndësishëm nëse shkrimi i prodhuar është më i vogël se stripi. Në këtë rast, sistemi i dosjeve duhet të kryejë operacionin e leximit-modifikimit-shkrimit (read-modify-write, RMW). Nëse gjatë kësaj procesi haset blloqe me shkrim të papërfunduar, në këtë rast operacioni RMW mund të shkaktojë shkatërrime që nuk do të zbulojnë, pavarësisht nga checksum-et. Zhvilluesit kanë bërë ndryshime ku operacioni RMW kontrollon checksum-in e blloqeve para se të kryejë këtë operacion, dhe sipas nevojës për rikuperimin e të dhënave, kryen gjithashtu kontrollin e checksum-eve pas shkrimit. Fatkeqësisht, në situatën me shkrimin e një strypi të papërfunduar (RMW), kjo çon në kosto shtesë për llogaritjen e checksum-eve, por ndihmon shumë në rritjen e besueshmërisë. Për RAID6, kjo logjikë ende nuk është e gatshme, por për një dështim të tillë në RAID6 është e nevojshme që shkrimi të dështojë në 2 pajisje njëherësh, që është më pak e mundur.
Së shpejti, mund të përmenden rekomandimet nga zhvilluesit për përdorimin e RAID5/6, të cilat janë se në Btrfs, profili i ruajtjes së metadata dhe të dhënave mund të ndryshojë. Në këtë mënyrë, mund të përdoret profili RAID1 (mirror) ose madje RAID1C3 (3 kopje) për metadata, ndërsa për të dhënat RAID5 ose RAID6. Kjo siguron mbrojtje të besueshme të metadata dhe shmang "write hole" nga njëra anë, dhe një përdorim më efikas të hapësirës, karakteristikë e RAID5/6, nga ana tjetër. Kjo ndihmon për të shmangur shkatërrimet në metadata, ndërsa dëmtimet e të dhënave mund të korrigjohen.
Gjithashtu, duhet të përmendet se për SSD-në në Btrfs, në kernelin 6.2 do të aktivizohet për parazgjedhje ekzekutimi asinkron i operacionit "discard" (shënimi i bllokëve të çliruar që nuk mund të ruhet fizikisht më). Avantazhi i këtij modaliteti është performanca e lartë për shkak të grumbullimit efektiv të operacioneve "discard" në radhë dhe më pas trajtimi i radhës nga një procesor i pasmë, duke bërë që operacionet normale të sistemit të dosjeve të mos ngadalësohen, siç ndodh me "discard" sinkron ndërsa çlirohen blloqet, dhe SSD mund të marrë vendime më të mira. Nga ana tjetër, nuk do të jetë më e nevojshme të përdoren mjete si fstrim, pasi të gjithë blloqet e disponueshme do të pastrohen në sistemin e dosjeve pa nevojën për skanim shtesë dhe pa ngadalësimin e operacioneve.
Burimi: opennet.ru
