بهبودهای Btrfs برای گنجاندن در هسته لینوکس 6.2 برای رفع مشکل سوراخ نوشتن در پیاده سازی RAID 5/6 پیشنهاد شده است. ماهیت مشکل به این واقعیت برمی گردد که اگر در حین ضبط خرابی رخ دهد، در ابتدا غیرممکن است که بفهمیم کدام بلوک روی کدام دستگاه RAID به درستی نوشته شده است و ضبط در آن کامل نشده است. اگر در این شرایط بخواهید یک RAID را بازیابی کنید، بلوک های مربوط به بلوک های زیرنویس شده ممکن است از بین بروند زیرا وضعیت بلوک های RAID هماهنگ نیست. این مشکل در هر آرایه RAID1/5/6 که اقدامات خاصی برای مبارزه با این اثر انجام نشده است رخ می دهد.
در پیادهسازی RAID، مانند RAID1 در btrfs، این مشکل با استفاده از چکسومها در هر دو نسخه حل میشود؛ در صورت عدم تطابق، دادهها به سادگی از نسخه دوم بازیابی میشوند. این روش همچنین در صورتی کار می کند که برخی از دستگاه ها به جای خرابی کامل، شروع به ارسال داده های نادرست کند.
با این حال، در مورد RAID5/6، سیستم فایل چکسومهایی را برای بلوکهای برابری ذخیره نمیکند: در شرایط عادی، اعتبار بلوکها با این واقعیت تأیید میشود که همه آنها جمعبندی شدهاند، و بلوک برابری قابل بازسازی است. از داده ها با این حال، در مورد ضبط جزئی، این روش ممکن است در شرایط خاص کار نکند. در این حالت، هنگام بازیابی یک آرایه، ممکن است بلوک هایی که در یک رکورد ناقص قرار می گیرند، به اشتباه بازیابی شوند.
در مورد btrfs، این مشکل زمانی بیشتر مربوط می شود که رکورد تولید شده کوچکتر از نوار باشد. در این حالت، سیستم فایل باید یک عملیات خواندن-تغییر-نوشتن (read-modify-write, 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