چگونه فضای بیشتری را در / boot ایجاد کنم؟


به جواب پذیرفته شده بروید




/boot پارتیشن من تقریباً کامل است و هر بار که سیستم را دوباره راه اندازی کردم ، هشدار می گیرم. من قبلاً بسته های هسته قدیمی را حذف کردم (سرورهای لینوکس ...) ، در واقع من این کار را کردم تا نسخه هسته جدیدتری را نصب کنم که همراه با به روزرسانی های خودکار است.

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

در اینجا لیستی از پرونده هایی که در قسمت من هستند وجود دارد /boot :

 :~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic
 

در حال حاضر ، من از 3.0.0-14-generic هسته استفاده می کنم .


566









22 :تعداد پاسخها


شما هسته های بلااستفاده زیادی دارید. همه جز هسته های آخر را با:

 sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}
 

این کوتاه برای:

 sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8
 

حذف linux-image-x.x.x-x بسته نیز حذف خواهد شد linux-image-x.x.x-x-generic .

هدرها /usr/src هنگام ساخت ماژول های هسته خارجی (مانند درایور انویدیا اختصاصی و جعبه مجازی) نصب شده و مورد استفاده قرار می گیرند. اگر بسته های هسته مطابق linux-image-* نصب نشده باشد ، بیشتر کاربران باید این بسته های هدر را حذف کنند .

برای لیست کلیه هسته های نصب شده ، اجرا کنید:

 dpkg -l linux-image-\* | grep ^ii
 

یک دستور برای نشان دادن همه هسته ها و سرصفحات قابل حذف ، به استثنای هسته در حال اجرا فعلی :

 kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver
 

تمام بسته های انتخاب شده به نام شروع را انتخاب می کند ، linux-headers-<some number> یا linux-image-<some number> نام بسته را برای بسته های نصب شده چاپ می کند و سپس هسته بارگیری شده / جاری را حذف می کند (لزوماً آخرین هسته نیست!). این به توصیه تست هسته جدید قبل از از بین بردن هسته های قدیمی تر و شناخته شده در کار متناسب است.

بنابراین ، پس از به روزرسانی هسته ها و راه اندازی مجدد برای آزمایش آن ، می توانید سایر هسته های دیگر را با استفاده از:

 sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")
 

631



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

 uname -r
 

سپس از این دستور برای چاپ کلیه هسته های نصب شده استفاده کنید که جدیدترین هسته شما نیستند:

 dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'
 

اطمینان حاصل کنید که هسته فعلی شما در آن لیست قرار ندارد. توجه کنید که چگونه این اکثر دستور نهایی است (در زیر). برای حذف و حذف این هسته های قدیمی می خواهید این آرگومان ها را به این موارد وارد کنید:

 sudo apt-get -y purge
 

اکنون ما می توانیم با ترکیب این دو دستور آخر در این آشفتگی غیرمجاز هر کاری را که می خواهیم انجام دهیم:

 dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge
 

و آن یک فرمان از همه چیز برای شما مراقبت خواهد کرد. من تأیید خواهم کرد که این کار کاملاً مؤثر است اما هرگز به کسی در اینترنت اعتماد نکنید. :) برای اطلاعات بیشتر ، پست وبلاگ توضیحی بسیار خوب در مورد آنچه در هر قسمت از فرمان وجود دارد را از طریق آن بخوانید ، بنابراین شما راضی هستید که آن کاری را که می خواهید انجام دهید انجام می دهد.


220



 sudo apt-get autoremove
 

این دستور به صورت خودکار کار را انجام می دهد.


112



از Synaptic Package Manager می توان برای انتخاب و حذف تصاویر ساده هسته قدیمی استفاده کرد.
تصویر صفحه مدیر بسته بندی سیناپسی

اگر Synaptic را از قبل نصب نکرده اید:

 sudo apt-get install synaptic
 

برنامه را شروع کرده و گزینه های نشان داده شده را انتخاب کنید.

شما باید بتوانید تمام بسته های "linux-" را با نسخه "2.6.x" برجسته کنید که x بین 31 تا 38 با توجه به پرونده های موجود در پوشه / boot شما.

روی هر یک از آن بسته های لینوکس راست کلیک کرده و گزینه "Mark for Complete Removal" را انتخاب کنید. در آخر بر روی دکمه اعمال کلیک کنید. با این کار همه پرونده ها و هر پرونده مرتبط با آن حذف می شود. /boot اکنون پوشه شما باید کمی دقیق تر باشد.


40



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

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

در اینجا از لینک مقاله کپی شده است ، پیشنهاد می کنم مقاله کامل را بخوانید:

 dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge
 

25



این یک پاسخ جدید برای یک سوال قدیمی است ، اما یک راه آسان برای تمیز کردن این چیز (و موارد دیگر) نصب Ubuntu Tweak است . برای نصب آن :

 sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak
 

سپس می توانید Ubuntu Tweak را اجرا کنید ، به برگه "سرایدار" بروید ، و از اینجا مسئله سه کلیک است:


سرایدار اوبونتو برای هسته های قدیمی

بهتر است آخرین هسته (که هرگز نمی دانید) یا یک هسته کارآمد شناخته شده برای ایمنی را ترک کنید. اما این به راحتی قابل تنظیم است.

می توانید از همان ابزار برای تمیز کردن بسیاری از موارد استفاده کنید --- فقط به یاد داشته باشید که اگر حافظه نهان نگاری یا حافظه نهان را پاک کنید ، سیستم در صورت نیاز مجبور به بازسازی آنها می شود.


23



من با استفاده از dpkg حذف مستقیم بسته ها قادر به حل مشکل بودم . اگرچه بسته ها هنوز هم در این لیست قرار دارند dpkg -l ، پرونده ها از /boot فضای خارج می شوند و فضای خود را آزاد می کنند.

 [email protected]:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`
 

پس از این ، apt-get -f install مشکلات وابستگی من را برطرف کردم و همه چیز با جهان خوب بود.

من جواب این سؤال را قبول نخواهم کرد ، با این حال ، همچنان که باید بدانم باید /boot اندازه خود را افزایش دهم یا کار دیگری انجام دهم.


19



شما می توانید استفاده از یک پارتیشن جداگانه / boot را متوقف کنید ، بنابراین چنین فضای محدودی در آنجا نخواهید داشت. برای انجام این کار ، پارتیشن را جدا کنید ، سپس آن را در جایی دیگر سوار کنید و کلیه پرونده های موجود را در فهرست / boot در بخش پارتیشن اصلی خود کپی کنید ، سپس ورودی را از / etc / fstab بردارید و grub را دوباره نصب کنید. به عنوان مثال (شما باید از پارتیشن صحیح استفاده کنید):

 sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda
 

سپس می توانید از gparted برای پاک کردن پارتیشن قدیمی / boot استفاده کرده و احتمالاً پارتیشن ریشه را برای استفاده از آن فضا گسترش دهید. برای گسترش پارتیشن ریشه باید از livecd بوت شوید و فضای خالی نیز باید بلافاصله در سمت راست باشد. اگر پارتیشن / boot در حال حاضر در سمت چپ پارتیشن ریشه قرار دارد ، باید ابتدا پارتیشن ریشه را به سمت چپ منتقل کنید ، سپس آن را گسترش دهید ، اما این می تواند مدت زمان بسیار طولانی را طی کند ، بنابراین ممکن است ارزش آن را نداشته باشد مشکل.


15



با استفاده از بهترین جوابها ، رویکرد امتحان شده و واقعی من این است:

  • uname -a برای پیدا کردن هسته در حال اجرا.
  • dpkg -l linux-{headers,image}-\* | grep ^ii برای لیست تمام بسته های مربوط به هسته در حال حاضر نصب شده. این شامل هسته در حال اجرا است.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz} برای از بین بردن هسته های قدیمی xx,yy,zz لیستی از هسته های هسته ای را که می خواهید حذف کنید جایگزین کنید. اینها کلیه ساختهای ذکر شده توسط دستور قبلی است که قدیمی تر از هسته در حال اجرا هستند. مطمئن شوید که هسته در حال اجرا را حذف نمی کنید system سیستم شما غیرقابل کنترل خواهد شد . همچنین ممکن است شما نیاز به تغییر نسخه هسته از 3.16.0 هر آنچه که روی سیستم شما نصب شده است ، داشته باشید.
  • به صورت اختیاری ، انجام این کار sudo apt-get autoremove - این وابستگی های باقیمانده هسته های قدیمی را که دیگر نیازی به کنونی نیستند ، از بین می برد و فضای بیشتری را آزاد می کند.

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

اگر چیزی نتواند ...

  • اگر فرمان apt به دلیل خالی ماندن در خطای دستگاه از کار افتاد ، به جای آن از دستور dpkg مربوطه استفاده کنید sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz} :.
  • اگر فرمان dpkg هنوز کار نکند زیرا linux-image بسته‌ها به linux-headers بسته‌های همان نسخه (که شما نیز بخواهید آن را حذف کنید) لازم است ، ممکن است dpkg نتواند آن را برطرف کند. بازده را دوباره بررسی dpkg -l کنید و پسوندهای نام بسته را در خط فرمان مشخص کنید. به عنوان مثال ، در یکی از سیستمهای من فرمانی که سرانجام کار شد sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae .
  • اگر خطای دیگری دارید ، کمک بخواهید - ممکن است شما یک مشکل متفاوت از آنچه فکر کرده اید داشته باشید.

10



برای من هر دو apt-get purge و dpkg --remove هر دو شکست خوردند. بنابراین مجبور شدم چند تصویر هسته قدیمی را از / boot با حذف کنم rm -f .


5



لیست تمام هسته ها:

 dpkg --list 'linux-image*'
 

نمایش هسته فعلی:

 uname -r
 

لیست کلیه هسته های EXCEPT فعلی را لیست کنید:

 dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'
 

اطمینان حاصل کنید که هسته فعلی شما در آن لیست قرار ندارد.

حذف همه هسته های EXCEPT فعلی:

 dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge
 

پاک کردن موارد دیگر:

 sudo apt-get autoremove
 

اگر هنوز خطای فضای دیسک بوت را برای نصب / حذف فایل ها به شما می دهد ، مستقیماً یکی از تصویر OLD را از فهرست / boot حذف کنید ،

 ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 
 

توجه: لطفاً قبل از حذف هر تصویری ، تصویر هسته فعلی را دوباره بررسی کنید.


5



بسته های هسته قدیمی را قبلاً پاک کردم (هدرهای لینوکس ...)

linux-headers-* هسته نیستند بسته های هسته همانهایی هستند که نامگذاری شده اند linux-image-* . نامهای linux-headers-* آنها بسته های توسعه برای تدوین ماژول های هسته است: آنها در فهرست / boot زندگی نمی کنند و برای استفاده روزانه از سیستم شما لازم نیست.

فایل های شما در / boot ذکر شده انجام شامل چندین تصویر قدیمی هسته ( vmlinuz* ) و تصاویر initrd را وارد ( initrd.img* ) برای کسانی که به دانه است، که نشان میدهد که شما هنوز هم بسیاری از بسته های هسته های قدیمی نصب شده است.

شما باید بتوانید هسته های نصب شده خود را با آنها لیست کنید

 aptitude search ~ilinux-image
 

(توجه داشته باشید که این احتمالاً بسته هایی را که هسته نیستند نیز برمی گرداند).

معمولاً نیازی به نصب بیش از دو هسته وجود ندارد - یکی در حال حاضر و دیگری مورد قبلی (به عنوان یک برگردان). بنابراین می توانید قدیمی ترها را یکی یکی از بین ببرید ، مثل این:

 sudo apt-get autoremove linux-image-3.2.0-23-generic
 

حتماً "3.2.0-23-generic" را با نسخه هسته واقعی که می خواهید حذف کنید جایگزین کنید! همچنین بسته هایی از قبیل آنها را حذف نکنید linux-image-generic . شما باید واقعاً مراقب باشید که هسته فعلی در حال اجرا را از بین نبرد یا قادر به بوت شدن نخواهید بود (ممکن است اوبونتو در مورد انجام این کار به شما هشدار دهد).

شما می توانید هسته در حال اجرا را با:

 uname -r
 

2



من این مشکل را داشتم و بیشتر از آنجا که برخی از initrd-img-xxx پرونده ها را به صورت دستی از / boot حذف کردم و مشکلی داشتم که این نسخه های قدیمی باعث تولید و پر شدن /boot پوشه می شوند. برای رفع آن موارد زیر را دنبال کردم:

  • من نسخه هسته قدیمی تولید شده را به صورت دستی و به منظور فضای خالی حذف کردم.
  • شما در حال ویرایش یک فایل پیکربندی متن به عنوان superuser هستید ، بنابراین موارد زیر را در یک ترمینال قرار دهید:

     sudo gedit /etc/initramfs-tools/update-initramfs.conf
     
  • خط را پیدا کرده update_initramfs=yes و آنرا تغییر دهید update_initramfs=no . فایل را ذخیره و از آن خارج شوید ، سپس اجرا کنید:

     sudo dpkg --configure -a
     

این مشکل من را حل کرد. این مبتنی بر این وبلاگ بود

امیدوارم ، هنگام راه اندازی مجدد ، همه چیز خوب باشد ، و بعداً می توانید سعی کنید no برگشت به yes داخل را تغییر دهید update-initramfs.conf .


1



من نشان می دهم که هنوز هم در سال 2017 این سؤال نظر و پاسخ جدید دارد اما یک جواب را از دست می دهید که فکر می کنم در اینجا بسیار مفید است:

اوبونتو به عنوان یک سیستم عامل دسک تاپ از کاربردهای ساده روزمره هیچ دلیلی برای نصب با پارتیشن مجزا \ boot ندارد و چیزی شبیه به این چیزی را به "کاربر مشترک" ارائه نمی دهد ... بنابراین یک راه حل یک نصب جدید بدون پارتیشن \ boot است و این شما هرگز چنین مشکلی نخواهید داشت

PS: پاسخ من می تواند در جواب پذیرفته شده حذف یا اضافه شود ... (فکر می کنم این روش به بعضی افراد کمک می کند)


1



ابزاری فوق العاده مفید که پارتیشن بوت شما را پاک می کند

 git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh
 

از خطر خود استفاده کنید اما برای من کار کرد:

 sudo bootnukem
 

1



در استعداد یا سیناپسی بخشی "قدیمی یا دستی نصب شده بسته بندی شده" وجود دارد. باید بسته های قدیمی لینوکس در آنجا باشد.


0



یک اسکریپت bash وجود دارد که من در زیر نوشتم که باعث می شود روند کمی کاربر پسند تر شود.

YMMV - این برای نعناع 14 ساخته شده است. هنوز هم BASH را یاد می گیرید ، بنابراین احتمالاً کمی دست و پا گیر است. از خطر خود استفاده کنید اما برای من مفید است!

 #!/bin/bash

endCol='\e[0m'
bold_red='\e[1;31m'
bold_green='\e[1;32m'
bold_yellow='\e[1;33m'

title_color='\e[0;30;47m'

function show_kernel_info {
clear
current_kernel=$(uname -r)
echo "Current ACTIVE kernel is:"
echo -e "  "$bold_yellow$current_kernel$endCol
echo "This kernel will be TOTALLY EXCLUDED from all actions in this script."
echo "Also, one fallback non-active kernel will be always left untouched."
echo ""
echo "These are the non-active kernels stored in /boot:"
count_of_old_kernels_in_boot=$(ls -o /boot/initrd* | grep -c -v "$current_kernel")
if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo " * No non-active kernels found! *"
else
  ls -o /boot/initrd* | grep -v "$current_kernel"
fi
echo ""
list_of_old_kernels=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic" | head -n 1)
count_of_old_kernels_installed=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -c -v "linux-image-generic")
echo "Listing of all unused kernels still installed in the system (these may not exist in /boot):"
if [ $count_of_old_kernels_installed = 0 ]; then
  echo " * No unused kernel installs found! *"
else
  dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic"
fi
echo ""
}

function exit_script {
free_space_after=$(df -BM /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
let freed_space=$free_space_after-$free_space_before
echo ""
echo "Results (in MB)"
echo "---------------"
echo "Free space in /boot before script was run: "$free_space_before
echo "Free space now: "$free_space_after
echo ""
echo "Amount of space freed up = "$freed_space
echo ""
echo "Press any key to exit."
read -s -n 1
echo ""
exit
}

# Main code
echo ""
echo -e $title_color" --------------------------- "$endCol
echo -e $title_color" -   Kernel Cleanup v1.0   - "$endCol
echo -e $title_color" --------------------------- "$endCol
echo ""
echo "Maximise this window for readability."
echo "Press any key to continue."
read -s -n 1
echo ""
echo "This script will remove old unused kernels, but it will prompt you before removing each one."
echo "It will never remove the current running kernel, and will also leave one fallback kernel."
echo "It can also remove source files from /usr/src for each kernel removed."
echo "This is normally safe to do and will free up lots more space."
echo ""
echo "Do you want that done as well? (y/n, enter=yes)"
valid_input=0
while [ "$valid_input" = "0" ]; do
  read -s -n 1 YesNo_input
  if [ "$YesNo_input" = "" ]; then
    YesNo_input="y"
  fi
  case $YesNo_input
  in
    y)
    RemoveSource="y"
    valid_input=1
    ;;

    Y)
    RemoveSource="y"
    valid_input=1
    ;;

    n)
    RemoveSource="n"
    valid_input=1
    ;;

    N)
    RemoveSource="N"
    valid_input=1
    ;;
  esac
done

free_space_before=$(df -h /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
show_kernel_info
while [ $count_of_old_kernels_in_boot -gt 1 ]; do
  # failsafe check if somehow the current kernel is about to be removed!
  if [ "$current_old_kernel" = "$current_kernel" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow the current kernel has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  # failsafe check if somehow a linux-image-generic entry is about to be removed
  if [ "$current_old_kernel" = "linux-image-generic" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow one of the linux-image-generic entries has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  echo "Command about to be executed is:"
  echo "  $ sudo apt-get purge \"$current_old_kernel\""
  check_in_boot=$(echo $current_old_kernel | sed 's/linux-image/initrd.img/g')
  if [ -e /boot/$check_in_boot ]; then
    echo -e $bold_yellow"Note:"$endCol" This kernel exists in /boot but it NON-active, so it's OK to remove."
  else
    echo -e $bold_green"Totally safe to remove:"$endCol" This kernel does NOT exist in /boot."
  fi
  echo ""
  echo "Are you sure you want to remove this kernel?"
  echo "(*upper case* Y=yes / any other key will exit the script)"
  read -s -n 1 yes_no
  echo ""
  # Only entering a single upper case Y will work!
  if [ "$yes_no" != "Y" ]; then
    echo "Aborting script."
    exit_script
  fi
  echo "Removing kernel "$current_old_kernel"..."
  sleep 1
  sudo apt-get -y purge $current_old_kernel
  if [ "$RemoveSource" = "y" ]; then
    current_old_source=$(echo $current_old_kernel | sed 's/linux-image/linux-headers/g')
    current_old_source=$(echo $current_old_source | sed 's/-generic//g')
    current_old_source=$(echo $current_old_source | sed 's/-pae//g')
    sudo apt-get -y purge $current_old_source
  fi
  show_kernel_info
done

if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo -e $bold_red"There are no NON-active kernels to remove!"$endCol
else
  echo -e $bold_red"There is only one NON-active kernel left in /boot!"$endCol
  echo "This script will not remove the last non-active kernel so that you have at least one backup kernel."
fi
echo "Aborting script."
exit_script
 

0



[به عنوان یک ظهر AskUbuntu ، تا زمان شهرت = 50 نمی توانم اظهار نظر کنم ، بنابراین به دلیل این امر رأی ندهید.]

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

تنها کاری که برای من کار کرده ، بررسی تصویر فعلی ، سپس دستی sudo rm filename برای قدیمی ترین پرونده های تصویری (هرکدام در نام هایشان -3.16.0-30 بود ). پس از اتمام این کار ، sudo apt-get autoremove اتاق جادوگری لازم برای انجام کار خود را داشت. برخی از خطاهای مرتبط با آن نسخه ، به عنوان مثال: "depmod: FATAL: نمی تواند بارگیری شود /boot/System.map-3.16.0-30-generic: چنین پرونده یا پوشه ای وجود ندارد" اما انتظار می رود.

پس از اتمام ، df بازپرداختها٪ 42 را برای استفاده از / boot بازگردانده اند تا نشان دهند که دوباره سالم است.


0



من این اسکریپت bash را برای هسته های پاک کننده انتخابی همه به یکباره نوشتم :


هسته های اندازه واقعی

کلیه کد ها و دستورالعمل های bash در لینک موجود است.


0



این اسکریپت را به عنوان ذخیره کنید /usr/local/bin/remove_kernels.sh (به یاد داشته باشید مجوزهای اجرا را اجرا کنید sudo chmod 755 /usr/local/bin/remove_kernels.sh ):

 #!/bin/sh
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 1
fi
apt purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )
update-grub
 

سپس برای حذف همه هسته های قدیمی ، فقط تایپ کنید: sudo remove_kernels.sh


0



/ پارتیشن بوت بعضی اوقات می تواند کمی عجیب باشد

به طور مستقیم شروع به حذف پرونده های هسته نکنید.

مراحل پیگیری

  1. بررسی کنید که هسته در حال حاضر نصب شده توسط سیستم لینوکس مورد استفاده قرار می گیرد

    uname -r

    این باید نام تصویر هسته نصب شده موجود در سیستم را به شما بدهد

  2. اکنون شروع به حذف پرونده های اضافی کنید به غیر از موارد خاص نصب شده روی سیستم شما

    apt-get remove linux-image-XXXXX

  3. همچنین فایل هدر را نیز حذف کنید

    apt-get remove linux-headers-XXXXX

  4. همچنین ممکن است شرایطی وجود داشته باشد که apt کار را متوقف کرده باشد ، در این حالت به / boot تغییر دهید

    cd /boot

  5. شروع به از بین بردن پرونده ها به صورت دستی اما با دقت کنید همچنین این نکته را در نظر داشته باشید که installed one's پرونده های هسته را از سیستم خود حذف نکنید .

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. در صورت وجود ، صحیح پاک سازی فایلها را حذف کنید

    apt-get -f install

  7. پرونده های اضافی که در آنجا نشسته اند را به عنوان دستی برای پاک کردن فایل های بوت شده حذف کنید

    apt-get autoremove

  8. grub را به روز کنید

    update-grub

  9. آخرین بسته های سیستم خود را به روز کنید

    apt-get update


0



اگر شما می توانید فایل های بیشتر استفاده نشده را حذف کنید و اگر شما پارتیشن دیگر با / یا فضای آزاد بر روی همان دستگاه، شما می توانید از پارتیشن boot / توسط تغییر اندازه جدا / توزیع GParted . (در رسانه نصب نیز موجود است.)

هشدار : تغییر اندازه اندازه گیری عمل خطرناک است ، قبل از انجام داده های مهم خود را در رسانه های دیگر ذخیره کنید!


-1



انتشارات مرتبط


چگونه فضای دیسک را آزاد کنم؟

چگونه می توان مک خود را برای بوت شدن از کلید USB اوبونتو تهیه کرد؟

چگونه می توان سرور VNC را روی بوت شروع کرد؟

چگونه حالت ضربدری را در بوت فعال کنم؟

چگونه می توانم بیش از 80 ستون در حالت خط فرمان داشته باشم؟

چگونه حافظه را به بهترین روش آزاد کنیم

چگونه می توان پیش زمینه شفاف را در ترمینال XFCE تنظیم کرد؟

چگونه می توان انواع بیشتری یا بسته های سفارشی را به debootstrap اضافه کردم؟

چگونه فضای بیشتری را در / boot ایجاد کنم؟

چگونه می توان زبانه ها را برای فضاهای موجود در gedit جایگزین کرد؟

[boot] سوال برچسب


چگونه می توانم محدوده صفحه / بخشی از PDF را استخراج کنم؟

چگونه فضاهای کاری را روشن کنم؟ (چرا فقط یک فضای کاری دارم؟)

چگونه می توانم برنامه ها را بطور خودکار در ورود به سیستم شروع کنم؟

چگونه یک بسته را از طریق apt-get کم کنیم؟

چرا swap مورد استفاده قرار می گیرد حتی اگر رم رایگان زیادی هم داشته باشم؟

چگونه می توانم با ClamAV ویروس اسکن کنم؟

من یک مشکل تشخیص سخت افزار دارم ، چه سیاهه هایی را باید بررسی کنم؟

چگونه به یک پوشه مشترک در VirtualBox دسترسی پیدا کنیم؟

اصطلاحات مناسب عناصر UI در یونیت چیست؟

چگونه می توانم یک جلسه صفحه را از یک ترمینال جدا کنم؟