سرورهای معمولاً محل نگهداری نسخههای پشتیبان، عکسها و برخی پایگاههای داده هستند؛ یعنی دادههایی که از دست دادنشان قابلقبول نیست. اما آیا تا به حال مکث کردهاید و از خودتان پرسیدهاید که آیا این سیستم واقعاً شایسته اعتمادی است که به آن دارید؟ واقعیت این است که در بیشتر سرورهای ، حتی یک فایل خراب نیز ممکن است ذخیره و پشتیبانگیری شود و همان نسخه خراب بهعنوان نسخه اصلی در نظر گرفته شود؛ چون هیچ سازوکاری بررسی نمیکند که دادهها پیش از ذخیره دائمی تغییر کردهاند یا خیر. راهحل از حافظه ECC شروع میشود؛ سختافزاری که در بیشتر سرورهای نادیده گرفته میشود.
برخی خرابیها هیچ اثری از خود باقی نمیگذارند
چرا فایلهای آسیبدیده همیشه خطا ایجاد نمیکنند؟
خطاهای تصادفی کامپیوتر نسبتاً رایج هستند و ممکن است عواملی کاملاً معمولی مانند تداخل الکتریکی روی گذرگاه حافظه، فرسودگی سلولهای DRAM، نقصهای تولیدی یا کاهش شدید ولتاژ پردازنده باعث ایجاد آنها شوند. حتی تشعشعات کیهانی نیز میتوانند باعث خراب شدن فایلها شوند! البته در میان این عوامل، این مورد کماحتمالترین عامل است.
در بسیاری از موارد، یک بیت که دچار تغییر شده است، چند ثانیه بعد بازنویسی میشود و هیچ آسیبی ایجاد نمیکند. اما نوع خطایی که باید نسبت به آن محتاط بود، زمانی رخ میدهد که داده خراب در RAM باقی بماند و پیش از شناسایی، روی دیسک نوشته شود. در این حالت، همان نسخه نادرست روی دیسک به تنها نسخه موجود تبدیل میشود و نه فایلسیستم و نه سیستمعامل متوجه این تغییر نمیشوند. بعدها، زمانی که به فایل نیاز پیدا میشود، ممکن است بخشی از پیکسلهای یک تصویر از بین رفته باشد یا مقادیر نادرستی در پایگاه داده مشاهده شود. این خرابی حتی میتواند باعث شود آرشیوی که به آن نیاز دارید دیگر قابل استخراج نباشد.
این وضعیت از کرش کردن سیستم نیز بدتر است؛ چون کرش بلافاصله وجود یک مشکل را اعلام میکند، اما خرابی خاموش ممکن است برای مدت طولانی شناسایی نشود.
ECC خطاهایی را شناسایی میکند که از چشم شما پنهان میمانند
ECC چگونه خطاهای حافظه را شناسایی و اصلاح میکند؟
Error-Correcting Code یا ECC دقیقاً همان کاری را انجام میدهد که نامش نشان میدهد. حافظه ECC در کنار دادههای اصلی، بیتهای کنترلی اضافی نیز ذخیره میکند. کنترلر حافظه با استفاده از این بیتها میتواند خطاهای تکبیتی را پیش از انتقال یا ذخیره مقدار نادرست، شناسایی و اصلاح کند. حافظه RAM معمولی چنین سازوکاری برای شناسایی یا اصلاح این خطاها ندارد و هر مقداری را که دریافت کند، حتی اگر اشتباه باشد، ذخیره میکند.
ECC از سرورها در برابر هزینههای ناشی از خرابی، توقف سرویس و دادههای نادرست محافظت میکند. با این حال، استفاده از آن در سرورهای اغلب نادیده گرفته میشود؛ یا به این دلیل که در استفادههای روزمره تحمل مقداری خطا وجود دارد، یا به دلیل هزینه اضافی که به ساخت سیستم تحمیل میکند.
برای اضافه کردن ECC به یک سرور باید سختافزار مناسبی انتخاب شود، زیرا همه مادربوردهای معمولی از آن پشتیبانی نمیکنند. در مادربوردهای AM5، پشتیبانی از ECC یکسان نیست و برخی مدلها حتی با نصب حافظه ECC بوت نمیشوند. در پردازندههای دسکتاپ اصلی اینتل نیز پشتیبانی از ECC تقریباً بهطور کامل کنار گذاشته شده است. با این حال، دو مسیر مطمئن وجود دارد:
| مسیر | سختافزار نمونه | پشتیبانی از ECC | نکته مهم |
|---|---|---|---|
| ساخت دستی، پلتفرم AMD |
مادربوردهای سروری AM5 شرکت ASRock Rack مانند مادربورد AM5D4ID2 با پردازندههای Ryzen 7000/8000/9000 یا پردازندههای EPYC 4004/4005 |
بله بهطور رسمی اعلام شده است |
این مادربوردها بهطور اختصاصی برای سرورها طراحی شدهاند |
| ساخت دستی، پلتفرم اینتل |
ASUS Pro WS W880-ACE SE یا ASRock Rack W880M WS همراه با پردازنده Core Ultra Series 2 |
بله |
چیپست W880 از ECC پشتیبانی میکند در حالی که Z890 چنین پشتیبانیای ندارد |
| NAS آماده | Synology DS923+ / DS925+ | بله، بهصورت استاندارد |
حافظه ECC بهصورت داخلی ارائه میشود نیازی به بررسی جداگانه نیست |
| NAS آماده، رده اقتصادی | Synology DS425+ | خیر | برای کاهش قیمت ECC حذف شده است |
در حافظههای DDR5 معمولی نیز قابلیتی با نام On-Die ECC وجود دارد. این قابلیت نوعی محافظت داخلی برای تراشه DRAM است و با ECC کامل در سطح سیستم که امکان گزارش خطا از ابتدا تا انتهای مسیر داده را فراهم میکند، تفاوت دارد. پس از انتخاب سختافزاری که از ECC پشتیبانی میکند، خود حافظه ECC معمولاً هزینه بسیار بیشتری نسبت به RAM استاندارد ندارد.
ECC بهتنهایی راهحل کامل نیست
ابزارهای دیگری که به محافظت از دادهها کمک میکنند
ECC برای شناسایی خطاهای حافظه بسیار مفید است، اما درباره فایلهایی که از قبل روی دیسک ذخیره شدهاند، مسئله متفاوت است. در اینجا باید از فایلسیستمهایی مانند ZFS یا Btrfs استفاده شود. این فایلسیستمها برای هر بلوک داده یک Checksum یا جمع کنترلی نگه میدارند. هر زمان که یک بلوک خوانده میشود، داده با Checksum مربوط به آن مقایسه میشود. اگر این دو با یکدیگر مطابقت نداشته باشند، فایلسیستم متوجه وجود مشکل میشود؛ قابلیتی که در فایلسیستمهایی مانند ext4 یا NTFS در این سطح وجود ندارد.
البته شناسایی مشکل به این معنا نیست که خرابی بهصورت خودکار اصلاح میشود. برای اینکه تعمیر خودکار انجام شود، ابتدا باید یک نسخه سالم از داده وجود داشته باشد. بنابراین، اگر نسخه پشتیبان نداشته باشید، Checksum تنها نیمی از مسیر محافظت را طی میکند.
Scrub نیز یکی از بخشهای مهم این فرایند است. عملیات Scrub در بازههای زمانی مشخص، دادههای ذخیرهشده را میخواند و آنها را با Checksum مربوطه مقایسه میکند. به این ترتیب، خرابی دادهها میتواند خیلی زود شناسایی شود؛ مدتها پیش از اینکه روزی به فایل موردنظر نیاز پیدا کنید. ابزارهایی مانند MemTest86 و Memtest86+ نیز زمانی که احتمال میدهید مشکل از RAM باشد، ضروری هستند. هر دو ابزار حافظه را برای ساعتها تحت آزمایش قرار میدهند تا مشخص شود آیا خطایی در آن رخ میدهد یا خیر.
| روش محافظت | محافظت در برابر |
|---|---|
| حافظه ECC | خطاهای حافظه |
| Checksum در ZFS/Btrfs | خرابی خاموش دادهها |
| فضای ذخیرهسازی افزونه، مانند RAID و Mirror | خرابی درایو و بازیابی دادهها |
| نسخههای پشتیبان |
حذف تصادفی باجافزار و از دست رفتن فاجعهبار دادهها |
| UPS | خرابی ناشی از قطع ناگهانی برق |
کدام سرورهای به ECC نیاز دارند؟
اینکه ECC را برای تمام سرورهای یک قابلیت ضروری بدانیم، رویکرد دقیقی نیست. نیاز به ECC به ارزش دادههایی بستگی دارد که در معرض خطر قرار میگیرند.
ECC راهی نسبتاً کمهزینه برای حذف یک دسته از ریسکها در سرورهایی است که عکسهای خانوادگی، اسناد شخصی، نسخههای پشتیبان سایر کامپیوترها یا پایگاههای داده را نگهداری میکنند.
با این حال، ECC نباید تنها راهکار مقابله با خراب شدن دادهها باشد، زیرا محافظت آن فقط به خطاهای حافظه محدود میشود و پس از رسیدن دادهها به فضای ذخیرهسازی، دیگر نقشی ندارد. یک راهکار جامعتر باید شامل فضای ذخیرهسازی افزونه، نسخههای پشتیبان واقعی و UPS باشد.
اینتوتک

