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

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

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

بیایید بفهمیم.

آیا هارد دیسک شما واقعاً فضای کافی دارد؟

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

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

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

        sudo df -h .

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

        چرا لینوکس "فضای باقی نمانده در دستگاه" را نشان می دهد؟

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

        • پرونده اخیراً حذف شده: شایع ترین دلیل مشاهده این خطا، فایلی است که اخیراً حذف شده است. اغلب یک فایل در حالی که یک فرآیند هنوز در حال استفاده از آن است، حذف می‌شود، حتی اگر فایل قبلاً از بین رفته باشد، فضای رزرو شده حفظ می‌شود.
        • کفایی اینودها: یکی دیگر از دلایل رایج، نداشتن اینودها کافی است. Inode ها صفحات فهرست یک سیستم فایل یونیکس هستند که ابرداده هر فایل را در حافظه ذخیره می کنند. با این حال، اینودها نامحدود نیستند، و تمام شدن inode قبل از فضای ذخیره‌سازی می‌تواند به شما خطای «هیچ فضایی در دستگاه باقی نمانده» بدهد.
        • ناکارآمدی هارد دیسک: البته این احتمال وجود دارد که هارد دیسک به سادگی از کار بیفتد و بیشتر فضای خالی ظاهری توسط بخش های بد اشغال شده باشد. از آنجایی که سیستم نمی تواند هیچ فایلی را در این مکان ها بنویسد، خطا می دهد.
        • رفع 1: راه اندازی مجدد فرآیندها با استفاده از فایل های حذف شده

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

          1. برای یافتن فرآیند مشکل ساز، باید از دستورات lsof و grep استفاده کنید. دستور lsof لیستی از تمام فایل‌های باز که در فرآیندهای در حال اجرا استفاده می‌شوند را به شما می‌دهد و grep می‌تواند انتخاب را به فایل‌هایی که حذف می‌شوند محدود کند. بنابراین sudo lsof / | را وارد کنید grep حذف شدکه در آن / دایرکتوری پایه و | لوله ای برای اتصال خروجی lsof به grep.
            1. اکنون می‌توانید فرآیند آسیب‌دیده را با دستور sudo systemctl restart service_nameمجدداً راه‌اندازی کنید، جایی که نام سرویس، نام سرویسی است که در جستجو پیدا شد.
            2. .
              1. اگر چندین فرآیند مانند این وجود دارد یا نمی‌خواهید با یافتن سرویس‌های خاص خود را خسته کنید، می‌توانید همه آنها را با دستور sudo systemctl daemon-reloadبازنشانی کنید. این همه وابستگی ها را با در نظر گرفتن هرگونه تغییر در سیستم فایل بازسازی می کند.
              2. پس از این، فضای ذخیره‌سازی که توسط این فرآیند نگهداری می‌شود باید دوباره در دسترس باشد و به شما امکان می‌دهد فایل‌ها را بدون هیچ گونه خطا بنویسید.

                رفع 2: Inodes را بررسی کنید

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

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

                sudo df -i

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

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

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

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

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

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

                برای انجام این کار، باید از سی دی زنده بوت شوید، زیرا نمی‌توانید فایل سیستم را در یک درایو در حال اجرا انجام دهید. پس از انجام این کار، فقط از دستور زیر استفاده کنید:

                sudo fsck -vcck /dev/sda

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

                بهترین راه برای رفع خطای "No Space Left on Device" چیست؟

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

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

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

                .

                پست های مرتبط:


                30.08.2022