Da biste omogućili kernel Linux Verzija 6.2 predlaže poboljšanja Btrfs-a kako bi se riješio problem "rupe pri pisanju" u RAID 5/6 implementacijama. Problem proizlazi iz činjenice da ako dođe do greške pri pisanju tokom pisanja, u početku je nemoguće utvrditi koji je blok na kojem RAID uređaju ispravno upisan, a koji nije. Ako se u ovoj situaciji pokuša oporavak RAID-a, blokovi koji odgovaraju neupisanim blokovima mogu biti oštećeni, jer stanje RAID bloka nije sinhronizovano. Ovaj problem se javlja u svim RAID 1/5/6 nizovima koji ne implementiraju posebne mjere za ublažavanje ovog problema.
U implementaciji RAID-a, kao što je RAID1 u btrfs-u, ovaj problem se rješava korištenjem kontrolnih suma u obje kopije; ako postoji nepodudarnost, podaci se jednostavno vraćaju iz druge kopije. Ovaj pristup također funkcionira ako neki uređaj počne slati netačne podatke umjesto potpunog kvara.
Međutim, u slučaju RAID5/6, sistem datoteka ne pohranjuje kontrolne sume za blokove parnosti: u normalnoj situaciji, valjanost blokova se provjerava činjenicom da su svi zbrojeni, a blok parnosti se može rekonstruirati iz podataka. Međutim, u slučaju djelomičnog snimanja, ovaj pristup možda neće raditi u određenim situacijama. U ovom slučaju, prilikom vraćanja niza, moguće je da će blokovi koji potpadaju pod nekompletan zapis biti vraćeni pogrešno.
U slučaju btrfs-a, ovaj problem je najrelevantniji ako je snimljeni zapis manji od trake. U ovom slučaju, sistem datoteka mora izvršiti operaciju čitanja-izmjena-pisanja (čitanje-izmjena-pisanje, RMW). Ako ovo naiđe na blokove s nepotpunim pisanjem, tada operacija RMW može uzrokovati oštećenje koje neće biti otkriveno, bez obzira na kontrolne sume. Programeri su napravili izmjene u kojima RMW operacija provjerava kontrolnu sumu blokova prije izvođenja ove operacije, a ako je potrebno vratiti podatke, provjerava i kontrolne sume nakon snimanja. Nažalost, u situaciji sa pisanjem nepotpune trake (RMW), to dovodi do dodatnih troškova za izračunavanje kontrolnih suma, ali značajno povećava pouzdanost. Za RAID6 takva logika još nije spremna, međutim, za takav kvar u RAID6 potrebno je da upis ne uspije na 2 uređaja odjednom, što je manje vjerovatno.
Osim toga, možemo primijetiti preporuke za korištenje RAID5/6 od programera, čija je suština da se u Btrfs-u metapodaci i profil pohrane podataka mogu razlikovati. U ovom slučaju, možete koristiti profil RAID1 (mirror) ili čak RAID1C3 (3 kopije) za metapodatke, a RAID5 ili RAID6 za podatke. Ovo osigurava pouzdanu zaštitu metapodataka i odsustvo „rupe za upis“, s jedne strane, i efikasnije korištenje prostora, karakteristično za RAID5/6, s druge strane. Ovo omogućava da se izbjegne oštećenje metapodataka i ispravi oštećenje podataka.
Također se može primijetiti da će za SSD-ove u Btrfs-u u kernelu 6.2, asinhrono izvršavanje operacije “odbaci” biti aktivirano prema zadanim postavkama (označavanje oslobođenih blokova koji više ne moraju biti fizički pohranjeni). Prednost ovog režima su visoke performanse zbog efikasnog grupisanja „odbacivanja“ operacija u redu i dalje obrade reda od strane pozadinskog procesora, zbog čega se normalne FS operacije ne usporavaju, kao što je slučaj sa sinkronim „ odbaci” kako se blokovi oslobađaju, a SSD može donijeti bolje odluke. S druge strane, više nećete morati koristiti uslužne programe kao što je fstrim, budući da će svi dostupni blokovi biti obrisani u FS-u bez potrebe za dodatnim skeniranjem i bez usporavanja operacija.
izvor: opennet.ru
