'\" t .\" Title: ndctl-inject-error .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.26 .\" Date: 2026-06-30 .\" Manual: ndctl Manual .\" Source: ndctl .\" Language: Persian .\" .TH "NDCTL\-INJECT\-ERROR" "1" "2026-06-30" "ndctl" "ndctl Manual" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 .nh .ad l .de URL \fI\\$2\fP <\\$1>\\$3 .. .als MTO URL .if \n[.g] \{\ . mso www.tmac . am URL . ad l . . . am MTO . ad l . . . LINKSTYLE blue R < > .\} .SH "نام (NAME)" ndctl-inject-error \- تزریق خطای آزمایشی به دستگاه‌های حافظه غیرفرار (NVDIMM) .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIndctl inject\-error\fP [] .fi .br .SH "نحوه عملکرد (THEORY OF OPERATION)" .sp ظرفیت یک ناحیه حافظه غیرفرار یا REGION (محدوده پیوسته از حافظه پایدار) از طریق یک یا چند دستگاه NAMESPACE (فضای نام) قابل دسترسی است. اصطلاح REGION در لینوکس معادل چیزی است که در ACPI و UEFI با عنوان DIMM\-interleave\-set یا محدوده آدرس فیزیکی سیستم (system\-physical\-address\-range) نامیده می‌شود که توسط کنترل‌کننده حافظه میان یک یا چند ماژول حافظه تقسیم (striped) شده است. .sp مشخصات فنی UEFI پروتکل \fINVDIMM Label Protocol\fP را به عنوان ترکیبی از روش‌های دسترسی به ناحیه برچسب (label area) و ساختار داده برای تخصیص یک یا چند شیء NAMESPACE از یک REGION تعریف می‌کند. توجه داشته باشید که پشتیبانی از برچسب اختیاری است و اگر لینوکس قابلیت برچسب را شناسایی نکند، به صورت خودکار برای هر ناحیه یک فضای نام «بدون برچسب» (label\-less) ایجاد می‌کند. نمونه‌هایی از فضاهای نام بدون برچسب مواردی هستند که با گزینه خط فرمان هسته \fImemmap=ss!nn\fP ایجاد می‌شوند (به ویکی nvdimm در kernel.org مراجعه کنید)، یا NVDIMMهایی که فاقد \fInamespace index\fP معتبر در ناحیه برچسب خود هستند. .if n .sp .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 .B نکته (Note) .ps -1 .br .sp فضاهای نام بدون برچسب فاقد بسیاری از ویژگی‌های فضاهای نام دارای برچسب هستند. برای نمونه، اندازه آن‌ها قابل تغییر نیست، یا نمی‌توان آن‌ها را به طور کامل نابود ساخت (\fIdestroyed\fP \- یعنی فضای آن‌ها بازپس گرفته شود). یک عملیات تخریب، هرگونه متادیتای وابسته به حالت را صفر می‌کند. در نهایت، برای عملیات create\-namespace روی فضاهای نام بدون برچسب، ابزار ndctl بررسی‌های ظرفیت در دسترس ناحیه را دور می‌زند و همیشه درخواست را با استفاده از تمام ظرفیت ناحیه برآورده می‌کند. تنها عملیات پیکربندی مجدد پشتیبانی‌شده روی یک فضای نام بدون برچسب، تغییر حالت (\fImode\fP) آن است. .sp .5v .RE .sp یک فضای نام می‌تواند برای کار در یکی از ۴ حالت \fIfsdax\fP، \fIdevdax\fP، \fIsector\fP و \fIraw\fP پیکربندی شود. در ادامه الگوهای استفاده مورد انتظار برای این حالت‌ها آمده است: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} fsdax: حالت Filesystem\-DAX حالت پیش‌فرض یک فضای نام هنگام اجرای \fIndctl create\-namespace\fP بدون هیچ گزینه‌ای است. این حالت یک دستگاه بلوکی (/dev/pmemX[.Y]) ایجاد می‌کند که از قابلیت‌های DAX در فایل‌سیستم‌های لینوکس (تا کنون xfs و ext4) پشتیبانی می‌نماید. ویژگی DAX حافظه نهان صفحه (page cache) را از مسیر I/O حذف کرده و به mmap(2) اجازه می‌دهد نگاشت‌های مستقیم به رسانه حافظه پایدار ایجاد کند. قابلیت DAX به بارهای کاری / مجموعه‌های کاری که از ظرفیت page cache فراتر می‌روند امکان می‌دهد تا به اندازه ظرفیت حافظه پایدار مقیاس‌پذیر شوند. بارهای کاری که در page cache جا می‌شوند یا انتقال داده‌های حجیم انجام می‌دهند ممکن است از DAX سودی نبرند. در صورت شک و تردید، این حالت را انتخاب کنید. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} devdax: حالت Device\-DAX قابلیت‌های نگاشت DAX مشابه mmap(2) را مانند Filesystem\-DAX فراهم می‌کند. با این حال، به جای یک دستگاه بلوکی که بتواند از یک فایل‌سیستم دارای قابلیت DAX پشتیبانی کند، این حالت یک فایل دستگاه کاراکتری واحد (/dev/daxX.Y) ایجاد می‌کند. از این حالت برای تخصیص حافظه پایدار به یک ماشین مجازی، ثبت حافظه پایدار برای RDMA، یا در مواردی که به نگاشت‌های بسیار عظیم نیاز است استفاده کنید. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} sector: از این حالت برای میزبانی فایل‌سیستم‌های قدیمی که متادیتا را اعتبارسنجی (checksum) نمی‌کنند یا برنامه‌هایی که برای بخش‌های ناقص/پاره‌شده (torn sectors) پس از خرابی ناگهانی سیستم آماده نیستند استفاده کنید. کاربرد مورد انتظار برای این حالت، درایوهای راه‌اندازی (boot volumes) کوچک است. این حالت با سایر سیستم‌های عامل سازگار است. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} raw: حالت خام (Raw) در عمل تنها یک دیسک حافظه است که از DAX پشتیبانی نمی‌کند. معمولاً این حالت نشان‌دهنده فضای نامی است که توسط ابزارها یا سیستم‌عامل دیگری ایجاد شده است که نحوه ایجاد فضای نام حالت \fIfsdax\fP یا \fIdevdax\fP لینوکس را نمی‌دانسته‌اند. این حالت با سایر سیستم‌های عامل سازگار است، اما مجدداً از عملکرد DAX پشتیبانی نمی‌کند. .RE .sp دستور ndctl\-inject\-error می‌تواند برای درخواست از پلتفرم جهت شبیه‌سازی خطاهای رسانه در فضای آدرس NVDIMM برای کمک به اشکال‌زدایی و توسعه ویژگی‌های مربوط به مدیریت خطا استفاده شود. .sp به صورت پیش‌فرض، تزریق خطا در عمل فقط خطایی را به اولین \fIn\fP بایت از بلوک تزریق می‌کند، که در آن \fIn\fP خروجی تابع ndctl_cmd_ars_cap_get_size() است. به عبارت دیگر، ما فقط یک \fIars_unit\fP در هر بخش (sector) تزریق می‌کنیم. این مقدار برای اینکه لینوکس کل بخش را به عنوان خراب (bad) علامت‌گذاری کند کافی است، و به همین صورت در لیست‌های مختلف \fIbadblocks\fP در هسته نمایش داده خواهد شد. اگر چندین بلوک تزریق شوند، تنها \fIn\fP بایت اول هر بلوک مشخص‌شده به عنوان خطا تزریق می‌شود. این رفتار می‌تواند با گزینه \-\-saturate بازنویسی شود که تزریق خطا را به کل بلوک تحمیل می‌کند. .if n .sp .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 .B هشدار (Warning) .ps -1 .br .sp این دستورات خطرناک هستند و می‌توانند موجب از دست رفتن داده‌ها شوند. آن‌ها صرفاً برای اهداف آزمایش و اشکال‌زدایی ارائه شده‌اند. .sp .5v .RE .SH "مثال‌ها (EXAMPLES)" .sp تزریق خطا در namespace0.0 در بلوک ۱۲ به مدت ۲ بلوک (یعنی ۱۲ و ۱۳): .sp .nf ndctl inject\-error \-\-block=12 \-\-count=2 namespace0.0 .fi .br .sp بررسی وضعیت خطاهای تزریق‌شده در namespace0.0: .sp .nf ndctl inject\-error \-\-status namespace0.0 .fi .br .sp حذف خطاهای تزریق‌شده در بلوک ۱۲ به مدت ۲ بلوک در namespace0.0: .sp .nf ndctl inject\-error \-\-uninject \-\-block=12 \-\-count=2 namespace0.0 .fi .br .SH "گزینه‌ها (OPTIONS)" .sp \-B, \-\-block= .RS 4 آفست بلوک فضای نام در قالب بلوک‌های ۵۱۲ بایتی که قرار است خطا در آن تزریق شود. .sp .if n .RS 4 .nf .fam C نکته: آفست بسته به «حالت» (mode) فضای نام به روش‌های مختلفی تفسیر می‌شود. برای حالت "raw"، آفست همان آفست پایه فضای نام است. برای حالت "fsdax" (یعنی یک فضای نام "pfn")، آفست نسبت به بخش قابل مشاهده برای کاربر در فضای نام سنجیده می‌شود و آفست ایجادشده توسط متادیتای هسته محاسبه خواهد شد. برای یک فضای نام در حالت "sector" (یعنی یک فضای نام "BTT")، آفست نسبت به فضای نام پایه سنجیده می‌شود، زیرا جزئیات ترجمه BTT داخلی هسته بوده و هنگام تزریق خطا قابل محاسبه نیستند. .fam .fi .if n .RE .RE .sp \-n, \-\-count= .RS 4 تعداد بلوک‌ها برای تزریق به عنوان خطا. این مقدار نیز بر حسب بلوک‌های ثابت ۵۱۲ بایتی است. .RE .sp \-d, \-\-uninject .RS 4 این گزینه از پلتفرم درخواست می‌کند که تمام خطاهای تزریق‌شده برای آفست و تعداد بلوک مشخص‌شده را حذف کند. .sp .if n .RS 4 .nf .fam C هشدار: این گزینه ردیابی داخلی badblock در هسته را پاک نمی‌کند؛ این موارد تنها با انجام عملیات نوشتن روی مکان‌های آسیب‌دیده پاک می‌شوند. بنابراین تنها در صورتی از گزینه \-\-clear استفاده کنید که دقیقاً می‌دانید چه کاری انجام می‌دهید. برای استفاده عادی، خطاهای تزریق‌شده تنها باید با انجام نوشتن پاک شوند. انتظار نداشته باشید پس از تزریق خطا و پاک کردن آن با \-\-clear داده‌های اصلی دست‌نخورده باقی بمانند \- داده‌ها از دست خواهند رفت، زیرا تنها راه «واقعی» برای پاک کردن مکان خطا، نوشتن روی آن یا صفر کردن آن (truncate/hole\-punch) است. .fam .fi .if n .RE .RE .sp \-t, \-\-status .RS 4 این گزینه وضعیت خطاهای تزریق‌شده را بازیابی می‌کند. توجه داشته باشید که این گزینه تمام خطاهای شناخته‌شده/نهفته (یعنی موارد تزریق‌نشده) را بازیابی نمی‌کند و معادل انجام Address Range Scrub نیست. .RE .sp \-N, \-\-no\-notify .RS 4 این گزینه تنها هنگام تزریق خطا معتبر است. به طور پیش‌فرض، دستور تزریق خطا از سفت‌افزار پلتفرم می‌خواهد اعلانی را در هسته ایجاد کند و از آن بخواهد وضعیت خطاهای شناخته‌شده خود را به‌روزرسانی نماید. با این گزینه، خطا همچنان تزریق می‌شود اما هسته اعلانی دریافت نخواهد کرد و هنگامی که به آن مکان دسترسی پیدا شود، خطا به عنوان یک خطای رسانه نهفته ظاهر می‌گردد. اگر سفت‌افزار پلتفرم از این ویژگی پشتیبانی نکند، این گزینه هیچ اثری نخواهد داشت. .RE .sp \-S, \-\-saturate .RS 4 این گزینه تزریق یا لغو تزریق خطا را مجبور می‌کند کل محدوده آدرس پوشش‌داده‌شده توسط بلوک(های) مشخص‌شده را در بر بگیرد. .RE .sp \-v, \-\-verbose .RS 4 نمایش پیام‌های اشکال‌زدایی برای فرآیند تزریق خطا. .RE .sp \-u, \-\-human .RS 4 قالب‌بندی اعداد نشان‌دهنده اندازه فضای ذخیره‌سازی یا آفست‌ها به صورت رشته‌های خوانا برای انسان همراه با واحدها، به جای داده‌های عددی صحیح خام پیش‌فرضِ مناسب ماشین. تبدیل سایر فیلدهای عددی به رشته‌های هگزادسیمال. .RE .sp \-r, \-\-region= .RS 4 یک نام دستگاه \fIregionX\fP یا یک شماره شناسه ناحیه. محدود کردن عملیات به ناحیه(های) مشخص‌شده. کلمه کلیدی \fIall\fP می‌تواند برای نشان دادن عدم وجود هرگونه محدودیت مشخص شود، هرچند این معادل ارائه ندادن گزینه \-\-region است. .RE .sp \-b, \-\-bus= .RS 4 یک شماره شناسه گذرگاه یا یک رشته ارائه‌دهنده (مانند "ACPI.NFIT"). محدود کردن عملیات به گذرگاه(های) مشخص‌شده. کلمه کلیدی \fIall\fP می‌تواند برای نشان دادن عدم وجود هرگونه محدودیت مشخص شود، هرچند این معادل ارائه ندادن گزینه \-\-bus است. .RE .SH "حق نشر (COPYRIGHT)" .sp حق نشر \(co 2016 \- 2022 متعلق به Intel Corporation است. مجوز GPLv2: گنو GPL نسخه ۲ .URL "http://gnu.org/licenses/gpl.html" "" "." این نرم‌افزار آزاد است: شما مجاز به تغییر و توزیع مجدد آن هستید. هیچ ضمانتی وجود ندارد، تا حدی که قانون اجازه می‌دهد. .SH "همچنین ببینید (SEE ALSO)" .sp ndctl\-list(1)