COREDUMP.CONF(5) coredump.conf COREDUMP.CONF(5)

coredump.conf - فایل پیکربندی مدیریت تخلیه حافظه هسته (Core Dump)

/etc/systemd/coredump.conf
/run/systemd/coredump.conf
/usr/local/lib/systemd/coredump.conf
/usr/lib/systemd/coredump.conf
/etc/systemd/coredump.conf.d/*.conf
/run/systemd/coredump.conf.d/*.conf
/usr/local/lib/systemd/coredump.conf.d/*.conf
/usr/lib/systemd/coredump.conf.d/*.conf

این فایل‌ها رفتار systemd-coredump(8) را پیکربندی می‌کنند، که گرداننده‌ای برای تخلیه حافظه هسته (Core Dump) است که توسط هسته لینوکس فراخوانی می‌شود. استفاده از systemd-coredump توسط تنظیم kernel.core_pattern در sysctl(8) هسته تعیین می‌شود. برای جزئیات بیشتر به صفحات راهنمای systemd-coredump(8) و core(5) مراجعه کنید.

پیکربندی پیش‌فرض در زمان کامپایل تعیین می‌شود، بنابراین پیکربندی تنها زمانی مورد نیاز است که لازم باشد از مقادیر پیش‌فرض انحراف ایجاد شود. فایل پیکربندی اصلی از یکی از دایرکتوری‌های فهرست‌شده به ترتیب اولویت بارگذاری می‌شود و تنها از اولین فایل یافت‌شده استفاده می‌گردد: /etc/systemd/، /run/systemd/، /usr/local/lib/systemd/ [1]، /usr/lib/systemd/. نسخه ارائه‌شده توسط توزیع‌کننده (vendor) شامل ورودی‌های کامنت‌شده‌ای است که مقادیر پیش‌فرض را به عنوان راهنمای مدیر سیستم نشان می‌دهد. بازنویسی‌های محلی را نیز می‌توان با ایجاد فایل‌های تکمیلی (drop-in) مطابق توضیحات زیر انجام داد. فایل پیکربندی اصلی را نیز می‌توان برای این منظور ویرایش کرد (یا یک رونوشت در /etc/ اگر در /usr/ عرضه شده باشد)، با این حال استفاده از فایل‌های تکمیلی (drop-in) برای پیکربندی محلی به جای تغییر دادن فایل پیکربندی اصلی توصیه می‌شود.

علاوه بر فایل پیکربندی اصلی، قطعه‌کدهای پیکربندی تکمیلی (drop-in) از دایرکتوری‌های /usr/lib/systemd/*.conf.d/، /usr/local/lib/systemd/*.conf.d/ و /etc/systemd/*.conf.d/ خوانده می‌شوند. این فایل‌های تکمیلی اولویت بالاتری دارند و فایل پیکربندی اصلی را بازنویسی می‌کنند. فایل‌های موجود در زیردایرکتوری‌های پیکربندی *.conf.d/ صرف‌نظر از این‌که در کدام زیردایرکتوری قرار دارند، بر اساس نام فایل خود به ترتیب واژه‌نگاری (lexicographic) مرتب می‌شوند. هنگامی که چندین فایل یک گزینه یکسان را تعیین می‌کنند، برای گزینه‌هایی که فقط یک مقدار واحد را می‌پذیرند، ورودی موجود در فایلی که نام آن در آخرین جایگاه قرار می‌گیرد اولویت دارد، و برای گزینه‌هایی که فهرستی از مقادیر را می‌پذیرند، ورودی‌ها به همان ترتیبی که در فایل‌های مرتب‌شده ظاهر می‌شوند جمع‌آوری می‌گردند.

هنگامی که بسته‌ها نیاز به سفارشی‌سازی پیکربندی دارند، می‌توانند فایل‌های تکمیلی (drop-in) را در /usr/ نصب کنند. فایل‌های موجود در /etc/ برای مدیر سیستم محلی رزرو شده‌اند، که می‌تواند از این منطق برای بازنویسی فایل‌های پیکربندی نصب‌شده توسط بسته‌های توزیع‌کننده استفاده کند. برای بازنویسی قطعات تکمیلی بسته، باید از فایل‌های تکمیلی استفاده شود، زیرا فایل پیکربندی اصلی اولویت پایین‌تری دارد. توصیه می‌شود نام تمام فایل‌ها در این زیردایرکتوری‌ها با یک عدد دو رقمی و یک خط تیره پیشوندگذاری شود تا ترتیب آن‌ها ساده‌تر شود. این کار همچنین مفهوم اولویت‌های تکمیلی را تعریف می‌کند تا به توزیع‌کنندگان سیستم‌عامل اجازه دهد فایل‌های تکمیلی را در محدوده خاصی پایین‌تر از محدوده مورد استفاده کاربران عرضه کنند. این امر خطر بازنویسی تصادفی فایل‌های تکمیلی تعریف‌شده توسط کاربران را توسط فایل‌های تکمیلی بسته‌ها کاهش می‌دهد. توصیه می‌شود از محدوده 10-40 برای فایل‌های تکمیلی در /usr/ و از محدوده 60-90 برای فایل‌های تکمیلی در /etc/ و /run/ استفاده شود، تا اطمینان حاصل گردد که فایل‌های تکمیلی محلی و گذرا بر فایل‌های تکمیلی عرضه‌شده توسط توزیع‌کننده سیستم‌عامل اولویت دارند.

برای غیرفعال کردن یک فایل پیکربندی ارائه‌شده توسط توزیع‌کننده، روش توصیه‌شده قرار دادن یک پیوند نمادین (symlink) به /dev/null در دایرکتوری پیکربندی در /etc/ با همان نام فایل پیکربندی توزیع‌کننده است.

تمام گزینه‌ها در بخش [Coredump] پیکربندی می‌شوند:

Storage=

محل ذخیره‌سازی فایل‌های تخلیه حافظه هسته (cores) را کنترل می‌کند. یکی از مقادیر "none"، "external" و "journal" است. هنگامی که روی "none" تنظیم شود، تخلیه حافظه هسته ممکن است ثبت شود (شامل ردگیری پشته/backtrace در صورت امکان)، اما به صورت دائمی ذخیره نمی‌شود. در صورت تنظیم روی "external" (پیش‌فرض)، فایل‌های core در دایرکتوری /var/lib/systemd/coredump/ ذخیره خواهند شد. هنگامی که روی "journal" تنظیم شود، فایل‌های core در ژورنال ذخیره شده و طبق الگوهای عادی چرخش ژورنال، چرخش (rotate) پیدا می‌کنند.

هنگامی که فایل‌های core در ژورنال ذخیره می‌شوند، ممکن است طبق تنظیمات فشرده‌سازی ژورنال فشرده شوند؛ به journald.conf(5) مراجعه کنید. هنگامی که فایل‌های core به صورت خارجی ذخیره می‌شوند، به طور پیش‌فرض فشرده خواهند شد؛ در زیر را مشاهده کنید.

توجه داشته باشید برای پردازش تخلیه حافظه هسته (یعنی استخراج ردگیری پشته/stack trace)، فایل core ابتدا باید روی دیسک نوشته شود. بنابراین، مگر در حالتی که ProcessSizeMax= روی 0 تنظیم شده باشد (در زیر ببینید)، فایل core در هر صورت (تحت یک نام فایل موقت، یا حتی در یک فایل unlinked) در /var/lib/systemd/coredump/ نوشته خواهد شد؛ از این رو Storage= تنها کنترل می‌کند که آیا پس از پردازش، در آنجا باقی بماند یا خیر.

در نگارش 215 اضافه شد.

Compress=

فشرده‌سازی را برای ذخیره‌سازی خارجی کنترل می‌کند. یک آرگومان بولی (boolean) می‌پذیرد، که مقدار پیش‌فرض آن "yes" است.

در نگارش 215 اضافه شد.

ProcessSizeMax=

حداکثر اندازه بر حسب بایت از یک core که پردازش خواهد شد. فایل‌های تخلیه حافظه هسته که از این اندازه فراتر روند ممکن است ذخیره شوند، اما ردگیری پشته (stack trace) تولید نخواهد شد. مانند سایر اندازه‌ها در همین فایل پیکربندی، پسوندهای متداول بر مبنای 1024 مجاز هستند (B، K، M، G، T، P و E). مقدار پیش‌فرض روی سیستم‌های ۳۲ بیتی برابر با 1G و روی سیستم‌های ۶۴ بیتی برابر با 32G است.

تنظیم Storage=none و ProcessSizeMax=0 تمام فرآیند مدیریت تخلیه حافظه هسته را به جز ثبت یک ورودی در گزارش (log) غیرفعال می‌کند.

در نگارش 215 اضافه شد.

EnterNamespace=

برای فرایندهای متعلق به یک فضای نام PID (PID namespace)، کنترل می‌کند که آیا systemd-coredump(8) تلاش کند تخلیه حافظه هسته را روی میزبان (host)، با استفاده از اطلاعات اشکال‌زدایی (debug) از ساختار سلسله‌مراتبی سامانه فایل (یعنی فضای نام mount) فرایندی که دچار فروپاشی شده پردازش کند یا خیر. دسترسی به ساختار سلسله‌مراتبی سامانه فایل فرایند ممکن است برای تولید یک ردگیری پشته (backtrace) کاملاً نمادین‌شده (symbolized) ضروری باشد. اگر روی "yes" تنظیم شود، systemd-coredump درخت نقاط اتصال (mounts) را از فضای نام mount فرایند فروپاشیده‌شده به دست می‌آورد و تلاش می‌کند با استفاده از اطلاعات اشکال‌زدایی فایل‌های اجرایی باینری و کتابخانه‌های موجود در سلسله‌مراتب فرایند فروپاشیده‌شده، ردگیری پشته را در بستر میزبان تولید کند. مقدار پیش‌فرض آن "no" است، یعنی به منظور به حداکثر رساندن امنیت، هیچ تلاشی برای دریافت اطلاعات اشکال‌زدایی خارجی از فضای نام mount فرایند انجام نمی‌شود. این گزینه هیچ تاثیری بر فرایندهایی که بخشی از فضای نام PID میزبان هستند ندارد.

توجه داشته باشید که تخلیه حافظه هسته فرایند دارای فضای نام، حتی اگر EnterNamespace= روی "no" تنظیم شده باشد، همچنان در /var/lib/systemd/coredump/ روی میزبان ذخیره می‌شود (مشروط به تنظیم Storage=).

توجه داشته باشید که EnterNamespace= تنها در صورتی موثر است که تخلیه حافظه هسته توسط کانتینری تولید شده باشد که در واحد (unit) آن گزینه CoredumpReceive= فعال نشده باشد.

توجه داشته باشید که معمولاً برای حداکثر امنیت ترجیح داده می‌شود که کانتینرها و سایر جعبه‌های شنی مبتنی بر فضای نام، در صورت امکان تخلیه حافظه هسته خود را پردازش کنند. این قابلیت را می‌توان روی واحد کانتینر از طریق تنظیم CoredumpReceive= فعال کرد؛ برای جزئیات به systemd.resource-control(5) مراجعه فرمایید.

در نگارش 257 اضافه شد.

ExternalSizeMax=, JournalSizeMax=

حداکثر اندازه (فشرده یا غیرفشرده) بر حسب بایت از یک تخلیه حافظه هسته که باید در فایل‌های جداگانه روی دیسک ذخیره شود (پیش‌فرض: 1G در سیستم‌های ۳۲ بیتی، 32G در سیستم‌های ۶۴ بیتی) یا در ژورنال (پیش‌فرض: 767M). توجه داشته باشید که سرویس ژورنال یک محدودیت سخت‌گیرانه 767M را بر رکوردهای گزارش ژورنال اعمال می‌کند و رکوردهای ثبت‌شده بزرگ‌تر را نادیده خواهد گرفت. از این رو، JournalSizeMax= ممکن است نسبت به مقدار پیش‌فرض کاهش یابد، اما نمی‌توان آن را افزایش داد. پسوندهای واحد اندازه نیز همانند ProcessSizeMax= مجاز هستند.

ExternalSizeMax=infinity اندازه core را نامحدود تعیین می‌کند.

در نگارش 215 اضافه شد.

MaxUse=, KeepFree=

محدودیت‌هایی را بر فضای دیسک، مشخص‌شده بر حسب بایت، که توسط تخلیه‌های حافظه هسته ذخیره‌شده به صورت خارجی اشغال می‌شود اعمال می‌کند. پسوندهای واحد اندازه دقیقاً مانند ProcessSizeMax= مجاز هستند. MaxUse= تضمین می‌کند که به محض این‌که کل فضای دیسک اشغال‌شده توسط فایل‌های core از این حد فراتر رفت، فایل‌های قدیمی‌تر حذف شوند (به‌طور پیش‌فرض 10% از کل فضای دیسک، با سقف 4GiB و حداقل 1MiB). KeepFree= کنترل می‌کند که حداقل چه مقدار فضای دیسک آزاد باقی بماند (به‌طور پیش‌فرض 15% از کل فضای دیسک، با سقف حداکثر 4GiB). توجه داشته باشید که فضای دیسک مورد استفاده توسط تخلیه‌های حافظه هسته در حین پردازش آن‌ها ممکن است به طور موقت از این محدودیت‌ها فراتر رود. MaxUse= اولویت دارد. توجه داشته باشید که تخلیه‌های قدیمی حافظه هسته نیز بر اساس زمان از طریق systemd-tmpfiles(8) حذف می‌شوند. برای خاموش کردن پاک‌سازی مبتنی بر اندازه، هر یک از مقادیر را روی 0 تنظیم کنید.

در نگارش 215 اضافه شد.

از دستور

systemd-analyze cat-config systemd/coredump.conf

برای نمایش پیکربندی کامل استفاده کنید.

systemd-journald.service(8)، coredumpctl(1)، systemd-tmpfiles(8)

1.
💣💥🧨💥💥💣 لطفاً توجه داشته باشید که این فایل‌های پیکربندی باید همیشه در دسترس باشند. اگر /usr/local/ یک پارتیشن جداگانه باشد، ممکن است در مراحل اولیه بوت در دسترس نباشد و نباید برای پیکربندی استفاده شود.
systemd 261.2