วิธีที่ปลอดภัยที่สุดในการล้างข้อมูล / boot partition คืออะไร?


274

ฉันได้รับมอบหมาย 200 MB สำหรับ/bootพาร์ติชัน เมื่อใดก็ตามที่ฉันพยายามอัพเดตเคอร์เนลฉันจะได้รับข้อความแสดงข้อผิดพลาดว่าโดยทั่วไปสถานะ/bootเต็มแล้ว

ฉันสามารถทำอะไรได้บ้างเพื่อล้าง/bootและลบ / สำรองข้อมูลเมล็ดเก่า



หาก / boot เต็มโปรดดูaskubuntu.com/questions/263363/…
nslntmnx

คำตอบ:


335

วิธีบรรทัดคำสั่ง:

ตรวจสอบรุ่นเคอร์เนลของคุณก่อนดังนั้นคุณจะไม่ลบรูปเคอร์เนลที่ใช้งานอยู่:

uname -r

ตอนนี้รันคำสั่งนี้เพื่อดูรายการของเมล็ดที่ติดตั้ง:

dpkg --list 'linux-image*' | grep ^ii

และลบเมล็ดที่คุณไม่ต้องการ / ต้องการอีกต่อไปด้วยการทำสิ่งนี้:

sudo apt-get remove linux-image-VERSION

แทนที่ VERSION ด้วยเวอร์ชันของเคอร์เนลที่คุณต้องการลบ

เมื่อคุณลบเมล็ดเก่าออกแล้วคุณสามารถเรียกใช้สิ่งนี้เพื่อลบแพ็คเกจที่คุณไม่ต้องการได้อีกต่อไป:

sudo apt-get autoremove

และในที่สุดคุณก็สามารถรันสิ่งนี้เพื่ออัพเดตรายการเคอร์เนล grub:

sudo update-grub

34
sudo dpkg --list 'linux-image*' | grep ^iiทำให้ง่ายขึ้นที่จะเห็นเพียงเมล็ดที่ติดตั้งไว้ นอกจากนี้ฉันคิดว่าupdate-grubไม่มีอันตราย แต่ไม่จำเป็นอย่างเคร่งครัดที่จะทำงานโดยอัตโนมัติเมื่อคุณถอนการติดตั้งเคอร์เนล
เนลสัน

9
ใช้ที่จะได้รับรายชื่อแพคเกจที่จะใช้กับsudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo "" ใช้เพื่อเก็บเมล็ด 3 อันล่าสุดไว้ในระบบ sudo apt-get removehead -n -3
Sithsu

2
ซับอย่างง่ายของฉัน:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb

27
sudo apt-get autoremoveควรจะพอเพียง (โดยปกติจะทิ้งคุณไว้ด้วย 3 เมล็ดสุดท้าย)
mbx

6
นี่เป็นคำตอบที่ดี แต่ฉันสงสัยว่ามันสามารถใช้งานได้ในกรณีส่วนใหญ่ (ถ้าไม่ทั้งหมด): ปัญหา/bootเต็มแล้วดังนั้นapt-getจะล้มเหลวด้วยรหัสข้อผิดพลาดหรืออื่น ๆ คำตอบด้านล่างเป็นบิต "hackier" (ผมต้องยอมรับว่าผมมีเหล็กตัวเองให้ออกว่าrm -rfใน/boot) แต่เพียงคนเดียวที่มีโอกาสที่จะทำงานในสถานการณ์เช่นนี้
มาร์โก

284

หมายเหตุ: นี่เป็นเพียงถ้าคุณไม่สามารถใช้ apt เพื่อล้างข้อมูลได้เนื่องจากเต็ม 100% / boot

หาก apt-get ไม่ทำงานเนื่องจาก / boot ของคุณอยู่ที่ 100% คุณจะต้องล้าง / boot ก่อน สิ่งนี้น่าจะเป็นการติดตั้งการอัพเกรดเคอร์เนลในการติดตั้งบางส่วนซึ่งหมายความว่า apt นั้นค่อนข้างแข็งตัวทั้งหมดและจะบอกให้คุณเรียกใช้apt-get -f installแม้ว่าคำสั่งนั้นจะล้มเหลวก็ตาม

รับรายการอิมเมจเคอร์เนลและกำหนดสิ่งที่คุณสามารถทำได้โดยไม่ต้อง คำสั่งนี้จะแสดงเคอร์เนลที่ติดตั้งยกเว้นหนึ่งที่กำลังทำงานsudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`อยู่ หมายเหตุรุ่นใหม่ล่าสุดสองรายการในรายการ คุณไม่ต้องกังวลกับการทำงานเนื่องจากมันไม่ได้อยู่ในรายการที่นี่ uname -rคุณสามารถตรวจสอบว่ามีการ

สร้างคำสั่งเพื่อลบไฟล์ทั้งหมดใน / boot สำหรับเมล็ดที่ไม่สำคัญกับคุณโดยใช้การขยายรั้งเพื่อให้คุณมีสติ อย่าลืมแยกอิมเมจเคอร์เนลใหม่ล่าสุดและที่สอง ตัวอย่าง: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. คุณยังสามารถใช้ช่วงที่มีไวยากรณ์ {80..84}

sudo apt-get -f install เพื่อล้างสิ่งที่ทำให้ไม่พอใจเกี่ยวกับการติดตั้งบางส่วน

หากคุณพบข้อผิดพลาดที่มีบรรทัดเช่น "ข้อผิดพลาดภายใน: ไม่พบภาพ (/ boot/vmlinuz-3.2.0-56-generic)" ให้เรียกใช้คำสั่งsudo apt-get purge linux-image-3.2.0-56-generic(พร้อมเวอร์ชันที่เหมาะสม)

ท้ายสุดsudo apt-get autoremoveเพื่อล้างแพ็กเกจอิมเมจเคอร์เนลเก่าที่ถูกกำพร้าจากการบูทด้วยตนเอง

คำแนะนำเรียกใช้sudo apt-get updateและsudo apt-get upgradeดูแลการอัปเกรดใด ๆ ที่อาจสำรองไว้ในขณะที่รอให้คุณค้นพบพาร์ติชั่นเต็มรูปแบบ / บูต

Suggestion2 ทบทวนhttps://help.ubuntu.com/community/AutomaticSecurityUpdatesและพิจารณาการตั้งค่า Unattended-Upgrade :: Remove-Unused-Dependencies เป็นจริงใน /etc/apt/apt.conf.d/50unattended-upgrades นี่จะเท่ากับการรัน autoremove หลังจากอัปเดตความปลอดภัยแต่ละครั้งเพื่อให้แน่ใจว่าคุณล้างเมล็ดที่ไม่ได้ใช้ แต่จะลบสิ่งอื่น ๆ ที่คิดว่าไม่ได้ใช้ช่วยให้คุณประหยัดจากปัญหานี้ในอนาคต


3
ฉันมีวิธีล่าสุดสำหรับการรีบูทครั้งต่อไปจากนั้นก่อนหน้านี้ในกรณีที่มีบางอย่างผิดปกติ ปกติฉันมีห้องมากมายจึงไม่เจ็บที่จะมีน้อยและตอบสนองความหวาดระแวงของฉันเพราะมีตัวเลือกการสำรองข้อมูลไม่เพียงพอในทุกสถานการณ์
flickerfly

1
ฉันไม่เคยมีปัญหาที่เกิดจากการอัปเกรดแบบไม่ต้องใส่ข้อมูล ฉันสามารถจินตนาการถึงสถานการณ์ที่สิ่งนี้อาจเป็นปัญหาเกี่ยวกับการพึ่งพาส่วนใหญ่ที่หายไปในการติดตั้งแบบไม่รวมแพคเกจสมมติว่าคุณติดตั้ง php ตัดสินใจถอนการติดตั้งและติดตั้งเวอร์ชันที่ใหม่กว่าจากแหล่งที่มา รุ่นนี้มีการอ้างอิงที่ได้รับจากการติดตั้งก่อนหน้านี้ แต่ไม่ทราบว่ามันยังจำเป็น ครั้งต่อไปที่คุณเรียกใช้การลบการอ้างอิงอัตโนมัติเหล่านั้นจะหายไป หากอัตโนมัติอาจทำให้เกิดความสับสนเล็กน้อย หากคุณไม่ได้ติดตั้งนอกที่เก็บฉันเชื่อว่ามันปลอดภัยอย่างแท้จริง
flickerfly

3
หลังจากเห็นสิ่งนี้ในเซิร์ฟเวอร์เสมือน vsphere หลายแห่ง (ที่มีการอัปเกรดเคอร์เนลโดยอัตโนมัติ แต่ไม่ได้ลบออกในภายหลัง) ฉันได้เขียนสคริปต์ไพ ธ อนเพื่อทำให้เป็นอัตโนมัติ ฉันชอบที่จะมีดวงตาเพิ่มเติมเกี่ยวกับมัน
EvanK

2
หากคุณใช้dpkg --purgeในการบูตเต็มคุณจะได้รับดังต่อไปนี้ $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
flickerfly

1
หลังจากทำความสะอาด / boot apt-get install -f ยังคงไม่ทำงาน การใช้df -iฉันพบว่าฉันยังใช้งาน inodes หมด/เนื่องจากไฟล์จำนวนมากสำหรับซอร์สโค้ดของเคอร์เนลที่เก่ากว่าใน/usr/src
Kristofer

51

มีเอกสารเกี่ยวกับเรื่องนี้ที่https://help.ubuntu.com/community/RemoveOldKernels

โดยสรุป: ใช้

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

เครื่องมือที่สามารถติดตั้งได้ผ่านทางpurge-old-kernels sudo apt install byobuนี่คือคำอธิบายจาก man-page:

โปรแกรมนี้จะลบเคอร์เนลและแพ็คเกจส่วนหัวเก่าออกจากระบบทำให้มีพื้นที่ว่างในดิสก์มากขึ้น มันจะไม่ลบเคอร์เนลที่กำลังทำงานอยู่ โดยค่าเริ่มต้นมันจะเก็บอย่างน้อย 2 เมล็ดล่าสุด แต่ผู้ใช้สามารถแทนที่ค่านั้นโดยใช้--keep พารามิเตอร์

หากคุณต้องการโซลูชันการคัดลอกวาง ReSearchIT Eng แนะนำต่อไปนี้:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge

3
ในกรณีของฉันฉลาดไม่ทำงานเนื่องจากเคอร์เนลที่ค้างอยู่และการแก้ไขที่แนะนำคือ catch-22:
James Bowery

ฉันต้องแก้ไขแพ็คเกจที่เสียหายก่อนด้วยaskubuntu.com/a/304388/284313หลังจากนั้นโซลูชันของคุณทำงาน
James Bowery

3
ฉันคิดว่านี่น่าจะเป็นทางออกที่ได้รับการยอมรับในตอนนี้
Fran Marzoa

3
นี่เป็นคำตอบที่ปลอดภัยกว่ามาก ฉันคิดว่าapt-get autoremove --purgeน่าจะเพียงพอแล้ว
วูดโรว์บาร์โลว์

7

ฉันพบว่ามันง่ายกว่ามากที่จะละทิ้งพาร์ติชันเล็ก ๆ และย้าย/bootไปที่รูท นอกจากนี้ยังป้องกันปัญหาพื้นที่ไม่เพียงพอในอนาคต

ขั้นแรกย้ายข้อมูลของคุณจากพาร์ติชันสำหรับบูตไปที่รูท (เรียกใช้sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

ลบ (หรือความคิดเห็น) /bootรายการใน/etc/fstab:

vim /etc/fstab

อัพเดตด้วงและตรวจสอบให้แน่ใจว่าทุกอย่างถูกต้อง:

update-grub

apt ตอนนี้น่าจะสามารถอัพเกรดได้โดยไม่มีปัญหา

สิ่งนี้ทำให้พาร์ติชันที่ไม่ได้ใช้งาน 200mb (ซึ่งคุณสามารถใช้สำหรับอย่างอื่นถ้าคุณพบว่ามันคุ้มค่ากับปัญหา)


5
นี่เป็นความคิดที่ดี แต่ไม่ได้ผลถ้าคุณต้องการมีการเข้ารหัสดิสก์เต็มรูปแบบสำหรับพาร์ติชันรากของคุณ
Paŭlo Ebermann

ใช่มีหลายกรณีที่ / boot ควรเป็นพาร์ติชันแยกต่างหาก อีกตัวอย่างคือ Grub ไม่สามารถโหลดจากพาร์ติชัน LVM ก่อนหน้านี้
Bastion

4

การลบ Kernels เก่า (เพื่อเพิ่มพื้นที่ว่างใน / boot) โปรดดู: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

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

จากนั้นเรียกใช้

sudo apt-get update

1
นี่เป็นสิ่งเดียวที่ทำงานได้ .... ทางออกที่ดี
จอห์น

คำตอบที่ดีที่สุด! นี่เป็นทางออกเดียวที่ได้ผลสำหรับฉัน autoremove โง่ มันจะพยายามติดตั้งเมล็ดใด ๆ ที่มีการพึ่งพาแบบไม่คาดคิดก่อนที่จะลบออกอย่างเป็นทางการ ฉันไปในแวดวงที่ไม่มีที่ว่างซ้ำแล้วซ้ำอีก คำตอบนี้คือทองคำ
Lonnie Best

3

sudo apt-get autoremove

สิ่งนี้จะลบทั้งหมดยกเว้น 2 เมล็ดสุดท้าย ทดสอบกับ Ubuntu 16.04 LTS เมื่อ/bootอยู่ที่ความจุ 100% และapt-get upgradeล้มเหลวมันเป็นการอัพเกรดเคอร์เนลครั้งสุดท้าย เคอร์เนล autoremove นั้นซ้ำแล้วซ้ำอีกดังนั้นถ้าคุณมีเมล็ดหลายเมล็ดพวกเขาจะถูกลบออกทีละครั้ง ดังนั้นจงอดทน


1

ทำไมทำด้วยมือเมื่อคุณสามารถทำได้ด้วยเครื่องมือ? คุณรู้ว่าคุณจะต้องการมันอีกครั้งใน 30 วินาทีเพราะมันใช้เวลา 30 วินาทีในการผลักดันการปรับปรุง kernal ใหม่ในวันนี้ = P

ฉันแนะนำให้ใช้เครื่องมือนี้bootnukem

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

แล้วก็

sudo bootnukem --dry-run

ลบ--dry-runเมื่อคุณยืนยันแล้วดูปลอดภัย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.