Ядрото на Linux 6.2 ще включва подобрения на RAID5/6 в Btrfs

Бяха предложени подобрения на Btrfs за включване в ядрото на Linux 6.2, за да се коригира проблемът с дупката за запис в изпълнението на RAID 5/6. Същността на проблема се свежда до факта, че ако възникне срив по време на запис, първоначално е невъзможно да се разбере кой блок на кое RAID устройство е записано правилно и в кой запис не е завършен. Ако се опитате да възстановите RAID в тази ситуация, блоковете, съответстващи на подписаните блокове, може да бъдат унищожени, тъй като състоянието на RAID блоковете не е синхронизирано. Този проблем възниква във всички RAID1/5/6 масиви, където не са взети специални мерки за борба с този ефект.

При внедряване на RAID, като RAID1 в btrfs, този проблем се решава чрез използване на контролни суми и в двете копия; ако има несъответствие, данните просто се възстановяват от второто копие. Този подход работи и ако някое устройство започне да изпраща неправилни данни вместо пълна повреда.

Въпреки това, в случай на RAID5/6, файловата система не съхранява контролни суми за блоковете за паритет: в нормална ситуация валидността на блоковете се проверява от факта, че всички те са контролни суми и блокът за паритет може да бъде реконструиран от данните. Въпреки това, в случай на частично записване, този подход може да не работи в определени ситуации. В този случай при възстановяване на масив е възможно блоковете, които попадат в непълен запис, да бъдат възстановени неправилно.

В случай на btrfs, този проблем е най-важен, ако произведеният запис е по-малък от лентата. В този случай файловата система трябва да извърши операция за четене-промяна-запис (четене-промяна-запис, RMW). Ако това срещне блокове с непълен запис, тогава операцията RMW може да причини повреда, която няма да бъде открита, независимо от контролните суми. Разработчиците са направили промени, при които операцията RMW проверява контролната сума на блоковете, преди да извърши тази операция, и ако е необходимо да се възстановят данни, тя също така проверява контролните суми след запис. За съжаление, в ситуация с писане на непълна лента (RMW), това води до допълнителни разходи за изчисляване на контролни суми, но значително увеличава надеждността. За RAID6 такава логика все още не е готова, но за такъв отказ в RAID6 е необходимо записът да е неуспешен на 2 устройства наведнъж, което е по-малко вероятно.

Освен това можем да отбележим препоръките за използване на RAID5/6 от разработчиците, чиято същност се свежда до факта, че в Btrfs метаданните и профилът за съхранение на данни може да се различават. В този случай можете да използвате профила RAID1 (огледален) или дори RAID1C3 (3 копия) за метаданни и RAID5 или RAID6 за данни. Това гарантира надеждна защита на метаданните и липса на „дупка за запис“, от една страна, и по-ефективно използване на пространството, характерно за RAID5/6, от друга. Това позволява да се избегне повредата на метаданните и повредата на данните може да бъде коригирана.

Може също да се отбележи, че за SSD в Btrfs в ядрото 6.2, асинхронното изпълнение на операцията „изхвърляне“ ще бъде активирано по подразбиране (маркиране на освободени блокове, които вече не трябва да бъдат физически съхранявани). Предимството на този режим е високата производителност поради ефективното групиране на операциите „изхвърляне“ в опашка и по-нататъшната обработка на опашката от фонов процесор, поради което нормалните FS операции не се забавят, както е при синхронните „ отхвърляне“, тъй като блоковете се освобождават и SSD може да взема по-добри решения. От друга страна, вече няма да е необходимо да използвате помощни програми като fstrim, тъй като всички налични блокове ще бъдат изчистени във FS без необходимост от допълнително сканиране и без забавяне на операциите.

Източник: opennet.ru

Добавяне на нов коментар