اگر هنگام اجرای apt update، نصب بهروزرسانی یا ساختن initramfs با خطای No space left on device در مسیر /boot روبهرو شدهاید، معمولاً مشکل از جمع شدن چند کرنل قدیمی Ubuntu است. راهحل امن این نیست که فایلهای داخل /boot را دستی حذف کنید؛ ابتدا باید کرنل در حال اجرا و کرنلهای نصبشده را شناسایی کنید و سپس بستههای قدیمی را از طریق APT حذف کنید.
خلاصه راهحل: ابتدا با df -h /boot وضعیت را بررسی کنید، سپس با uname -r کرنل فعال را مشخص کنید. بعد کرنلهای نصبشده را ببینید و در صورت امکان sudo apt autoremove –purge را اجرا کنید. کرنل در حال اجرا را هرگز برای خالی کردن /boot حذف نکنید.
چرا /boot در Ubuntu پر میشود؟
در Ubuntu فایلهایی که برای راهاندازی سیستم لازم هستند در مسیرهایی مانند /boot قرار میگیرند. بستههای کرنل فقط شامل یک فایل کوچک نیستند و ممکن است فایلهایی مانند Image کرنل، initramfs، فایلهای System.map و ماژولهای مربوط به هر نسخه نیز روی سیستم باقی بمانند.
اگر چند بار کرنل Ubuntu بهروزرسانی شود، نسخههای قدیمی میتوانند فضای پارتیشن /boot را مصرف کنند. این موضوع در سیستمهایی که /boot پارتیشن جداگانه و کمحجمی دارد، زودتر خودش را نشان میدهد.
در مستندات Ubuntu نیز مدیریت کرنلهای قدیمی بهعنوان یکی از دلایل مهم آزادسازی فضای /boot مطرح شده است. APT در تنظیمات جدید خود کرنل در حال اجرا و یک کرنل دیگر را بهصورت پیشفرض در برابر autoremove محافظت میکند. مستندات apt.conf در Ubuntu جزئیات این رفتار را توضیح میدهد.
این آموزش برای کدام نسخههای Ubuntu است؟
مسیر اصلی این آموزش برای Ubuntu Server و Desktop مبتنی بر نسخههای جدید LTS طراحی شده است. در زمان بازبینی این مقاله، Ubuntu 22.04 LTS، Ubuntu 24.04 LTS و Ubuntu 26.04 LTS در چرخه پشتیبانی استاندارد قرار دارند. Ubuntu 20.04 LTS از پایان پشتیبانی استاندارد عبور کرده و برای دریافت پوشش امنیتی توسعهیافته به Ubuntu Pro نیاز دارد.
🔹 Ubuntu 22.04 LTS
🔹 Ubuntu 24.04 LTS
🔹 Ubuntu 26.04 LTS
🔹 Ubuntu 20.04 LTS فقط با توجه به وضعیت پشتیبانی و Ubuntu Pro/ESM
اگر سرور شما نسخه بسیار قدیمی Ubuntu دارد، قبل از حذف کرنلها بهتر است وضعیت پشتیبانی سیستمعامل را نیز بررسی کنید. صفحه رسمی چرخه انتشار Ubuntu وضعیت نسخهها را بهروز نگه میدارد.
قبل از شروع چه چیزهایی لازم داریم؟
برای این آموزش به یک Ubuntu دارای دسترسی مدیریتی نیاز دارید. در حالت عادی اتصال SSH کافی است. اگر SSH به دلیل مشکل دیسک یا فرآیند بهروزرسانی خراب شده است، از Console، KVM، VNC یا کنسول ارائهدهنده VPS استفاده کنید.
⚠️ هشدار: حذف کرنل یک عملیات سیستمی است. قبل از حذف هر نسخه، حتماً نسخهای را که سیستم در حال حاضر با آن اجرا شده است با uname -r مشخص کنید. این نسخه نباید هدف حذف قرار بگیرد.
مرحله ۱: بررسی کنید /boot واقعاً پر است
ابتدا مشخص کنید مشکل مربوط به پارتیشن جداگانه /boot است یا کل دیسک سرور. این مرحله فقط اطلاعات سیستم را نمایش میدهد و تغییری ایجاد نمیکند.
df -h /boot
اگر خروجی نشان دهد درصد استفاده بسیار بالا است، مثلاً 99% یا 100%، احتمال کمبود فضای /boot وجود دارد.
برای مشاهده فایلهای موجود در /boot نیز میتوانید از این دستور استفاده کنید:
ls -lh /boot
وجود فایلهایی مانند vmlinuz-… و initrd.img-… برای چند نسخه مختلف کرنل طبیعی است. هدف این مقاله حذف انتخابی نسخههای قدیمی از طریق سیستم مدیریت بسته است، نه حذف مستقیم این فایلها.
مرحله ۲: کرنل در حال اجرای Ubuntu را پیدا کنید
مهمترین بررسی قبل از حذف کرنل همین مرحله است. دستور زیر نسخه کرنلی را نشان میدهد که سیستم همین حالا با آن اجرا شده است.
uname -r
فرض کنید خروجی نمونه به شکل زیر باشد:
6.8.0-XX-generic
این فقط یک نمونه است. نسخه واقعی را از خروجی سرور خودتان بردارید. تا پایان عملیات، این نسخه را بهعنوان کرنل فعال در نظر بگیرید و برای حذف انتخاب نکنید.
مرحله ۳: همه کرنلهای نصبشده را ببینید
حالا باید بدانیم چه بستههایی واقعاً نصب شدهاند. دستور زیر بستههای Image کرنل را از پایگاه داده dpkg نمایش میدهد:
dpkg -l 'linux-image*' | grep '^ii'
برای دیدن بستههای مرتبط با Header نیز میتوانید این دستور را اجرا کنید:
dpkg -l 'linux-headers*' | grep '^ii'
در خروجی ممکن است چند نسخه مختلف ببینید. داشتن چند کرنل لزوماً مشکل نیست؛ مشکل زمانی ایجاد میشود که تعداد نسخههای قدیمی زیاد شده یا پارتیشن کوچک /boot دیگر فضای کافی برای نصب کرنل جدید ندارد.
مرحله ۴: راهحل اصلی؛ حذف خودکار بستههای غیرضروری
اگر APT سالم است و فضای کافی برای اجرای عملیات مدیریت بسته وجود دارد، سادهترین مسیر استفاده از autoremove است. Ubuntu از APT برای مدیریت بستههای سیستم استفاده میکند و autoremove بستههایی را که دیگر مورد نیاز وابستگیهای نصبشده نیستند، شناسایی میکند.
sudo apt autoremove --purge
قبل از تأیید نهایی، فهرست بستههایی که APT قصد حذف آنها را دارد بخوانید. اگر کرنل فعال یا بستهای که برای ادامه بوت سیستم ضروری است در فهرست حذف قرار گرفته است، عملیات را تأیید نکنید و ابتدا وضعیت بستهها را بررسی کنید.
📌 نکته: APT در تنظیمات جدید خود مکانیزم محافظت از کرنلها دارد و بهصورت پیشفرض حداقل کرنل در حال اجرا و یک کرنل دیگر را نگه میدارد. بنابراین استفاده از autoremove معمولاً از حذف دستی فایلهای /boot امنتر است.
اگر autoremove کرنلهای قدیمی را حذف نکرد چه کنیم؟
گاهی یک کرنل قدیمی بهعنوان بستهای که بهصورت دستی نصب شده علامتگذاری شده است. در این حالت APT ممکن است آن را بهعنوان بسته غیرضروری تشخیص ندهد.
ابتدا بررسی کنید چه بستههایی بهصورت دستی علامتگذاری شدهاند:
apt-mark showmanual | grep -E '^linux-(image|headers|modules)'
اگر مشخص شد یک نسخه قدیمی بهصورت دستی علامتگذاری شده و مطمئن هستید به آن نیاز ندارید، قبل از تغییر وضعیت آن باید نسخه فعال و یک نسخه پشتیبان قابل بوت را در نظر بگیرید.
در چنین شرایطی تغییر وضعیت یک بسته مشخص به حالت خودکار میتواند باعث شود APT در اجرای بعدی autoremove آن را بررسی کند. این کار باید فقط روی نسخهای انجام شود که با uname -r یکسان نیست.
sudo apt-mark auto PACKAGE_NAME
بهجای PACKAGE_NAME فقط نام دقیق بستهای را قرار دهید که بررسی کردهاید و مطمئن هستید نسخه فعال سیستم نیست. سپس دوباره فهرست عملیات autoremove را بررسی کنید.
اگر /boot آنقدر پر است که APT خطا میدهد
این حالت حساستر است. ممکن است بهروزرسانی کرنل نیمهکاره مانده باشد و پیامهایی مانند No space left on device، خطای ساخت initramfs یا خطای پیکربندی بستهها مشاهده کنید.
اول وضعیت بستهها را ببینید و هنوز هیچ فایل کرنلی را با rm حذف نکنید:
df -h /boot
uname -r
dpkg -l 'linux-image*' | grep -E '^(ii|iU|iF|rc)'
sudo dpkg --audit
اگر فضای کافی برای اجرای APT وجود دارد، ابتدا یک نسخه قدیمی و غیر فعال را از طریق بسته آن حذف کنید. نام دقیق بسته باید از خروجی dpkg -l به دست بیاید.
⚠️ بسیار مهم: هرگز فقط با دیدن نام فایل در /boot تصمیم به حذف آن نگیرید. فایل کرنل ممکن است بخشی از یک بسته باشد و حذف دستی آن میتواند وضعیت بستهها و فرآیند بهروزرسانی را ناسازگار کند.
پاکسازی دستی بسته یک کرنل قدیمی؛ فقط در شرایط اضطراری
اگر APT به دلیل پر بودن /boot نمیتواند عملیات عادی حذف را انجام دهد، ممکن است لازم باشد یک کرنل قدیمی را با ابزار پایینتر یعنی dpkg حذف کنید. این روش برای زمانی است که ابتدا یک کرنل قدیمی و غیر فعال را شناسایی کردهاید و APT به دلیل وضعیت خراب بستهها نمیتواند کار را انجام دهد.
ابتدا نسخه فعال را دوباره ثبت کنید:
uname -r
سپس نسخههای نصبشده را بررسی کنید:
dpkg -l | grep -E '^ii.*linux-(image|modules|headers)'
اگر مثلاً یک نسخه قدیمی مشخص شد، نام دقیق بستههای همان نسخه را از خروجی استخراج کنید. بستهها ممکن است بسته به نوع کرنل و نسخه Ubuntu شامل linux-image، linux-modules، linux-modules-extra و linux-headers باشند.
حذف باید با نام دقیق بسته انجام شود؛ از الگوهای مبهم یا حذف گروهی بدون بررسی استفاده نکنید:
sudo dpkg --purge EXACT_PACKAGE_NAME
اگر dpkg اعلام کرد بسته دیگری به همان نسخه وابسته است، پیام خطا را بخوانید و فقط بستههای همان کرنل قدیمی را بررسی کنید. نسخه فعال را وارد این فرمان نکنید.
مستندات Ubuntu نیز برای وضعیتهای اضطراری ناشی از پر شدن /boot، شناسایی کرنل فعال با uname -r و حذف بسته کرنل قدیمی را مطرح میکند؛ با این حال این مسیر باید آخرین گزینه قبل از بازگرداندن APT به وضعیت عادی باشد.
مرحله بعد: تعمیر وضعیت APT و dpkg
بعد از اینکه فضای کافی در /boot ایجاد شد، باید بررسی کنیم عملیات بهروزرسانی قبلی نیمهکاره نمانده باشد.
ابتدا وضعیت dpkg را تکمیل کنید:
sudo dpkg --configure -a
اگر خطای وابستگی باقی مانده است، مرحله بعد را اجرا کنید:
sudo apt-get -f install
بعد از اینکه وضعیت بستهها اصلاح شد، دوباره autoremove را بررسی کنید:
sudo apt autoremove --purge
مرحله ۵: مطمئن شوید فضای /boot آزاد شده است
حالا دوباره وضعیت پارتیشن را بررسی کنید:
df -h /boot
سپس فهرست فایلهای بوت را بررسی کنید:
ls -lh /boot
وجود یک یا چند نسخه کرنل بعد از پاکسازی طبیعی است. هدف حذف همه کرنلها نیست؛ هدف حذف نسخههای غیرضروری و آزاد کردن فضای مورد نیاز برای بهروزرسانیهای بعدی است.
بررسی نهایی بستههای کرنل
برای اینکه ببینید چه کرنلهایی هنوز نصب هستند، دوباره فهرست بستهها را بگیرید:
dpkg -l 'linux-image*' | grep '^ii'
در این مرحله باید بتوانید نسخهای را که uname -r نشان میدهد با یکی از بستههای نصبشده تطبیق دهید. اگر یک کرنل قبلی نیز باقی مانده باشد، حذف آن الزامی نیست؛ نگه داشتن یک نسخه قبلی میتواند برای بازگشت در صورت مشکل کرنل جدید مفید باشد.
مرحله ۶: بررسی کنید بهروزرسانی بعدی کرنل امکانپذیر است
اگر مشکل شما بعد از یک بهروزرسانی ناقص ایجاد شده بود، اکنون میتوانید فهرست بستهها را بهروزرسانی کنید:
sudo apt update
اگر این مرحله بدون خطای مربوط به فضای /boot انجام شد، میتوانید وضعیت بستههای قابل ارتقا را بررسی کنید:
apt list --upgradable
در این مقاله عمداً اجرای اجباری یک ارتقای کامل سیستم را پیشنهاد نمیکنیم. اگر هدف شما فقط رفع کمبود فضای /boot بوده، ابتدا همان مشکل را برطرف و وضعیت بستهها را سالم کنید.
آیا بعد از حذف کرنل باید سرور را ریاستارت کنیم؟
حذف یک کرنل قدیمی بهتنهایی معمولاً نیازمند ریاستارت فوری نیست. با این حال اگر یک کرنل جدید نصب شده یا فرآیند بهروزرسانی کرنل تکمیل شده است، بهتر است زمان مناسب برای ریاستارت را مشخص کنید.
قبل از ریاستارت، نسخه فعلی را ثبت کنید:
uname -r
بعد از ریاستارت، دوباره همین دستور را اجرا کنید. اگر قصد شما استفاده از کرنل جدید بوده، باید نسخه جدید را مشاهده کنید.
sudo reboot
⚠️ برای VPS: اگر سرور سرویس مهمی ارائه میکند، ریاستارت را در زمان مناسب انجام دهید و قبل از آن مطمئن شوید از طریق پنل ارائهدهنده یا کنسول جایگزین، مسیر بازیابی در اختیار دارید.
اگر بعد از مشکل /boot دیگر SSH وصل نمیشود چه کنیم؟
پر شدن /boot میتواند باعث ناقص ماندن فرآیند بهروزرسانی شود، اما قطع SSH لزوماً به معنی خراب شدن کرنل نیست. ابتدا باید مشخص کنید سرور واقعاً Boot نشده یا فقط سرویس SSH مشکل دارد.
اگر SSH در دسترس نیست، از کنسول ارائهدهنده VPS یا KVM استفاده کنید. سپس وضعیت کرنل فعال و فضای /boot را بررسی کنید:
uname -r
df -h /boot
systemctl status ssh
اگر مشکل اصلی SSH باشد، مسیر عیبیابی آن با مشکل /boot متفاوت است. برای بررسی مرحلهبهمرحله Timeout، Connection refused، سرویس SSH، فایروال و لاگها میتوانید راهنمای عیبیابی SSH در لینوکس ایرانیکاسرور را دنبال کنید.
مطلب مرتبط: اگر مشکل اصلی فقط پر شدن فضای دیسک نیست و کل پارتیشن VPS پر شده است، روش تشخیص با df، du، بررسی لاگها، Docker، Backup و فایلهای حذفشده در آموزش زیر پوشش داده شده است.
دیسک VPS پر شده؛ چگونه بفهمیم چه چیزی فضای سرور را مصرف کرده است؟
چرا نباید فایلهای /boot را با rm حذف کنیم؟
ممکن است با دیدن چند فایل قدیمی در /boot وسوسه شوید مستقیماً آنها را حذف کنید. این روش توصیه نمیشود، چون فایلهای کرنل توسط سیستم بستهبندی Ubuntu مدیریت میشوند و ممکن است چند فایل به یک نسخه کرنل وابسته باشند.
اگر فقط vmlinuz یا initrd.img را حذف کنید، ممکن است پایگاه داده بستهها همچنان تصور کند آن کرنل نصب است. نتیجه میتواند وضعیت ناسازگار APT، خطا در نصب کرنل بعدی یا مشکل هنگام بازسازی initramfs باشد.
به همین دلیل مسیر استاندارد این است که ابتدا بسته مربوط به کرنل را شناسایی و سپس آن بسته را حذف کنید تا فایلهای وابسته نیز با سازوکار بستهبندی مدیریت شوند.
خطاهای رایج هنگام پر شدن /boot
خطای No space left on device
اگر این خطا هنگام ساخت initramfs یا نصب کرنل مشاهده میشود، ابتدا با df -h /boot بررسی کنید آیا پارتیشن /boot واقعاً پر است. اگر بله، یک کرنل قدیمی و غیر فعال را از طریق APT یا در شرایط اضطراری dpkg حذف کنید.
APT اجازه حذف کرنل را نمیدهد
ممکن است کرنل بهعنوان بسته دستی نصب شده باشد یا وضعیت بستهها نیمهکاره باشد. در این حالت apt-mark، dpkg –audit و فهرست بستههای نصبشده را بررسی کنید.
بعد از حذف کرنل هنوز /boot پر است
با df -h /boot و ls -lh /boot وضعیت را دوباره بررسی کنید. ممکن است چند نسخه کرنل، Header یا فایلهای مرتبط هنوز باقی مانده باشند. همچنین ممکن است مشکل اصلی مربوط به پارتیشن دیگری باشد.
df فضای کافی نشان میدهد ولی APT همچنان خطا دارد
در این حالت فقط روی فضای /boot تمرکز نکنید. وضعیت dpkg را با sudo dpkg –audit و وضعیت بستههای نیمهنصبشده را بررسی کنید. گاهی خطا مربوط به وابستگی یا یک فرآیند بهروزرسانی ناقص است.
جدول تشخیص سریع مشکل /boot
| نشانه | بررسی | اقدام |
|---|---|---|
| /boot تقریباً پر است | df -h /boot | شناسایی و حذف امن کرنلهای قدیمی |
| چند کرنل قدیمی نصب است | dpkg -l ‘linux-image*’ | بررسی نسخه فعال و اجرای autoremove |
| APT خطای وابستگی دارد | sudo dpkg –audit | آزادسازی فضا و سپس تعمیر dpkg |
| SSH قطع شده است | کنسول VPS و uname -r | ابتدا Boot و سپس SSH را جداگانه بررسی کنید |
چگونه از پر شدن دوباره /boot جلوگیری کنیم؟
بعد از رفع مشکل، بهتر است فقط به حذف یکباره کرنلهای قدیمی اکتفا نکنید. APT مکانیزمهایی برای مدیریت بستههای غیرضروری و نگهداری کرنلهای مورد نیاز دارد؛ بنابراین بهتر است بستههای کرنل را بدون دلیل به حالت دستی تغییر ندهید.
🔹 هر چند وقت یکبار وضعیت df -h /boot را بررسی کنید.
🔹 قبل از حذف کرنل، همیشه uname -r را اجرا کنید.
🔹 کرنل فعال را دستی حذف نکنید.
🔹 فایلهای /boot را مستقیماً با rm پاک نکنید.
🔹 قبل از ریاستارت سرور تولیدی، دسترسی کنسول جایگزین را بررسی کنید.
🔹 بعد از بهروزرسانی کرنل، فضای /boot و وضعیت بستهها را بررسی کنید.
اگر مشکل /boot در VPS شما تکرار میشود
در یک VPS، پر شدن /boot فقط یک مشکل نرمافزاری ساده نیست؛ اگر فضای پارتیشن به حد بحرانی برسد، بهروزرسانی کرنل و بستههای سیستمی ممکن است ناقص شود و در زمان نامناسب نیاز به دسترسی کنسول پیدا کنید.
اگر برای اجرای Ubuntu و مدیریت VPS به زیرساخت مناسب نیاز دارید، میتوانید مشخصات سرورهای مجازی ایرانیکاسرور را بررسی کنید. انتخاب منابع باید بر اساس سرویس واقعی، فضای مورد نیاز و نوع بار سرور انجام شود.
اگر VPS شما درگیر مشکل فضای دیسک، بستههای ناقص یا تنظیمات لینوکس شده است، قبل از حذف فایلهای سیستمی بهتر است مسیر مشکل مشخص شود.
سؤالات متداول درباره پر شدن /boot در Ubuntu
آیا میتوان همه کرنلهای قدیمی Ubuntu را حذف کرد؟
حذف کرنلهای غیرضروری امکانپذیر است، اما بهتر است کرنل در حال اجرا حذف نشود و حداقل یک نسخه قابل بوت قبلی نیز بهعنوان مسیر بازگشت باقی بماند. استفاده از APT و autoremove از حذف دستی فایلهای /boot مناسبتر است.
آیا حذف کرنل قدیمی باعث خراب شدن Ubuntu میشود؟
اگر نسخه صحیح و غیر فعال حذف شود، حذف بستههای کرنل قدیمی بخشی از مدیریت معمول سیستم است. خطر اصلی زمانی ایجاد میشود که کرنل فعال یا فایلهای /boot بهصورت دستی و ناقص حذف شوند.
چطور بفهمم کدام کرنل در حال اجراست؟
دستور uname -r نسخه کرنلی را که سیستم فعلاً با آن اجرا شده است نشان میدهد. این نسخه نباید هدف حذف قرار بگیرد.
اگر /boot صددرصد پر شده باشد چه کار کنم؟
ابتدا با df -h /boot وضعیت را تأیید کنید، سپس uname -r را اجرا کنید و یک کرنل قدیمی غیر فعال را شناسایی کنید. اگر APT کار میکند، از autoremove استفاده کنید. اگر APT به دلیل کمبود فضا نمیتواند عملیات را انجام دهد، مسیر اضطراری حذف یک بسته قدیمی با dpkg را با دقت دنبال کنید.
آیا میتوان فایل initrd.img قدیمی را مستقیم حذف کرد؟
برای مدیریت معمول سیستم این روش توصیه نمیشود. initrd بخشی از فرآیند بوت و بستهبندی کرنل است. حذف مستقیم فایل میتواند پایگاه داده بستهها را با وضعیت واقعی فایلهای سیستم ناسازگار کند.
چرا بعد از حذف کرنل هنوز چند فایل vmlinuz در /boot وجود دارد؟
وجود چند فایل مربوط به نسخههای مختلف لزوماً نشانه مشکل نیست. Ubuntu ممکن است کرنل فعال و یک نسخه قبلی را نگه دارد تا در صورت مشکل نسخه جدید، مسیر بازگشت وجود داشته باشد.
اگر بعد از پاکسازی /boot هنوز APT خطا میدهد چه کنم؟
وضعیت dpkg را با sudo dpkg –audit بررسی کنید. سپس در صورت وجود بستههای نیمهپیکربندیشده، sudo dpkg –configure -a و در صورت باقی ماندن وابستگیها sudo apt-get -f install را اجرا کنید.
جمعبندی
پر شدن /boot در Ubuntu معمولاً به باقی ماندن چند نسخه کرنل مربوط است. راهحل امن از تشخیص شروع میشود، نه حذف مستقیم فایلها.
ابتدا df -h /boot و uname -r را اجرا کنید. سپس بستههای نصبشده را بررسی کنید و در حالت عادی از sudo apt autoremove –purge کمک بگیرید. اگر APT به دلیل پر بودن /boot قادر به ادامه نبود، فقط یک کرنل قدیمی و غیر فعال را شناسایی و در صورت نیاز از مسیر اضطراری dpkg حذف کنید.
بعد از آزاد شدن فضا، وضعیت dpkg را اصلاح کنید، دوباره فضای /boot را بررسی کنید و پیش از ریاستارت سرور، مسیر دسترسی جایگزین را در اختیار داشته باشید.
منابع رسمی و فنی
برای بررسی مشکل VPS یا تنظیمات لینوکس نیاز به کمک دارید؟
اگر مطمئن نیستید کدام کرنل را باید حذف کنید، بهتر است قبل از اجرای دستورهای حذف، وضعیت سرور را بررسی کنید.
تماس با پشتیبانی ایرانیکاسرور:
021-91302467




دیدگاهها (۰)