E2FSCK.CONF(5) فایلهای پیکربندی E2FSCK.CONF(5)

e2fsck.conf - فایل پیکربندی برای ابزار بررسی سیستمفایل e2fsck

فایل e2fsck.conf رفتارهای پیشفرض دستور e2fsck را هنگام بررسی یا تعمیر سیستمفایلهای خانواده ext تنظیم میکند.

فایل e2fsck.conf از قالبی شبیه به INI استفاده می‌کند. بخش‌ها یا بندهای سطح بالا (stanzas) با قلاب‌ها مشخص می‌شوند: [ ]. در داخل هر بخش، هر خط یک رابطه را تعریف می‌کند که برچسب‌ها را به مقادیر اختصاص می‌دهد، یا یک زیربخش را مشخص می‌کند که خود شامل روابط یا زیربخش‌های بیشتری است.

نمونه‌ای از قالب به سبک INI که در این فایل پیکربندی استفاده می‌شود در زیر آمده است:

[section1]
	tag1 = value_a
	tag1 = value_b
	tag2 = value_c
[section 2]
	tag3 = {
		subtag1 = subtag_value_a
		subtag1 = subtag_value_b
		subtag2 = subtag_value_c
	}
	tag1 = value_d
	tag2 = value_e
}

توضیحات (کامنت‌ها) با کاراکتر نقطه‌ویرگول (';') یا هش ('#') در ابتدای خط مشخص می‌شوند و با کاراکتر پایان خط خاتمه می‌یابند.

برچسب‌ها و مقادیر در صورتی که حاوی فاصله باشند باید درون گیومه دوتایی قرار گیرند. در یک رشته درون گیومه، تفسیرهای استاندارد بک‌اسلش اعمال می‌شوند: "\n" (برای کاراکتر خط جدید)، "\t" (برای کاراکتر تب)، "\b" (برای کاراکتر فاصله‌برگردان یا backspace) و "\\" (برای کاراکتر بک‌اسلش).

بخش‌های زیر در فایل e2fsck.conf استفاده می‌شوند. این موارد با جزئیات بیشتر در بخش‌های بعدی این سند شرح داده خواهند شد:

[options]
این بخش شامل پارامترهای پیکربندی عمومی برای رفتار e2fsck است.
[defaults]
شامل روابطی است که پارامترهای پیش‌فرض مورد استفاده توسط e2fsck(8) را تعریف می‌کنند. به‌طور کلی، این پیش‌فرض‌ها را می‌توان توسط گزینه‌های خط فرمان ارائه‌شده توسط کاربر لغو کرد.
[problems]
این بخش به مدیر سیستم اجازه می‌دهد نحوه مدیریت ناهمخوانی‌های مختلف سیستم‌فایل توسط e2fsck را دوباره پیکربندی کند.
[scratch_files]
این بخش زمان تلاش e2fsck برای استفاده از فایل‌های موقت به منظور کاهش نیاز به حافظه را کنترل می‌کند.

روابط زیر در بخش [options] تعریف شده‌اند:

اگر این رابطه روی مقدار بولی true تنظیم شود، در صورتی که کاربر با کلیدهای ترکیبی ^C اجرای e2fsck را متوقف کند و سیستم‌فایل به صورت صریح حاوی خطا علامت‌گذاری نشده باشد، e2fsck با وضعیت خروج ۰ به‌جای ۳۲ خارج می‌شود. مقدار پیش‌فرض این تنظیم false است.
متأسفانه به دلیل تصمیم طراحی نادرست در ویندوز مبنی بر تنظیم ساعت سخت‌افزاری بر اساس ساعت محلی (localtime) به‌جای ساعت مناسب‌تر و کم‌خطاتر UTC، بسیاری از کاربران در شرایطی قرار می‌گیرند که ساعت سیستم هنگام اجرای e2fsck به نادرستی تنظیم شده است.
از نظر تاریخی، این موضوع معمولاً به دلیل وجود اسکریپت‌های راه‌اندازی (init) یا نصاب‌های دارای باگ در برخی توزیع‌ها رخ می‌داد که این وضعیت را به درستی شناسایی نکرده و تدابیر متقابل مناسب را اتخاذ نمی‌کردند. متأسفانه این مورد حتی امروزه نیز گهگاه رخ می‌دهد، معمولاً به دلیل یک مدیر مجازی‌سازی دارای نقص یا با پیکربندی نادرست، یا عدم دسترسی نصاب به سرور زمان شبکه در طول فرایند نصب. بنابراین، به‌طور پیش‌فرض، ما اجازه می‌دهیم زمان‌های ابربلوک (superblock) تا حداکثر ۲۴ ساعت نادیده گرفته و دستکاری (fudge) شوند. این رفتار را می‌توان با تنظیم accept_time_fudge روی مقدار بولی false غیرفعال کرد. مقدار پیش‌فرض این تنظیم true است.
برنامه e2fsck(8) دارای روش‌های اکتشافی است که فرض می‌کنند ساعت سیستم درست کار می‌کند. علاوه بر این، بسیاری از برنامه‌های سیستمی فرضیات مشابهی دارند. برای نمونه، کتابخانه UUID وابسته به این است که زمان به عقب برنگردد تا بتواند شناسه منحصربه‌فرد جهانی (UUID) تضمین‌شده صادر کند. سیستم‌های دارای ساعت خراب، مسلماً خراب کار می‌کنند! با این حال، ساعت‌های سیستمی خراب، به ویژه در سیستم‌های تعبیه‌شده (embedded)، وجود دارند. برنامه e2fsck تلاش می‌کند با استفاده از روش‌های اکتشافی تشخیص دهد که آیا زمان قابل اعتماد نیست یا خیر؛ و در صورت غیرقابل اعتماد بودن، از بررسی‌های مبتنی بر زمان صرف‌نظر کند. اگر این مقدار بولی روی true تنظیم شود، e2fsck همیشه فرض می‌کند که به ساعت سیستم نمی‌توان اعتماد کرد.
این رابطه بولی نام مستعاری برای accept_time_fudge جهت سازگاری با نسخه‌های پیشین است؛ در گذشته رفتار تعریف‌شده توسط accept_time_fudge به‌طور پیش‌فرض false بود و buggy_init_scripts اجازه می‌داد فیلد زمان ابربلوک تا ۲۴ ساعت نادرست باشد. هنگامی که مقدار پیش‌فرض تغییر یافت، نام این رابطه بولی نیز به accept_time_fudge تغییر پیدا کرد.
این رابطه بولی کنترل می‌کند که آیا e2fsck(8) در صورت در دسترس بودن سیستم‌فایل ext4 روی سیستم، پیشنهاد پاک کردن پرچم test_fs را بدهد یا خیر. مقدار پیش‌فرض آن true است.
این رابطه بولی کنترل می‌کند که در صورت کارکرد سیستم روی باتری، آیا بازه زمانی بین بررسی‌های سیستم‌فایل (چه بر اساس زمان و چه بر اساس تعداد سوار کردن‌ها) دو برابر شود یا خیر. مقدار پیش‌فرض این تنظیم true است.
هنگامی که e2fsck(8) یک دایرکتوری نمایه‌گذاری‌شده (indexed directory) را مجدداً بسته‌بندی (repack) می‌کند، درصد فضای خالی مشخص‌شده‌ای را در هر گره برگ (leaf node) رزرو می‌کند تا مدخل‌های جدید بدون نیاز به تقسیم شدن گره‌های برگ به دایرکتوری اضافه شوند، تا میانگین نسبت پر بودن دایرکتوری‌ها در سطح بالاتر و کارآمدتری حفظ شود. مقدار پیش‌فرض این رابطه ۲۰ درصد است.
اگر این رابطه بولی روی true باشد، هنگام بررسی سیستم‌فایلی با تعداد زیادی فایل دارای پیوند سخت (hard-linked)، سرعت را در ازای مصرف حافظه بیشتر ترجیح می‌دهد. میزان حافظه مورد نیاز متناسب با تعداد آی‌نودها در سیستم‌فایل است. برای سیستم‌فایل‌های بزرگ، این مقدار می‌تواند چندین گیگابایت حافظه باشد. (برای نمونه، یک سیستم‌فایل ۴۰ ترابایتی با ۲٫۸ میلیارد آی‌نود در صورت فعال بودن این بهینه‌سازی، حدود ۵٫۷ گیگابایت حافظه اضافی مصرف خواهد کرد.) مقدار پیش‌فرض این تنظیم false است.
اگر روابط log_filename یا problem_log_filename حاوی یک مسیر نسبی باشند، فایل گزارش در دایرکتوری مشخص‌شده توسط رابطه log_dir قرار خواهد گرفت.
این رابطه حاوی دایرکتوری جایگزینی است که در صورت در دسترس نبودن یا غیرقابل نوشتن بودن دایرکتوری مشخص‌شده در log_dir، استفاده خواهد شد.
اگر این رابطه بولی روی true تنظیم شود، در صورتی که دایرکتوری‌های مشخص‌شده توسط log_dir یا log_dir_fallback در دسترس نبوده یا هنوز قابل نوشتن نباشند، e2fsck خروجی را در یک بافر حافظه ذخیره می‌کند و یک فرایند فرزند به‌صورت دوره‌ای بررسی می‌کند تا ببیند آیا دایرکتوری گزارش پس از این‌که توالی بوت سیستم‌فایل مورد نظر را به‌صورت خواندن/نوشتن سوار کرد، در دسترس قرار گرفته است یا خیر. این قابلیت، رفتاری مشابه با عملکرد ارائه‌شده توسط logsave(8) برای فایل‌های گزارش e2fsck را پیاده‌سازی می‌کند.
این رابطه نام فایلی را مشخص می‌کند که نسخه‌ای از خروجی e2fsck در آن نوشته می‌شود. اگر برخی از گزارش‌های مشکل با استفاده از رابطه max_count_problems (یا به‌ازای هر مشکل با رابطه max_count) سرکوب شده باشند، مجموعه کامل گزارش‌های مشکل در فایل گزارش نوشته خواهد شد. نام فایل می‌تواند حاوی عبارات درصدی گوناگون (%D, %T, %N و غیره) باشد که بسط می‌یابند تا نام فایل گزارش شامل مواردی مانند تاریخ، زمان، نام دستگاه و سایر پارامترهای زمان اجرا شود. برای جزئیات بیشتر به بخش ثبت گزارش (LOGGING) مراجعه کنید.
این رابطه حداکثر تعداد گزارش‌های مربوط به یک نوع مشکل خاص را مشخص می‌کند که پیش از متوقف شدن گزارش‌های بعدی آن نوع، در خروجی استاندارد (stdout) چاپ می‌شوند. این قابلیت زمانی مفید است که کنسول کند باشد (مثلاً به یک پورت سریال متصل باشد) و حجم بالای خروجی موجب تأخیر طولانی (حتی ساعت‌ها) در فرایند بوت شود.
اگر این رابطه بولی روی true باشد، پیشنهاد بهینه‌سازی درخت اکستنت (extent tree) از طریق کاهش عرض یا عمق درخت داده نخواهد شد. مقدار پیش‌فرض این تنظیم false است.
این رابطه نام فایلی را مشخص می‌کند که گزارشی از کدهای مشکل یافت‌شده توسط e2fsck در آن نوشته می‌شود. نام فایل می‌تواند شامل عبارات درصدی گوناگون (%D, %T, %N و غیره) باشد که برای گنجاندن مواردی نظیر تاریخ، زمان، نام دستگاه و دیگر پارامترهای زمان اجرا بسط پیدا می‌کنند. برای اطلاعات بیشتر بخش ثبت گزارش (LOGGING) را ببینید.
استفاده از این درصد حافظه برای خواندن پیش‌دستانه (readahead) بلوک‌های متادیتا جلوتر از ریسه اصلی e2fsck. این کار باید زمان اجرا را بسته به سرعت فضای ذخیره‌سازی زیرین و مقدار حافظه آزاد کاهش دهد. مقدار پیش‌فرضی ندارد، اما برای جزئیات بیشتر به readahead_kb مراجعه کنید.
استفاده از این مقدار حافظه برای خواندن بلوک‌های متادیتا جلوتر از ریسه اصلی بررسی. تنظیم این مقدار روی صفر، خواندن پیش‌دستانه را به‌طور کامل غیرفعال می‌کند. به‌طور پیش‌فرض، این مقدار برابر با اندازه جدول‌های آی‌نود دو گروه بلوک تنظیم شده است (معمولاً ۴ مگابایت در یک سیستم‌فایل معمولی ext4)؛ اگر این مقدار بیش از ۱/۵۰ کل حافظه فیزیکی باشد، خواندن پیش‌دستانه غیرفعال می‌شود.
اگر این رابطه بولی true باشد، e2fsck ویژگی‌های سیستم‌فایل را به عنوان بخشی از گزارش پرجزئیات خود (یعنی اگر گزینه -v مشخص شده باشد) چاپ خواهد کرد.
اگر این رابطه بولی true باشد، e2fsck به گونه‌ای اجرا می‌شود که گویی گزینه‌های -tt همیشه مشخص شده‌اند. این امر باعث می‌شود e2fsck در هر مرحله (pass) از بررسی کامل سیستم‌فایل، آمارهای زمانی را چاپ کند.
اگر این رابطه بولی true باشد، e2fsck به گونه‌ای اجرا می‌شود که گویی گزینه -v همیشه مشخص شده است. این امر سبب می‌شود e2fsck در پایان هر بررسی کامل سیستم‌فایل، اطلاعات اضافی چاپ کند.

روابط زیر در بخش [defaults] تعریف شده‌اند:

این رابطه دایرکتوری محل ذخیره فایل لغو (undo) را مشخص می‌کند. این مقدار را می‌توان از طریق متغیر محیطی E2FSPROGS_UNDO_DIR بازنویسی کرد. اگر مکان دایرکتوری روی مقدار none تنظیم شود، e2fsck فایل لغو ایجاد نخواهد کرد.

هر تگ در بخش [problems] یک کد مشکل را نام‌گذاری می‌کند که با پیشوند "0x" و به دنبال آن شش رقم هگزادسیمال مشخص می‌شود. مقدار تگ یک زیربخش (subsection) است که در آن، روابط تعریف‌شده رفتار پیش‌فرض مربوط به آن کد مشکل خاص را بازنویسی (override) می‌کنند.

توجه داشته باشید که تنظیمات نامناسب در این بخش ممکن است باعث شود e2fsck رفتار نادرستی نشان دهد یا حتی دچار فروپاشی (crash) شود. اکثر مدیران سیستم نباید بدون مراجعه به کد منبع، تغییراتی در این بخش اعمال کنند.

درون زیربخش هر کد مشکل، تگ‌های زیر می‌توانند استفاده شوند:

این رابطه امکان بازنویسی پیامی را که هنگام تشخیص این ناهمخوانی در سیستم‌فایل چاپ می‌شود فراهم می‌کند.
این رابطه بولی رفتار پیش‌فرضی را بازنویسی می‌کند که مشخص می‌سازد آیا هنگام اجرای e2fsck در حالت preen (تعمیر خودکار امن)، این مشکل سیستم‌فایل باید به‌طور خودکار رفع شود یا خیر.
این رابطه عدد صحیح، پارامتر max_count_problems (تنظیم‌شده در بخش options) را برای این مشکل خاص بازنویسی می‌کند.
این رابطه بولی رفتار پیش‌فرضی را بازنویسی می‌کند که تعیین می‌نماید اگر کاربر از رفع مشکل گزارش‌شده صرف‌نظر کند، آیا سیستم‌فایل به عنوان ناهمخوان (inconsistent) علامت‌گذاری شود یا خیر.
این رابطه بولی مشخص می‌کند که آیا پاسخ پیش‌فرض برای این مشکل (یا پرسش) باید "no" باشد یا خیر.
این رابطه بولی رفتار پیش‌فرضی را بازنویسی می‌کند که مشخص می‌سازد هنگام اجرای e2fsck در حالت preen، آیا توضیحات مربوط به این مشکل سیستم‌فایل فرونشانده (مخفی) شود یا خیر.
این رابطه بولی رفتار پیش‌فرضی را بازنویسی می‌کند که تعیین می‌کند در شرایطی که مشکل وادار به عدم رفع شده باشد، آیا توضیحات مشکل سیستم‌فایل مخفی شود یا خیر؛ چه به این دلیل که e2fsck با گزینه -n اجرا شده باشد و چه به این دلیل که پرچم force_no برای آن مشکل تنظیم شده باشد.
این گزینه بولی، در صورت تنظیم روی true، یک مشکل را وادار می‌سازد که هرگز برطرف نشود. یعنی درست مثل این خواهد بود که کاربر در پاسخ به سؤال «آیا این مشکل رفع شود؟» پاسخ 'no' بدهد. گزینه force_no حتی گزینه -y داده‌شده در خط فرمان را نیز (تنها برای همین مشکل خاص) بازنویسی و لغو می‌کند.
این گزینه بولی، در صورت تنظیم روی true، مشکل را به گونه‌ای علامت‌گذاری می‌کند که اگر کاربر اجازه اعمال تغییر درخواستی را بدهد، به این معنی نیست که سیستم‌فایل مشکلی داشته که اکنون برطرف شده است. این مورد برای درخواست‌های بهینه‌سازی ساختار داده‌های سیستم‌فایل استفاده می‌شود، مانند هرس کردن درخت اکستنت (pruning an extent tree).

روابط زیر در بخش [scratch_files] تعریف شده‌اند:

اگر دایرکتوری نام‌برده‌شده در این رابطه وجود داشته و قابل نوشتن باشد، e2fsck تلاش خواهد کرد تا به‌جای استفاده از ساختارهای داده در حافظه، از این دایرکتوری برای ذخیره فایل‌های موقت (scratch files) استفاده کند.
اگر این رابطه تنظیم شود، در صورتی که تعداد دایرکتوری‌ها در سیستم‌فایل کمتر از مقدار مشخص‌شده باشد، از ساختارهای داده درون حافظه استفاده خواهد شد.
این رابطه کنترل می‌کند که آیا برای اطلاعات دایرکتوری، از دایرکتوری فایل‌های موقت به‌جای ساختار داده درون حافظه استفاده شود یا خیر. مقدار پیش‌فرض آن true است.
این رابطه کنترل می‌کند که آیا هنگام ردیابی تعداد آی‌نودها، از دایرکتوری فایل‌های موقت به‌جای ساختار داده درون حافظه استفاده شود یا خیر. مقدار پیش‌فرض آن true است.

برنامه e2fsck این امکان را دارد که اطلاعات مربوط به یک اجرای e2fsck را در یک دایرکتوری ذخیره کند تا مدیر سیستم بتواند خروجی آن را در فرصت مناسب بازبینی نماید. این کار اجازه می‌دهد اطلاعات ثبت‌شده در طول اجرای خودکار e2fsck در حالت preen، و همچنین اجرای دستی e2fsck، برای مراجعات بعدی نگهداری شود. این سازوکار توسط روابط log_filename، log_dir، log_dir_fallback و log_dir_wait در بخش [options] کنترل می‌شود.

نام فایل در log_filename می‌تواند حاوی عبارات درصدی زیر باشد که به شرح زیر بسط می‌یابند:

%d
روز جاری ماه
%D
تاریخ جاری؛ معادل %Y%m%d
%h
نام میزبان (hostname) سیستم.
%H
ساعت جاری در قالب ۲۴ ساعته (00..23)
%m
ماه جاری به‌صورت یک عدد دورقمی (01..12)
%M
دقیقه جاری (00..59)
%N
نام دستگاه بلوکی حاوی سیستم‌فایل، بدون مسیر دایرکتوری.
%p
شناسه فرایند (PID) مربوط به e2fsck.
%s
زمان جاری برحسب تعداد ثانیه‌های سپری‌شده از 00:00:00 UTC تاریخ 1970-01-01
%S
ثانیه جاری (00..59)
%T
زمان جاری؛ معادل %H%M%S
%u
نام کاربری که e2fsck را اجرا می‌کند.
%U
این عبارت درصدی به چیزی بسط نمی‌یابد، اما مشخص می‌کند که هر عبارت تاریخ یا زمان بعدی باید به‌جای منطقه زمانی محلی، بر اساس زمان UTC بیان شود.
%y
دو رقم آخر سال جاری (00..99)
%Y
سال جاری به‌صورت چهار رقمی (مانند 2012).

دستورالعمل زیر مانع از متوقف شدن e2fsck در طول فرایند بوت در هنگام مواجهه با سیستم‌فایل حاوی فایل‌های رهاشده (orphaned files) می‌شود. (البته این کار همیشه ایده خوبی نیست، زیرا فایل‌های حیاتی مورد نیاز برای امنیت سیستم ممکن است به پوشه lost+found منتقل شوند و بالا آمدن سیستم بدون بررسی اولیه توسط مدیر سیستم می‌تواند خطرناک باشد.)

[problems]
	0x040002 = {
		preen_ok = true
		description = "@u @i %i.  "
	}

دستورالعمل زیر باعث می‌شود که فایل گزارش e2fsck در دایرکتوری /var/log/e2fsck با نام فایلی که حاوی نام دستگاه، نام میزبان سیستم، تاریخ و زمان است نوشته شود؛ مانند: "e2fsck-sda3.server.INFO.20120314-112142". اگر دایرکتوری حاوی /var/log روی سیستم‌فایل ریشه قرار داشته باشد که در ابتدا به‌صورت فقط‌خواندنی سوار می‌شود، خروجی در حافظه نگهداری شده و پس از این‌که سیستم‌فایل ریشه مجدداً به‌صورت خواندن/نوشتن سوار شد، در دیسک ذخیره می‌شود. برای جلوگیری از ارسال جزئیات بیش از حد به کنسول سریال (که ممکن است فرایند بوت را کند کند)، از هر نوع خرابی سیستم‌فایل بیش از ۱۶ مورد چاپ نمی‌شود:

[options]
	max_count_problems = 16
	log_dir = /var/log/e2fsck
	log_filename = e2fsck-%N.%h.INFO.%D-%T
	log_dir_wait = true

/etc/e2fsck.conf
فایل پیکربندی برای e2fsck(8).

e2fsck(8)

مه ۲۰۲۵ e2fsprogs