WIUNIX ACADEMY
عیبیابی کمبود فضای دیسک و inode در لینوکس
صفحهٔ 2 از 2؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من4 مقدار قابلتغییر
قدم بعدی
فایل حذفشدهای را پیدا کنید که هنوز باز است
lsof فایلهایی را نشان میدهد که link count آنها کمتر از یک است ولی فرایندی هنوز آنها را باز نگه داشته است. DEVICE و NAME را با فایلسیستم هدف تطبیق دهید و PID، FD و inode را ثبت کنید.
عبارت deleted مجوز truncate نیست؛ فایل میتواند بخشی از دیتابیس، نگاشت حافظه یا وضعیت قابل بازیابی برنامه باشد. خروجی خالی، نداشتن مجوز و خطای ابزار یک معنا ندارند. SIZE/OFF نیز اندازهٔ منطقی یا offset است، نه اندازهٔ تخصیص واقعی.
ترمینال همان میزبان معرفیشده در توضیح گام
sudo lsof -nP +L1فایل نگهداشتهشده و فرایند صاحب آن مشخصاند؛ چند descriptor از یک inode را چند فایل مستقل حساب نکردهاید.
قدم بعدی
فرایند صاحب فایل را دقیق تطبیق دهید
1234 و 5 باید از خروجی همین بررسی آمده باشند. PID و descriptor ممکن است دوباره استفاده شوند؛ درست پیش از بررسی، نام فرایند، زمان شروع، cgroup و inode را تطبیق دهید. environment را بیدلیل چاپ نکنید چون ممکن است رمز و توکن داشته باشد.
در خروجی stat، تخصیص برابر blocks ضربدر block_bytes است. موارد تکراری را با دستگاه و inode حذف کنید. snapshot، extent مشترک و حسابداری بومی میتوانند این مقدار را از فضای فیزیکی واقعاً قابل آزادسازی متفاوت کنند. اگر descriptor ناپدید شد، شناسایی را تکرار کنید؛ عدد تازه را حدس نزنید.
ترمینال همان میزبان معرفیشده در توضیح گام
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، راهحل عمومی این آموزش نیست. این کارها ممکن است شواهد را از بین ببرند یا به برنامهٔ در حال اجرا آسیب بزنند.
قدم بعدی
سهم journal را جدا اندازه بگیرید
اگر journal سهم مهمی دارد، حسابداری خودش را ببینید. فایل لاگ برنامه و journal یک منبع واحد نیستند.
عملیات vacuum تاریخچهٔ آرشیوشده را حذف میکند و باید با سیاست نگهداری و نیاز رخداد سازگار باشد. وسط یک رخداد، سقف دلخواه تعیین نکنید. پنل زیر فقط اندازه میگیرد و هیچ سابقهای را پاک نمیکند.
ترمینال همان میزبان معرفیشده در توضیح گام
sudo journalctl --disk-usageحجم journal مشخص شده و تاریخچه دستنخورده مانده است.
قدم بعدی
هم آزادشدن فضا و هم کارکرد برنامه را تأیید کنید
بعد از آزادسازی یا افزایش ظرفیت از مسیر مجاز، همان فایلسیستم را دوباره اندازه بگیرید. کمشدن du بدون افزایش فضای آزاد df میتواند نشانهٔ باقیماندن فایل باز باشد.
فضای آزاد بهتنهایی ثابت نمیکند نوشتن برنامه یا تراکنش آن درست شده است. بررسی محدود سلامت و نوشتن/خواندن خود سرویس را هم انجام دهید و موارد حلنشده را در گزارش بنویسید.
ترمینال همان میزبان معرفیشده در توضیح گام
df -hT -- '/var'
df -i -- '/var'
sudo lsof -nP +L1ظرفیت و inode مطابق انتظار بهتر شدهاند و عملیات واقعی برنامه هم بررسی شده است؛ اگر علت مصرف فضا هنوز مشخص نیست، رفع مشکل را اعلام نکنید.
پایش را متناسب با علت تکمیل کنید
بایت آزاد، inode آزاد، سرعت رشد و نیاز بازیابی را با هم مانیتور کنید. hook بازکردن لاگ بعد از rotation و سیاست نگهداری خود برنامه را بررسی کنید. در ذخیرهسازی snapshotدار یا thin، ظرفیت pool زیربنایی هم مهم است.
این آموزش روش تشخیص مستند است و ادعای تعمیر عملی میزبان شما را ندارد. هر تصمیم پاکسازی باید به دادهٔ مشخص، مسئول مشخص و امکان بازیابی وصل باشد.
پشتوانهٔ این آموزش
منابع رسمی
وضعیت بررسی هر محیط بالای صفحه مشخص است؛ بررسی مستندات به معنی اجرای عملی همهٔ نسخهها نیست.
- گزارش فضای فایلسیستم با df
- اندازهگیری مصرف فایلها با du
- مستندات رسمی lsof
- تشخیص فایل حذفشده و بازمانده در مستندات Red Hat
- کنترل و بارگذاری دوبارهٔ پیکربندی Nginx
- بررسی مصرف و لاگ journal در systemd
- چرخهٔ پشتیبانی Ubuntu
- انتشارها و پشتیبانی Debian
- انتشارهای پشتیبانیشدهٔ Rocky Linux
- انتشارهای AlmaLinux
- امنیت شبکه و OpenSSH در RHEL 9
- امنیت شبکه در RHEL 10