Btrfs-ferbetterings binne foarsteld foar opnimmen yn 'e Linux 6.2-kernel om it probleem mei skriuwgat te reparearjen yn' e RAID 5/6-ymplemintaasje. De essinsje fan it probleem komt del op it feit dat as in crash optreedt tidens opname, it is yn earste ynstânsje ûnmooglik om te begripen hokker blok op hokker RAID apparaat is skreaun goed, en wêryn de opname waard net foltôge. As jo besykje in RAID yn dizze situaasje te herstellen, kinne de blokken dy't oerienkomme mei de ûnderskreaune blokken wurde ferneatige, om't de steat fan 'e RAID-blokken net syngronisearre is. Dit probleem komt foar yn alle RAID1/5/6-arrays dêr't gjin spesjale maatregels binne nommen om dit effekt te bestriden.
Yn in RAID-ymplemintaasje, lykas RAID1 yn btrfs, wurdt dit probleem oplost troch kontrôlesummen yn beide kopyen te brûken, as der in mismatch is, wurde de gegevens gewoan werombrocht fan 'e twadde kopy. Dizze oanpak wurket ek as ien apparaat begjint ferkearde gegevens te ferstjoeren ynstee fan in folsleine mislearring.
Yn it gefal fan RAID5/6 bewarret it bestânsysteem lykwols gjin kontrôlesummen foar de pariteitsblokken: yn in normale situaasje wurdt de jildigens fan 'e blokken ferifiearre troch it feit dat se allegear kontrolearre binne, en it pariteitsblok kin rekonstruearre wurde út de gegevens. Lykwols, yn it gefal fan in part opname, dizze oanpak kin net wurkje yn bepaalde situaasjes. Yn dit gefal, by it weromsetten fan in array, is it mooglik dat blokken dy't falle ûnder in ûnfolsleine record wurde wersteld ferkeard.
Yn it gefal fan btrfs, dit probleem is meast relevant as de record wurdt produsearre is lytser as de stripe. Yn dit gefal moat it bestânsysteem in lês-modify-skriuwoperaasje útfiere (read-modify-write, RMW). As dit blokken tsjinkomt mei ûnfolslein skriuwen, dan kin de RMW-operaasje korrupsje feroarsaakje dy't net ûntdutsen wurdt, nettsjinsteande de kontrôlesummen. De ûntwikkelders hawwe wizigingen makke wêryn de RMW-operaasje de kontrôlesum fan blokken kontrolearret foardat dizze operaasje útfierd wurdt, en as it nedich is om gegevens te herstellen, kontrolearret it ek de kontrôlesummen nei opname. Spitigernôch, yn 'e situaasje mei it skriuwen fan in ûnfolsleine stripe (RMW), dit liedt ta ekstra overhead foar it berekkenjen fan kontrôlesummen, mar fergruttet de betrouberens signifikant. Foar RAID6 is sa'n logika noch net klear, lykwols, foar sa'n mislearring yn RAID6 is it nedich dat it skriuwen op 2 apparaten tagelyk mislearret, wat minder wierskynlik is.
Derneist kinne wy oanbefellings foar it brûken fan RAID5/6 fan 'e ûntwikkelders notearje, wêrfan de essinsje delkomt op it feit dat yn Btrfs it metadata- en gegevensopslachprofyl ferskille kinne. Yn dit gefal kinne jo it RAID1-profyl (spegel) of sels RAID1C3 (3 kopyen) brûke foar metadata, en RAID5 of RAID6 foar gegevens. Dit soarget foar betroubere beskerming fan metadata en it ûntbrekken fan in "skriuwgat", oan 'e iene kant, en effisjinter gebrûk fan romte, karakteristyk foar RAID5/6, oan' e oare. Dit makket it mooglik om metadata-korrupsje te foarkommen en data-korrupsje kin korrizjearre wurde.
It kin ek opmurken wurde dat foar SSD's yn Btrfs yn kernel 6.2, de asynchrone útfiering fan 'e "ferwiderje" operaasje standert wurdt aktivearre (markearje befrijde blokken dy't net langer fysyk moatte wurde opslein). It foardiel fan dizze modus is hege prestaasjes troch de effektive groepearring fan "ôfwize" operaasjes yn in wachtrige en fierdere ferwurking fan 'e wachtrige troch in eftergrûnprosessor, wêrtroch normale FS-operaasjes net fertrage, lykas it gefal is mei syngroane " discard" as blokken wurde befrijd, en de SSD kin bettere besluten nimme. Oan 'e oare kant hoege jo gjin nutsbedriuwen lykas fstrim mear te brûken, om't alle beskikbere blokken yn 'e FS sille wurde wiske sûnder de needsaak foar ekstra skennen en sûnder operaasjes te fertrage.
Boarne: opennet.ru
