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

پارتیشن boot اوبونتو پر شده؛ چطور آپدیت کرنل را کامل کنیم؟

تشخیص فضای boot، شبیه‌سازی حذف کرنل قدیمی و ترمیم نصب نیمه‌تمام بسته‌های اوبونتو با حفظ کرنل در حال اجرا.

انتشار:
توسط تیم فنی نت‌آرام
۷ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله پارتیشن boot اوبونتو پر شده؛ چطور آپدیت کرنل را کامل کنیم؟ در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
به‌روزرسانی اوبونتو به خطای No space left on device می‌رسد و نام /boot یا initramfs در پیام دیده می‌شود. ممکن است فضای کلی سرور هنوز خالی باشد، اما پارتیشن کوچک بوت جا نداشته باشد. فایل‌های لازم برای شروع لینوکس و نسخه‌های کرنل در این قسمت قرار می‌گیرند؛ پاک کردن تصادفی آن‌ها می‌تواند مانع بالا آمدن سرور شود.
در این راهنما اول معلوم می‌کنیم کدام فضای دیسک پر است، بعد کرنل فعلی و نسخه‌های قبلی را می‌شناسیم، حذف را پیش‌نمایش می‌کنیم و در پایان نصب ناقص را ترمیم می‌کنیم. این مراحل برای Ubuntu و بسته‌های APT است؛ در AlmaLinux از دستورهای حذف بسته اوبونتو استفاده نکنید.

قبل از شروع: یک راه برگشت داشته باشید

با SSH و حساب دارای مجوز sudo وارد شوید. کنسول ارائه‌دهنده را آماده کنید تا اگر بعداً سیستم شبکه نداشت بتوانید صفحه بوت را ببینید. یک نسخه پشتیبان قابل بازیابی و برنامه زمان نگهداری داشته باشید. تا زمانی که بسته‌ها و فایل‌های بوت سالم نشده‌اند، سرور را بی‌دلیل ری‌استارت نکنید.
کرنل در حال اجرا، یک نسخه سالم جایگزین و بسته‌های راه‌اندازی را نگه دارید. هیچ دستور عمومی برای پاک کردن تمام فایل‌های /boot یا تمام بسته‌های کرنل اجرا نکنید.

۱. مشخص کنید کدام فضا پر شده است

کد / دستورdf -h /boot /
اگر /boot و / در خروجی دستگاه‌های متفاوت دارند، برای هرکدام ستون Avail را جدا بخوانید. اگر هر دو به یک دستگاه اشاره می‌کنند، آزاد کردن فایل‌های غیرضروری همان فایل‌سیستم ریشه می‌تواند به بوت هم فضا بدهد. دستور زیر نشان می‌دهد /boot دقیقاً روی کدام فایل‌سیستم قرار دارد:
کد / دستورfindmnt -T /boot
ممکن است /boot/efi پارتیشن جدا داشته باشد. اگر خطا به آن مسیر اشاره می‌کند، فضای آن را جداگانه ببینید:
کد / دستورdf -h /boot/efi
پر شدن EFI با پر شدن محل فایل‌های کرنل یکسان نیست. فایل‌های EFI و پوشه‌های bootloader را بر اساس نام ظاهری پاک نکنید؛ ابتدا دستگاه و علت واقعی را مشخص کنید.
اگر فضای عددی آزاد است ولی خطا ادامه دارد، تعداد inodeها را ببینید:
کد / دستورdf -i /boot
ستون IUse% اگر ۱۰۰ درصد باشد، مشکل تعداد فایل‌هاست نه صرفاً حجم. برای شناخت اندازه محتوای خود /boot:
کد / دستورsudo du -xhd1 /boot
و برای دیدن فایل‌های سطح اصلی بدون حذف آن‌ها:
کد / دستورsudo ls -lh /boot
بایگانی‌های بکاپ شخصی، فایل‌های کرنل و پوشه‌های بوت وظایف متفاوتی دارند. اگر خودتان قبلاً بکاپی را در همین فایل‌سیستم گذاشته‌اید، انتقال فقط همان بکاپ شناخته‌شده به دیسکی دیگر پس از اطمینان از فضای مقصد و سلامت نسخه، راه آزاد کردن فضاست. جابه‌جایی به پوشه‌ای روی همان پارتیشن فضایی آزاد نمی‌کند.

۲. کرنل جاری و بسته‌های قبلی را شناسایی کنید

کد / دستورuname -r
این نسخه‌ای است که همین حالا در حافظه اجرا می‌شود؛ آن را یادداشت کنید. فهرست بسته‌های image را ببینید:
کد / دستورdpkg -l 'linux-image-*'
در سمت چپ، ii معمولاً به معنی نصب کامل و rc به معنی حذف بسته و باقی ماندن تنظیمات آن است. حالت‌های دیگر می‌توانند نصب نیمه‌تمام باشند. نام‌های شامل شماره نسخه مثل linux-image-6.8.0-40-generic با بسته‌های کلی مانند linux-image-generic فرق دارند. شماره این مقاله فقط نمونه است؛ از روی آن هیچ بسته‌ای را در سرور خود حذف نکنید.
بسته‌های مرتبط با ماژول‌ها را هم ببینید:
کد / دستورdpkg -l 'linux-modules-*'
اگر فقط کرنل فعلی و یک نسخه جایگزین دارید، آزاد کردن فضا با حذف نسخه جایگزین ممکن است راه برگشت را از بین ببرد. ابتدا به دنبال بکاپ شخصی بزرگ در همان فایل‌سیستم یا راه افزایش فضای بوت با نسخه پشتیبان و کنسول باشید. افزایش اندازه دیسک مجازی به‌تنهایی الزاماً اندازه پارتیشن /boot را تغییر نمی‌دهد.

۳. حذف خودکار را اول فقط شبیه‌سازی کنید

کد / دستورsudo apt-get -s autoremove --purge
این دستور پیش‌نمایش است و بسته‌ها را حذف نمی‌کند. در خروجی، نام بسته‌های کنار Purg یا Remv و همچنین فهرست کلی بسته‌های قابل حذف را بخوانید؛ در حالت purge معمولاً Purg دیده می‌شود. هر بسته غیر از کرنل قدیمی هم ممکن است در فهرست باشد. مطمئن شوید نسخه در حال اجرای uname -r، بسته‌های bootloader، بسته کلی کرنل مورد استفاده و حداقل یک کرنل سالم جایگزین حذف نمی‌شوند. اگر هر نامی را نمی‌شناسید یا فهرست موارد مهم دیگری دارد، ادامه ندهید.
اگر پیش‌نمایش فقط مواردی را نشان می‌دهد که خودتان تأیید کرده‌اید و فضای آزاد کافی برای عملیات وجود دارد، حذف را با نمایش تأیید اجرا کنید:
کد / دستورsudo apt-get autoremove --purge
پیش از پاسخ مثبت، فهرست نهایی را دوباره بخوانید؛ ممکن است وضعیت بسته‌ها از زمان شبیه‌سازی تغییر کرده باشد. اگر فهرست متفاوت یا نامطمئن بود، n بزنید. گزینه --purge فایل تنظیمات بسته‌های حذف‌شده را هم حذف می‌کند. سپس دوباره df -h /boot را اجرا کنید تا مقدار فضای آزاد را ببینید.
اگر پیش‌نمایش هیچ کرنل قدیمی پیشنهاد نداد، معنی‌اش این نیست که باید همه نسخه‌ها را پاک کنید. برخی بسته‌ها به‌صورت دستی نصب شده‌اند یا برای بازگشت نگه داشته شده‌اند. برای دیدن بسته‌های image که APT آن‌ها را دستی می‌شناسد:
کد / دستورapt-mark showmanual 'linux-image-.*'
پیش از هر تصمیم، نسخه نصب‌شده، بسته کلی و نیاز واقعی سرور را با مدیر آن تطبیق دهید. عوض کردن وضعیت همه بسته‌های کرنل به automatic بدون بررسی می‌تواند فهرست حذف آینده را تغییر دهد.

۴. اگر نصب قبلی نیمه‌تمام مانده است

ابتدا وضعیت بسته‌های ناقص را ببینید:
کد / دستورsudo dpkg --audit
اگر فضا را به اندازه کافی آزاد کرده‌اید و علت اصلی خطای فضا رفع شده است، بسته‌های بازشده اما پیکربندی‌نشده را ادامه دهید:
کد / دستورsudo dpkg --configure -a
این عملیات فقط یک پیام ساده نیست؛ اسکریپت پیکربندی بسته‌های معلق را اجرا می‌کند و ممکن است چند دقیقه زمان ببرد. خروجی را کامل بخوانید. اگر هنوز وابستگی خراب گزارش شد، ابتدا ترمیم APT را شبیه‌سازی کنید:
کد / دستورsudo apt-get -s -f install
فهرست نصب و حذف پیشنهادی را ببینید. اگر موارد پیشنهادی مناسب و قابل تأیید است، نسخه واقعی را بدون -s اجرا کنید:
کد / دستورsudo apt-get -f install
در پرسش تأیید، بسته‌ها را دوباره بخوانید و اگر حذف نامنتظره‌ای پیشنهاد شد، پاسخ منفی بدهید. بعد از پایان، sudo dpkg --audit را تکرار کنید؛ خروجی خالی معمولاً یعنی بسته نیمه‌تمامی در این بررسی دیده نشده است، نه اینکه تمام کارکردهای سرور آزمایش شده‌اند.
اگر APT به علت وابستگی خراب اصلاً اجازه حذف نمی‌دهد و /boot کاملاً پر است، ابتدا از فایل غیرسیستمی شناخته‌شده یا افزایش امن فضا کمک بگیرید. فایل initrd یا vmlinuz کرنل جاری و نسخه جایگزین را برای باز کردن جا پاک نکنید. در شرایطی که هیچ مورد مطمئنی برای جابه‌جایی ندارید، بازیابی وابسته به نسخه دقیق بسته‌ها و روش بوت است؛ گزارش dpkg --audit، خروجی uname -r و فهرست imageها را به مدیر باتجربه بدهید تا روی همان وضعیت تصمیم بگیرد.

۵. بررسی پایانی و جلوگیری از تکرار

دوباره این سه مورد را ببینید:
کد / دستورdf -h /boot uname -r sudo dpkg --audit
فضا باید آزاد شده باشد و بررسی بسته‌ها خطای حل‌نشده نشان ندهد. کرنلی که uname -r نشان می‌دهد تا پیش از راه‌اندازی مجدد همان نسخه قبلی است؛ نصب کرنل تازه فوراً آن را عوض نمی‌کند. اگر برای فعال شدن کرنل جدید ری‌استارت لازم است، بعد از اطمینان از تکمیل نصب و دسترسی کنسول، در زمان نگهداری برنامه‌ریزی‌شده سرور را راه‌اندازی کنید. پس از بالا آمدن، دوباره uname -r و کار واقعی سایت یا سرویس را آزمایش کنید.
برای جلوگیری از تکرار، ظرفیت واقعی /boot را پایش کنید و هر چند وقت یک‌بار پیش‌نمایش حذف بسته‌های غیرضروری را بخوانید. اگر فضا به دلیل ذخیره بکاپ در مسیر نادرست پر می‌شود، راهنمای پر شدن دیسک اصلی به‌دلیل mount نشدن مقصد بکاپ را هم ببینید.
این روش‌ها در Ubuntu روی سرور مجازی ایران و سرور اختصاصی ایران کاربرد دارند. جزئیات مدیریت بسته‌ها و دلیل بازبینی فهرست حذف را در مستند امنیتی اوبونتو درباره بسته‌های غیرضروری بخوانید.
اشتراک‌گذاری:
لینکدینتلگرامایکس

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

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