وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

خطای Disk quota exceeded با وجود فضای خالی؛ سهمیه لینوکس را چطور اصلاح کنیم؟

آموزش تشخیص سهمیه حجم و تعداد فایل در لینوکس، پیدا کردن مسیر و کاربر مسئول و انتخاب راه‌حل امن برای خطای Disk quota exceeded.

انتشار:
توسط تیم فنی نت‌آرام
۸ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله خطای Disk quota exceeded با وجود فضای خالی؛ سهمیه لینوکس را چطور اصلاح کنیم؟ در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
برنامه می‌خواهد فایلی ذخیره کند اما پیام Disk quota exceeded می‌دهد. شما فضای دیسک را نگاه می‌کنید و هنوز چند گیگابایت خالی می‌بینید. این دو نتیجه می‌توانند هم‌زمان درست باشند: فضای آزاد مربوط به کل فایل‌سیستم است، ولی برای یک کاربر، گروه یا پروژه ممکن است سهمیه جداگانه تعریف شده باشد.
این راهنما برای زمانی است که در لینوکس همین خطا را دیده‌اید و به SSH یا کنسول سرور دسترسی دارید. در هاست اشتراکی معمولاً لازم نیست دستور مدیریتی اجرا کنید؛ پایین‌تر راه مخصوص آن را هم توضیح می‌دهیم. هدف این است که اول مسیر و سهمیه درست را پیدا کنیم و بعد، بسته به علت، مصرف را کم کنیم یا از مدیر بخواهیم سقف را اصلاح کند.

تفاوت یک دیسک خالی و سهمیه پر را با مثال ببینیم

تصور کنید انباری ساختمان ۱۰۰ جعبه جا دارد، اما به هر واحد فقط ۱۰ جعبه اختصاص داده شده است. حتی اگر نیمی از انبار خالی باشد، واحدی که سهمیه ۱۰ جعبه‌ای خود را پر کرده نمی‌تواند جعبه یازدهم را بگذارد. سهمیه دیسک هم می‌تواند حجم داده، تعداد فایل‌ها یا هر دو را محدود کند.
سهمیه ممکن است برای کاربر، گروه یا پروژه اعمال شود. بنابراین موفق بودن ذخیره فایل توسط یک کاربر دیگر، ثابت نمی‌کند برنامه شما هم اجازه نوشتن دارد. به همین دلیل اجرا کردن برنامه با root برای دور زدن خطا راه‌حل مناسبی نیست؛ سطح دسترسی و مالکیت فایل‌ها را به‌هم می‌زند و علت اصلی را پنهان می‌کند.
پیام No space left on device الزاماً همین خطا نیست و می‌تواند به فضای کل یا تعداد inode فایل‌سیستم مربوط باشد. برای آن مسیر، راهنمای جداگانه خطای نبود فضای کافی را هم ببینید. عبارت دقیق خطا را نگه دارید؛ بدون آن نباید فوراً نتیجه بگیریم کدام محدودیت پر شده است.

قدم اول: مسیر واقعی خطا و کاربر برنامه را پیدا کنید

متن کامل خطا، زمان و نام برنامه را یادداشت کنید. برنامه ممکن است فایل را در پوشه موقت، پوشه آپلود یا محل متفاوتی از چیزی که در ذهن دارید ذخیره کند. اگر خطا مسیری مثل /srv/example/uploads را نشان می‌دهد، در دستورهای زیر همان مسیر واقعی را جایگزین کنید. مثال‌های این صفحه را بدون جایگزینی اجرا نکنید.
در ترمینال سرور، دو دستور زیر را روی پوشه موجودی که خطا داخل آن رخ می‌دهد اجرا کنید:
کد / دستورdf -hT /srv/example/uploads df -i /srv/example/uploads
دستور اول نوع فایل‌سیستم، فضای کل، مصرف‌شده و آزاد همان مسیر را نشان می‌دهد. دستور دوم تعداد inodeهای کل و آزاد همان فایل‌سیستم را گزارش می‌کند. اگر مسیر وجود ندارد، نزدیک‌ترین پوشه موجود در همان محل را استفاده کنید. بررسی / به‌تنهایی کافی نیست؛ ممکن است uploads یا پوشه موقت روی فایل‌سیستم جداگانه باشد.
اگر فضای آزاد یا inode همان فایل‌سیستم واقعاً تمام شده، ابتدا مسیر همان مشکل را دنبال کنید. اگر هر دو آزادند اما پیام مشخصاً Disk quota exceeded است، سهمیه یکی از مظنون‌های اصلی است. خروجی df وضعیت سهمیه تمام کاربران یا پروژه‌ها را به‌تنهایی نشان نمی‌دهد و در برخی سامانه‌های ذخیره‌سازی ممکن است نمایش آن به سیاست سهمیه وابسته باشد.

قدم دوم: ببینید کدام حساب می‌خواهد بنویسد

اگر خودتان از طریق SSH فایل را ذخیره می‌کنید، نام حساب فعلی را با دستور زیر ببینید:
کد / دستورwhoami
اما سایت یا یک سرویس ممکن است با کاربر دیگری اجرا شود. در آن صورت نام سرویس و مسیر خطا را به مدیر سرور بدهید تا کاربر فرایند و مالک فایل‌های مربوط را مشخص کند. نام مالک پوشه و نام کاربری که واقعاً فایل می‌سازد همیشه یکسان نیست؛ تغییر گسترده مالکیت با دستورهای بازگشتی بدون شناخت برنامه می‌تواند سایت را از کار بیندازد.
اگر دسترسی به مسیر دارید، این دستور مشخصات خود پوشه را نشان می‌دهد:
کد / دستورls -ld /srv/example/uploads
نام مالک و گروه در خروجی سرنخ‌اند، نه اثبات اینکه سهمیه کدام حساب پر است. اگر پیام به جای quota، خطای Permission denied نشان می‌دهد، باید مجوز و مالکیت درست بررسی شوند؛ زیاد کردن سهمیه آن مشکل را رفع نمی‌کند.

قدم سوم: سهمیه حساب را بخوانید

اگر ابزار quota روی سرور نصب و گزارش سهمیه برای حساب شما در دسترس است، با همان کاربر اجرا کنید:
کد / دستورquota -s
خروجی معمولاً برای هر فایل‌سیستم، مصرف فضای حساب و سقف‌های مرتبط را نشان می‌دهد و ممکن است بخش تعداد فایل یا inode هم داشته باشد. نمایش دقیق ستون‌ها به ابزار و پیکربندی بستگی دارد. دنبال همان فایل‌سیستمی بگردید که دستور df برای مسیر مشکل‌دار نشان داد؛ دیدن ردیف یک فایل‌سیستم دیگر به تنهایی کافی نیست.
به‌طور معمول soft حد نرم است: عبور از آن ممکن است برای مدت محدود مجاز باشد. hard سقف سخت است و پس از رسیدن به آن معمولاً نوشتن بیشتر مجاز نیست. ستون grace اگر وجود داشته باشد، به مهلت عبور از حد نرم مربوط است. مقدار صفر در بعضی گزارش‌ها به معنی «بدون سقف تعریف‌شده» است؛ شکل گزارش ابزار و تنظیمات سرور خود را ملاک قرار دهید، نه یک عدد جدا از بقیه ستون‌ها.
اگر دستور پیدا نشد، خروجی خالی بود یا دسترسی کافی نداشتید، نتیجه نگیرید که هیچ سهمیه‌ای وجود ندارد. ابزار ممکن است نصب نباشد، سهمیه به شکل دیگری مدیریت شود یا محدودیت از نوع گروه و پروژه باشد. در هاست مدیریت‌شده از پشتیبانی بخواهید سهمیه حساب و محل فایل را بررسی کند؛ لازم نیست برای دیدن خروجی، بسته‌ای را بدون هماهنگی روی سرور کاری نصب کنید.

برای مدیر سرور: وقتی فایل‌سیستم XFS است

در خروجی df ستون Type نوع فایل‌سیستم را نشان می‌دهد. اگر XFS است و ابزار و سهمیه‌های آن فعال‌اند، مدیر دارای دسترسی می‌تواند گزارش را روی نقطه اتصال همان فایل‌سیستم بخواند. مثلاً اگر نقطه اتصال واقعاً /home است:
کد / دستورsudo xfs_quota -x -c 'report -h' /home
این نمونه گزارش می‌گیرد و سقفی را تغییر نمی‌دهد. مسیر /home را فقط وقتی استفاده کنید که همان نقطه اتصال واقعی است؛ برای پیدا کردن آن می‌توانید خروجی df مسیر مشکل‌دار را بخوانید. در گزارش، سطر کاربر مربوط و ستون‌های Used، Soft و Hard را مقایسه کنید. اگر سهمیه گروه یا پروژه استفاده می‌شود، گزارش مناسب همان نوع لازم است؛ نداشتن حد در گزارش کاربران لزوماً این محدودیت‌ها را رد نمی‌کند. راهنمای رسمی سهمیه XFS تفاوت گزارش و تنظیم حد را توضیح می‌دهد.
اگر فرمان خطای فعال نبودن سهمیه داد، آن را در زمان عیب‌یابی خودکار فعال نکنید. روش فعال‌سازی به فایل‌سیستم و سیستم‌عامل وابسته است و ممکن است نیازمند تغییر تنظیمات و راه‌اندازی دوباره باشد. در سرور سی‌پنل هم سازگاری سهمیه سیستم‌عامل با تنظیمات کنترل‌پنل باید جداگانه بررسی شود.

قدم چهارم: راه‌حل را با علت هماهنگ کنید

اگر مصرف واقعاً به سقف رسیده است: فایل‌های متعلق به همان سرویس را با ابزار مدیریت برنامه یا پنل بررسی کنید. نسخه‌های پشتیبان یا خروجی‌های قدیمی را فقط پس از اطمینان از داشتن نسخه لازم و تأیید مالک داده جابه‌جا یا حذف کنید. پوشه پایگاه داده، صندوق ایمیل، فایل مشتری یا کش ناشناخته را صرفاً به‌خاطر بزرگ بودن پاک نکنید. اگر داده‌ها لازم‌اند، از مدیر بخواهید افزایش سهمیه را با توجه به فضای واقعی و سیاست سرویس بررسی کند.
اگر تعداد فایل‌ها به سقف رسیده ولی حجم کم است: مسیر تولید فایل‌های زیاد را شناسایی کنید؛ مثلاً ممکن است برنامه فایل موقت یا کش زیادی تولید کند. روش پاک‌سازی امن همان برنامه و جلوگیری از رشد دوباره را اجرا کنید. حذف یک فایل بزرگ لزوماً مشکل تعداد فایل را حل نمی‌کند.
اگر گزارش سهمیه با مصرف واقعی نمی‌خواند: زمان، نام فایل‌سیستم، نام حساب و خروجی‌ها را برای مدیر نگه دارید. ممکن است محدودیت گروه یا پروژه مطرح باشد یا محاسبه سهمیه نیاز به بررسی سازگار با فایل‌سیستم و کنترل‌پنل داشته باشد. بازسازی سهمیه، فعال‌سازی مجدد یا تغییر سراسری آن را به دستورهای ناشناخته نسپارید.
اگر روی هاست اشتراکی هستید: در cPanel صفحه اصلی و بخش Disk Usage را ببینید و مصرف فایل، ایمیل و بکاپ را جداگانه با مالک سرویس مرور کنید. اگر پنل افزایش سقف را ارائه می‌دهد، ابتدا ظرفیت پلن را در نظر بگیرید؛ در غیر این صورت مسیر و متن خطا را برای پشتیبانی بفرستید. فضای آزاد کل سرور میزبان، سهمیه حساب شما نیست.

از کجا بفهمیم مشکل برطرف شده است؟

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

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام