Kernel Linux 6.2 akan menyertakan penambahbaikan kepada RAID5/6 dalam Btrfs

Penambahbaikan Btrfs telah dicadangkan untuk dimasukkan ke dalam kernel Linux 6.2 untuk menyelesaikan masalah lubang tulis dalam pelaksanaan RAID 5/6. Intipati masalah datang kepada fakta bahawa jika ranap berlaku semasa rakaman, pada mulanya adalah mustahil untuk memahami blok mana pada peranti RAID yang ditulis dengan betul, dan di mana rakaman tidak selesai. Jika anda cuba memulihkan RAID dalam situasi ini, blok yang sepadan dengan blok yang diunderait mungkin dimusnahkan kerana keadaan blok RAID tidak segerak. Masalah ini berlaku dalam mana-mana tatasusunan RAID1/5/6 di mana langkah khas belum diambil untuk memerangi kesan ini.

Dalam pelaksanaan RAID, seperti RAID1 dalam btrfs, masalah ini diselesaikan dengan menggunakan jumlah semak dalam kedua-dua salinan; jika terdapat ketidakpadanan, data hanya dipulihkan daripada salinan kedua. Pendekatan ini juga berfungsi jika sesetengah peranti mula menghantar data yang salah dan bukannya kegagalan sepenuhnya.

Walau bagaimanapun, dalam kes RAID5/6, sistem fail tidak menyimpan checksum untuk blok pariti: dalam situasi biasa, kesahihan blok itu disahkan oleh fakta bahawa mereka semua checksummed, dan blok pariti boleh dibina semula daripada data. Walau bagaimanapun, dalam kes rakaman separa, pendekatan ini mungkin tidak berfungsi dalam situasi tertentu. Dalam kes ini, apabila memulihkan tatasusunan, ada kemungkinan bahawa blok yang berada di bawah rekod yang tidak lengkap akan dipulihkan dengan tidak betul.

Dalam kes btrfs, masalah ini paling relevan jika rekod yang dihasilkan adalah lebih kecil daripada jalur. Dalam kes ini, sistem fail mesti melakukan operasi baca-ubah-tulis (baca-ubah-tulis, RMW). Jika ini menemui blok dengan tulisan yang tidak lengkap, maka operasi RMW mungkin menyebabkan rasuah yang tidak akan dikesan, tanpa mengira jumlah semak. Pembangun telah membuat perubahan di mana operasi RMW menyemak jumlah semak blok sebelum melaksanakan operasi ini, dan jika perlu untuk memulihkan data, ia juga menyemak jumlah semak selepas merekodkan. Malangnya, dalam situasi dengan menulis jalur tidak lengkap (RMW), ini membawa kepada overhed tambahan untuk mengira jumlah semak, tetapi meningkatkan kebolehpercayaan dengan ketara. Untuk RAID6, logik sebegitu belum sedia, bagaimanapun, untuk kegagalan seperti itu dalam RAID6 adalah perlu bahawa penulisan gagal pada 2 peranti sekaligus, yang berkemungkinan kecil.

Selain itu, kami boleh perhatikan cadangan untuk menggunakan RAID5/6 daripada pembangun, yang intipatinya berpunca daripada fakta bahawa dalam Btrfs metadata dan profil storan data mungkin berbeza. Dalam kes ini, anda boleh menggunakan profil RAID1 (cermin) atau malah RAID1C3 (3 salinan) untuk metadata dan RAID5 atau RAID6 untuk data. Ini memastikan perlindungan metadata yang boleh dipercayai dan ketiadaan "lubang tulis", di satu pihak, dan penggunaan ruang yang lebih cekap, ciri RAID5/6, di pihak yang lain. Ini membolehkan rasuah metadata dielakkan dan rasuah data boleh diperbetulkan.

Ia juga boleh diperhatikan bahawa untuk SSD dalam Btrfs dalam kernel 6.2, pelaksanaan tak segerak bagi operasi "buang" akan diaktifkan secara lalai (menanda blok yang dibebaskan yang tidak lagi perlu disimpan secara fizikal). Kelebihan mod ini ialah prestasi tinggi kerana pengelompokan operasi "buang" yang berkesan dalam baris gilir dan pemprosesan selanjutnya baris gilir oleh pemproses latar belakang, itulah sebabnya operasi FS biasa tidak menjadi perlahan, seperti halnya dengan " segerak " buang” apabila blok dibebaskan, dan SSD boleh membuat keputusan yang lebih baik. Sebaliknya, anda tidak perlu lagi menggunakan utiliti seperti fstrim, kerana semua blok yang tersedia akan dikosongkan dalam FS tanpa memerlukan pengimbasan tambahan dan tanpa memperlahankan operasi.

Sumber: opennet.ru

Tambah komen