← شروع آموزش

WIUNIX ACADEMY

عیب‌یابی کمبود فضای دیسک و inode در لینوکس

صفحهٔ 2 از 2؛ مراحل قبلی و پیش‌نیازها را پیش از ادامه مرور کن.

آموزش متناسب با محیط تو

کجا اجرا می‌کنی؟

سیستم‌عامل و نسخه را انتخاب کن تا مراحل، دستورها و راه‌حل‌ها برای همان محیط نمایش داده شوند.

Ubuntu 26.04 LTSبررسی‌شده با مستندات رسمی ·

آموزش متناسب با مقادیر تو

تنظیمات این آموزش

مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر می‌کنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری می‌شوند و به سرور یا لینک اشتراک‌گذاری فرستاده نمی‌شوند. پیش از اجرا، DNS، گواهی‌ها و سیاست شبکهٔ واقعی را بررسی کن.

آی‌پی، دامنه یا پورت مثال‌ها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای به‌روز‌شده را کپی کن.

تنظیم مقادیر برای محیط من4 مقدار قابل‌تغییر
05

قدم بعدی

فایل حذف‌شده‌ای را پیدا کنید که هنوز باز است

lsof فایل‌هایی را نشان می‌دهد که link count آن‌ها کمتر از یک است ولی فرایندی هنوز آن‌ها را باز نگه داشته است. DEVICE و NAME را با فایل‌سیستم هدف تطبیق دهید و PID، FD و inode را ثبت کنید.

عبارت deleted مجوز truncate نیست؛ فایل می‌تواند بخشی از دیتابیس، نگاشت حافظه یا وضعیت قابل بازیابی برنامه باشد. خروجی خالی، نداشتن مجوز و خطای ابزار یک معنا ندارند. SIZE/OFF نیز اندازهٔ منطقی یا offset است، نه اندازهٔ تخصیص واقعی.

bash

ترمینال همان میزبان معرفی‌شده در توضیح گام

sudo lsof -nP +L1
از کجا بدانم درست انجام شد؟

فایل نگه‌داشته‌شده و فرایند صاحب آن مشخص‌اند؛ چند descriptor از یک inode را چند فایل مستقل حساب نکرده‌اید.

06

قدم بعدی

فرایند صاحب فایل را دقیق تطبیق دهید

1234 و 5 باید از خروجی همین بررسی آمده باشند. PID و descriptor ممکن است دوباره استفاده شوند؛ درست پیش از بررسی، نام فرایند، زمان شروع، cgroup و inode را تطبیق دهید. environment را بی‌دلیل چاپ نکنید چون ممکن است رمز و توکن داشته باشد.

در خروجی stat، تخصیص برابر blocks ضربدر block_bytes است. موارد تکراری را با دستگاه و inode حذف کنید. snapshot، extent مشترک و حسابداری بومی می‌توانند این مقدار را از فضای فیزیکی واقعاً قابل آزادسازی متفاوت کنند. اگر descriptor ناپدید شد، شناسایی را تکرار کنید؛ عدد تازه را حدس نزنید.

bash

ترمینال همان میزبان معرفی‌شده در توضیح گام

ps -p '1234' -o pid=,ppid=,user=,comm=,lstart=
sudo cat '/proc/1234/cgroup'
sudo lsof -nP -a -p '1234' +L1
sudo stat -L -c 'type=%F device=%d inode=%i size=%s blocks=%b block_bytes=%B links=%h' '/proc/1234/fd/5'
از کجا بدانم درست انجام شد؟

همان PID و FD هنوز به inode هدف اشاره می‌کنند و اندازهٔ منطقی از تخصیص جدا ثبت شده است.

آزادسازی را به مسئول همان سرویس بسپارید

برای لاگ واقعاً قابل دورریختن، پس از rotation از روش مستند بازکردن دوبارهٔ فایل استفاده کنید؛ در Nginx این کار با USR1 انجام می‌شود و الزاماً به restart کامل نیاز ندارد. برای وضعیت دیگر، توقف یا راه‌اندازی مجدد باید با برنامهٔ بازیابی خود اپلیکیشن انجام شود.

نوشتن مستقیم روی descriptor، حذف فایل دیتابیس، پاک‌کردن همهٔ cacheها یا تغییر reserve، راه‌حل عمومی این آموزش نیست. این کارها ممکن است شواهد را از بین ببرند یا به برنامهٔ در حال اجرا آسیب بزنند.

07

قدم بعدی

سهم journal را جدا اندازه بگیرید

اگر journal سهم مهمی دارد، حسابداری خودش را ببینید. فایل لاگ برنامه و journal یک منبع واحد نیستند.

عملیات vacuum تاریخچهٔ آرشیوشده را حذف می‌کند و باید با سیاست نگهداری و نیاز رخداد سازگار باشد. وسط یک رخداد، سقف دلخواه تعیین نکنید. پنل زیر فقط اندازه می‌گیرد و هیچ سابقه‌ای را پاک نمی‌کند.

bash

ترمینال همان میزبان معرفی‌شده در توضیح گام

sudo journalctl --disk-usage
از کجا بدانم درست انجام شد؟

حجم journal مشخص شده و تاریخچه دست‌نخورده مانده است.

08

قدم بعدی

هم آزادشدن فضا و هم کارکرد برنامه را تأیید کنید

بعد از آزادسازی یا افزایش ظرفیت از مسیر مجاز، همان فایل‌سیستم را دوباره اندازه بگیرید. کم‌شدن du بدون افزایش فضای آزاد df می‌تواند نشانهٔ باقی‌ماندن فایل باز باشد.

فضای آزاد به‌تنهایی ثابت نمی‌کند نوشتن برنامه یا تراکنش آن درست شده است. بررسی محدود سلامت و نوشتن/خواندن خود سرویس را هم انجام دهید و موارد حل‌نشده را در گزارش بنویسید.

bash

ترمینال همان میزبان معرفی‌شده در توضیح گام

df -hT -- '/var'
df -i -- '/var'
sudo lsof -nP +L1
از کجا بدانم درست انجام شد؟

ظرفیت و inode مطابق انتظار بهتر شده‌اند و عملیات واقعی برنامه هم بررسی شده است؛ اگر علت مصرف فضا هنوز مشخص نیست، رفع مشکل را اعلام نکنید.

پایش را متناسب با علت تکمیل کنید

بایت آزاد، inode آزاد، سرعت رشد و نیاز بازیابی را با هم مانیتور کنید. hook بازکردن لاگ بعد از rotation و سیاست نگهداری خود برنامه را بررسی کنید. در ذخیره‌سازی snapshotدار یا thin، ظرفیت pool زیربنایی هم مهم است.

این آموزش روش تشخیص مستند است و ادعای تعمیر عملی میزبان شما را ندارد. هر تصمیم پاک‌سازی باید به دادهٔ مشخص، مسئول مشخص و امکان بازیابی وصل باشد.

پشتوانهٔ این آموزش

منابع رسمی

وضعیت بررسی هر محیط بالای صفحه مشخص است؛ بررسی مستندات به معنی اجرای عملی همهٔ نسخه‌ها نیست.

همهٔ آموزش‌های آکادمی ↗