| NDCTL-INJECT-ERROR(1) | ndctl Manual | NDCTL-INJECT-ERROR(1) |
نام (NAME)
ndctl-inject-error - تزریق خطای آزمایشی به دستگاههای حافظه غیرفرار (NVDIMM)
خلاصه دستور (SYNOPSIS)
ndctl inject-error <namespace> [<options>]
نحوه عملکرد (THEORY OF OPERATION)
ظرفیت یک ناحیه حافظه غیرفرار یا REGION (محدوده پیوسته از حافظه پایدار) از طریق یک یا چند دستگاه NAMESPACE (فضای نام) قابل دسترسی است. اصطلاح REGION در لینوکس معادل چیزی است که در ACPI و UEFI با عنوان DIMM-interleave-set یا محدوده آدرس فیزیکی سیستم (system-physical-address-range) نامیده میشود که توسط کنترلکننده حافظه میان یک یا چند ماژول حافظه تقسیم (striped) شده است.
مشخصات فنی UEFI پروتکل NVDIMM Label Protocol را به عنوان ترکیبی از روشهای دسترسی به ناحیه برچسب (label area) و ساختار داده برای تخصیص یک یا چند شیء NAMESPACE از یک REGION تعریف میکند. توجه داشته باشید که پشتیبانی از برچسب اختیاری است و اگر لینوکس قابلیت برچسب را شناسایی نکند، به صورت خودکار برای هر ناحیه یک فضای نام «بدون برچسب» (label-less) ایجاد میکند. نمونههایی از فضاهای نام بدون برچسب مواردی هستند که با گزینه خط فرمان هسته memmap=ss!nn ایجاد میشوند (به ویکی nvdimm در kernel.org مراجعه کنید)، یا NVDIMMهایی که فاقد namespace index معتبر در ناحیه برچسب خود هستند.
نکته (Note)
فضاهای نام بدون برچسب فاقد بسیاری از ویژگیهای فضاهای نام دارای برچسب هستند. برای نمونه، اندازه آنها قابل تغییر نیست، یا نمیتوان آنها را به طور کامل نابود ساخت (destroyed - یعنی فضای آنها بازپس گرفته شود). یک عملیات تخریب، هرگونه متادیتای وابسته به حالت را صفر میکند. در نهایت، برای عملیات create-namespace روی فضاهای نام بدون برچسب، ابزار ndctl بررسیهای ظرفیت در دسترس ناحیه را دور میزند و همیشه درخواست را با استفاده از تمام ظرفیت ناحیه برآورده میکند. تنها عملیات پیکربندی مجدد پشتیبانیشده روی یک فضای نام بدون برچسب، تغییر حالت (mode) آن است.
یک فضای نام میتواند برای کار در یکی از ۴ حالت fsdax، devdax، sector و raw پیکربندی شود. در ادامه الگوهای استفاده مورد انتظار برای این حالتها آمده است:
دستور ndctl-inject-error میتواند برای درخواست از پلتفرم جهت شبیهسازی خطاهای رسانه در فضای آدرس NVDIMM برای کمک به اشکالزدایی و توسعه ویژگیهای مربوط به مدیریت خطا استفاده شود.
به صورت پیشفرض، تزریق خطا در عمل فقط خطایی را به اولین n بایت از بلوک تزریق میکند، که در آن n خروجی تابع ndctl_cmd_ars_cap_get_size() است. به عبارت دیگر، ما فقط یک ars_unit در هر بخش (sector) تزریق میکنیم. این مقدار برای اینکه لینوکس کل بخش را به عنوان خراب (bad) علامتگذاری کند کافی است، و به همین صورت در لیستهای مختلف badblocks در هسته نمایش داده خواهد شد. اگر چندین بلوک تزریق شوند، تنها n بایت اول هر بلوک مشخصشده به عنوان خطا تزریق میشود. این رفتار میتواند با گزینه --saturate بازنویسی شود که تزریق خطا را به کل بلوک تحمیل میکند.
هشدار (Warning)
این دستورات خطرناک هستند و میتوانند موجب از دست رفتن دادهها شوند. آنها صرفاً برای اهداف آزمایش و اشکالزدایی ارائه شدهاند.
مثالها (EXAMPLES)
تزریق خطا در namespace0.0 در بلوک ۱۲ به مدت ۲ بلوک (یعنی ۱۲ و ۱۳):
ndctl inject-error --block=12 --count=2 namespace0.0
بررسی وضعیت خطاهای تزریقشده در namespace0.0:
ndctl inject-error --status namespace0.0
حذف خطاهای تزریقشده در بلوک ۱۲ به مدت ۲ بلوک در namespace0.0:
ndctl inject-error --uninject --block=12 --count=2 namespace0.0
گزینهها (OPTIONS)
-B, --block=
نکته: آفست بسته به «حالت» (mode) فضای نام به روشهای مختلفی تفسیر میشود. برای حالت "raw"، آفست همان آفست پایه فضای نام است. برای حالت "fsdax" (یعنی یک فضای نام "pfn")، آفست نسبت به بخش قابل مشاهده برای کاربر در فضای نام سنجیده میشود و آفست ایجادشده توسط متادیتای هسته محاسبه خواهد شد. برای یک فضای نام در حالت "sector" (یعنی یک فضای نام "BTT")، آفست نسبت به فضای نام پایه سنجیده میشود، زیرا جزئیات ترجمه BTT داخلی هسته بوده و هنگام تزریق خطا قابل محاسبه نیستند.
-n, --count=
-d, --uninject
هشدار: این گزینه ردیابی داخلی badblock در هسته را پاک نمیکند؛ این موارد تنها با انجام عملیات نوشتن روی مکانهای آسیبدیده پاک میشوند. بنابراین تنها در صورتی از گزینه --clear استفاده کنید که دقیقاً میدانید چه کاری انجام میدهید. برای استفاده عادی، خطاهای تزریقشده تنها باید با انجام نوشتن پاک شوند. انتظار نداشته باشید پس از تزریق خطا و پاک کردن آن با --clear دادههای اصلی دستنخورده باقی بمانند - دادهها از دست خواهند رفت، زیرا تنها راه «واقعی» برای پاک کردن مکان خطا، نوشتن روی آن یا صفر کردن آن (truncate/hole-punch) است.
-t, --status
-N, --no-notify
-S, --saturate
-v, --verbose
-u, --human
-r, --region=
-b, --bus=
حق نشر (COPYRIGHT)
حق نشر © 2016 - 2022 متعلق به Intel Corporation است. مجوز GPLv2: گنو GPL نسخه ۲ http://gnu.org/licenses/gpl.html. این نرمافزار آزاد است: شما مجاز به تغییر و توزیع مجدد آن هستید. هیچ ضمانتی وجود ندارد، تا حدی که قانون اجازه میدهد.
همچنین ببینید (SEE ALSO)
ndctl-list(1)
| 2026-06-30 | ndctl |