Kernel Linux 6.2 akan menyertakan peningkatan pada RAID5/6 di Btrfs

Perbaikan Btrfs telah diusulkan untuk dimasukkan dalam kernel Linux 6.2 guna memperbaiki masalah lubang tulis dalam implementasi RAID 5/6. Inti masalahnya adalah jika terjadi kegagalan selama perekaman, pada awalnya tidak mungkin untuk memahami blok mana pada perangkat RAID mana yang ditulis dengan benar, dan di blok mana perekaman tidak selesai. Jika Anda mencoba memulihkan RAID dalam situasi ini, blok yang terkait dengan blok yang ditanggung mungkin dimusnahkan karena status blok RAID tidak sinkron. Masalah ini terjadi di array RAID1/5/6 mana pun yang tindakan khusus belum diambil untuk mengatasi efek ini.

Dalam implementasi RAID, seperti RAID1 di btrfs, masalah ini diselesaikan dengan menggunakan checksum di kedua salinan; jika ada ketidakcocokan, data dipulihkan dari salinan kedua. Pendekatan ini juga berfungsi jika beberapa perangkat mulai mengirim data yang salah dan bukannya gagal total.

Namun, dalam kasus RAID5/6, sistem file tidak menyimpan checksum untuk blok paritas: dalam situasi normal, validitas blok diverifikasi oleh fakta bahwa semuanya di-checksum, dan blok paritas dapat direkonstruksi dari data. Namun, dalam kasus pencatatan sebagian, pendekatan ini mungkin tidak berhasil dalam situasi tertentu. Dalam hal ini, saat memulihkan array, ada kemungkinan bahwa blok yang termasuk dalam catatan yang tidak lengkap akan dipulihkan secara tidak benar.

Dalam kasus btrfs, masalah ini paling relevan jika rekaman yang dihasilkan lebih kecil dari stripe. Dalam hal ini, sistem file harus melakukan operasi baca-modifikasi-tulis (baca-modifikasi-tulis, RMW). Jika ini menemui blok dengan penulisan yang tidak lengkap, maka operasi RMW dapat menyebabkan kerusakan yang tidak akan terdeteksi, terlepas dari checksumnya. Pengembang telah membuat perubahan di mana operasi RMW memeriksa checksum blok sebelum melakukan operasi ini, dan jika perlu untuk memulihkan data, ia juga memeriksa checksum setelah perekaman. Sayangnya, dalam situasi penulisan garis tidak lengkap (RMW), hal ini menyebabkan biaya tambahan untuk menghitung checksum, namun secara signifikan meningkatkan keandalan. Untuk RAID6, logika seperti itu belum siap, namun, untuk kegagalan seperti itu di RAID6, penulisan harus gagal pada 2 perangkat sekaligus, yang kecil kemungkinannya.

Selain itu, kami dapat mencatat rekomendasi untuk menggunakan RAID5/6 dari pengembang, yang intinya adalah bahwa di Btrfs, metadata dan profil penyimpanan data mungkin berbeda. Dalam hal ini, Anda dapat menggunakan profil RAID1 (cermin) atau bahkan RAID1C3 (3 salinan) untuk metadata, dan RAID5 atau RAID6 untuk data. Hal ini memastikan perlindungan metadata yang andal dan tidak adanya “lubang tulis”, di satu sisi, dan penggunaan ruang yang lebih efisien, karakteristik RAID5/6, di sisi lain. Hal ini memungkinkan kerusakan metadata dihindari dan kerusakan data dapat diperbaiki.

Dapat juga dicatat bahwa untuk SSD di Btrfs di kernel 6.2, eksekusi operasi “buang” yang tidak sinkron akan diaktifkan secara default (menandai blok yang dibebaskan yang tidak perlu lagi disimpan secara fisik). Keuntungan dari mode ini adalah kinerja tinggi karena pengelompokan operasi “buang” yang efektif dalam antrian dan pemrosesan antrian lebih lanjut oleh prosesor latar belakang, itulah sebabnya operasi FS normal tidak melambat, seperti halnya dengan sinkron “ membuang” saat blok dibebaskan, dan SSD dapat membuat keputusan yang lebih baik. Di sisi lain, Anda tidak perlu lagi menggunakan utilitas seperti fstrim, karena semua blok yang tersedia akan dihapus di FS tanpa memerlukan pemindaian tambahan dan tanpa memperlambat operasi.

Sumber: opennet.ru

Tambah komentar