3 روش برتر برای رفع خطای “No Space Left on Device” در لینوکس

خطاهای بدون دلیل مشخص، آزاردهنده ترین مشکلاتی هستند که باید با آنها برخورد کرد. و در حالی که لینوکس(Linux) معمولاً در پیام های خطای خود خاص است، این یکی از معدود مواردی است که توپ را رها می کند.

دریافت خطای «هیچ مکان در دستگاه باقی نمانده» توضیح بسیار کمی دارد، به خصوص اگر درایو شما کاملاً پر نباشد. چرا این پیغام خطا نمایش داده می شود؟ چرا با وجود فضای کافی روی دیسک نمی توانید فایل های جدیدی ایجاد کنید؟ و از همه مهمتر، چگونه آن را برطرف می کنید؟

بیایید دریابیم.

آیا هارد دیسک شما واقعاً فضای کافی دارد(Hard Drive Actually Have Enough Space) ؟

قبل از اینکه برای یافتن راه حل عجله کنید، برای شروع مطمئن شوید که مشکلی وجود دارد. پس از همه، اگر فضای دیسک واقعاً روی سیستم شما تمام شده است، نیازی به وحشت نیست. فقط می توانید داده های غیر ضروری را حذف کنید تا فضای بیشتری آزاد کنید.

دو دستور سیستم لینوکس(Linux) برای دریافت اطلاعات در مورد فضای دیسک وجود دارد - du و df. دستور du میزان استفاده از فضای دیسک را تخمین می زند، در حالی که دستور df فضای خالی موجود روی دیسک را تجزیه و تحلیل می کند. استفاده از آنها در ارتباط با sudo به شما گزارش دقیقی از میزان فضای موجود بر روی دیسک می دهد.

  1. بیایید با دستور du شروع کنیم. خروجی آن می تواند نسبتا طولانی و دشوار باشد، بنابراین ما از پرچم های -s و -h استفاده خواهیم کرد. -s نتایج را خلاصه می کند، در حالی که -h تضمین می کند که قابل خواندن توسط انسان است. بنابراین دستور sudo du -sh / Where / را به دایرکتوری پایه وارد کنید.

  1. نگران تمام پیام‌های رد شده از مجوز نباشید – اینگونه است که در تمام زیر شاخه‌های سیستم می‌گذرد. بسته به اندازه درایو، ممکن است مجبور شوید آن را برای مدتی فعال نگه دارید، زیرا به صورت بازگشتی از همه چیز عبور می کند.

  1. پس از پایان یافتن اسکن، فهرست ساده ای از دایرکتوری ها را در کنار اندازه آنها به نمایش می گذارد. به عنوان مثال، این خروجی دستور du است که در یک دایرکتوری معمولی اعمال می شود.

حالا از df استفاده می کنیم تا ببینیم چقدر فضای خالی در دسترس است. استفاده از دستور df بسیار ساده تر است زیرا فقط فایل سیستم های نصب شده و آمار استفاده از آنها را نشان می دهد. یک بار دیگر، ما از پرچم -h برای خوانا کردن خروجی توسط انسان استفاده خواهیم کرد.

sudo df -h

ایده این است که نتایج دستورات du و df را محاسبه کنید. هر گونه اختلاف به فضای دیسکی اشاره دارد که علیرغم اینکه توسط هیچ فایل یا پوشه ای استفاده نمی شود، آزادانه در دسترس نیست.

چرا لینوکس(Does Linux Show) « فضایی باقی نمانده(Space Left) در دستگاه» را نشان می دهد؟

اگر با وجود داشتن فضای خالی کافی روی دیسک، پیام خطای «No Space Left on Device» را می‌بینید، این سخت‌افزار مقصر نیست. پی بردن به علت دقیق خطا می تواند کمی به عیب یابی نیاز داشته باشد.

  • Recently Deleted File: شایع ترین دلیل مشاهده این خطا فایلی است که اخیراً حذف شده است. اغلب یک فایل در حالی که یک فرآیند هنوز از آن استفاده می کند حذف می شود، حتی اگر فایل قبلاً از بین رفته باشد، فضای رزرو شده حفظ می شود.
  • نداشتن ایند به اندازه کافی(Enough Inodes) : یکی دیگر از علل شایع، نداشتن اینود(inodes) کافی است. Inode ها صفحات فهرست یک سیستم فایل یونیکس(Unix) هستند که ابرداده هر فایل را در حافظه ذخیره می کنند. با این حال، inode ها نامحدود نیستند و تمام شدن inode ها قبل از فضای ذخیره سازی می تواند به شما خطای "No space left on device" بدهد.
  • خرابی هارد(Hard) دیسک: البته این احتمال وجود دارد که هارد دیسک به سادگی از کار بیفتد و قسمت اعظم فضای خالی ظاهری توسط بخش های خراب اشغال شود. از آنجایی که سیستم نمی تواند هیچ فایلی را در این مکان ها بنویسد، خطا می دهد.

راه‌حل 1: فرآیندها را با استفاده از فایل‌های حذف شده راه‌اندازی مجدد کنید(Using Deleted Files)

محتمل‌ترین علت خطای «هیچ فضایی در دستگاه باقی نمانده» فرآیندی است که همچنان از یک فایل حذف شده استفاده می‌کند. خوشبختانه، رفع این خطا آسان است. برای آزاد کردن فضای ذخیره شده، فقط باید فرآیند را مجدداً راه اندازی کنید .(restart the process)

  1. برای یافتن فرآیند مشکل ساز، باید از دستورات lsof و grep استفاده کنید. دستور lsof لیستی از تمام فایل‌های باز که در فرآیندهای در حال اجرا استفاده می‌شوند را به شما می‌دهد و grep می‌تواند انتخاب را به فایل‌هایی که حذف می‌شوند محدود کند. بنابراین sudo lsof / | را وارد کنید grep حذف شد که / دایرکتوری پایه است و | لوله ای برای اتصال خروجی lsof به grep.

  1. اکنون می‌توانید فرآیند آسیب‌دیده را با دستور sudo systemctl restart service_name مجدداً راه‌اندازی کنید، جایی که نام سرویس، نام سرویسی است که در جستجو پیدا شد.

  1. اگر چندین فرآیند مانند این وجود دارد یا نمی‌خواهید برای یافتن سرویس‌های خاص خود را خسته کنید، می‌توانید همه آنها را با دستور sudo systemctl daemon-reload مجدداً تنظیم کنید. این همه وابستگی ها را با در نظر گرفتن هرگونه تغییر در سیستم فایل بازسازی می کند.

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

راه حل 2: Inodes را بررسی کنید

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

با استفاده از پرچم -i با دستور df می توانید به راحتی در دسترس بودن inode ها را بررسی کنید. مثل این:

sudo df -i

این به وضوح تعداد کل inode های موجود در فایل سیستم را به همراه مقداری که در حال حاضر استفاده می شود نشان می دهد. اگر هیچ inode رایگان در سیستم شما باقی نمانده است، این منبع خطای "No space left on device" است.

از آنجایی که اینودها تنها پس از فرمت کردن درایو ایجاد می شوند، راهی برای تولید inode های بیشتر وجود ندارد. تنها کاری که می‌توانید انجام دهید این است که فایل‌های غیرضروری را حذف کنید تا inode برای فایل‌های آینده آزاد شود.

راه حل 3: بلوک های بد را علامت گذاری کنید

خرابی داده ها(Data) سرنوشت اجتناب ناپذیر هر هارد دیسک است. در حالی که یک درایو جدید با این مشکل مواجه نمی شود، هارد دیسک های قدیمی به تدریج شروع به "بد" شدن می کنند.

این بدان معناست که بخش‌هایی از هارد دیسک غیرقابل استفاده می‌شوند، حتی اگر سیستم فایل هنوز آنها را کاربردی می‌داند. این بلوک های بد به طور کاذب فضای آزاد ظاهری درایو را افزایش می دهند، در حالی که در حقیقت هیچ فایلی نمی تواند برای آنها نوشته شود. این منجر به خطای "No space left on device" می شود، زیرا سیستم عامل سعی می کند داده ای را در این مکان ها ذخیره کند.

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

برای انجام این کار، باید از یک سی دی زنده(Live CD) بوت شوید، زیرا نمی توانید فایل سیستم(File System Check) را در یک درایو در حال اجرا انجام دهید. پس از انجام این کار، فقط از دستور زیر استفاده کنید:

sudo fsck -vcck /dev/sda

این مسیر /dev/sda را با مسیر درایوی که می خواهید تعمیر کنید جایگزین می کند. این به طور خودکار تمام بلوک های خراب درایو را شناسایی می کند و آنها را غیرقابل استفاده علامت گذاری می کند. با این حال، ظرفیت ذخیره‌سازی اضافی به شما نمی‌دهد، بنابراین آماده باشید که برخی از فایل‌های بی‌فایده را برای آزاد کردن فضای درایو پاک کنید.

بهترین راه برای رفع خطای «هیچ فضایی در دستگاه باقی نمانده» چیست؟

دلیل معمول برای مشاهده خطای "No space left on device" در اوبونتو(Ubuntu) یا هر توزیع دیگر لینوکس(Linux) ، یک فایل حذف شده است که هنوز توسط یک فرآیند در حال اجرا استفاده می شود. این ذخیره سازی را که فایل اشغال کرده بود ذخیره می کند و از نوشتن داده ها در آن فضا توسط سایر عملیات جلوگیری می کند.

رفع این مشکل نیز ساده ترین است، زیرا تنها کاری که باید انجام دهید این است که فرآیند مورد نظر را مجدداً راه اندازی کنید. با این حال، دلایل دیگر خطا به راحتی قابل حل نیستند.

چه درایو شما با بلوک‌های داده بد گرفتار شده باشد یا inode تمام شده باشد، هیچ راه مستقیمی برای رفع این مشکلات وجود ندارد. باید فایل های موجود را حذف کنید تا فضا برای نوشتن داده های جدید باز شود.



About the author

من یک متخصص کامپیوتر با بیش از 10 سال تجربه هستم و در کمک به افراد در مدیریت کامپیوترهایشان در دفترشان تخصص دارم. من مقالاتی در مورد موضوعاتی مانند نحوه بهینه سازی اتصال اینترنت خود، نحوه راه اندازی رایانه برای بهترین تجربه بازی و موارد دیگر نوشته ام. اگر در مورد هر چیزی که مربوط به کار یا زندگی شخصی خود است به دنبال کمک هستید، من آن شخص برای شما هستم!



Related posts