ฉันได้รับมอบหมาย 200 MB สำหรับ/boot
พาร์ติชัน เมื่อใดก็ตามที่ฉันพยายามอัพเดตเคอร์เนลฉันจะได้รับข้อความแสดงข้อผิดพลาดว่าโดยทั่วไปสถานะ/boot
เต็มแล้ว
ฉันสามารถทำอะไรได้บ้างเพื่อล้าง/boot
และลบ / สำรองข้อมูลเมล็ดเก่า
ฉันได้รับมอบหมาย 200 MB สำหรับ/boot
พาร์ติชัน เมื่อใดก็ตามที่ฉันพยายามอัพเดตเคอร์เนลฉันจะได้รับข้อความแสดงข้อผิดพลาดว่าโดยทั่วไปสถานะ/boot
เต็มแล้ว
ฉันสามารถทำอะไรได้บ้างเพื่อล้าง/boot
และลบ / สำรองข้อมูลเมล็ดเก่า
คำตอบ:
ตรวจสอบรุ่นเคอร์เนลของคุณก่อนดังนั้นคุณจะไม่ลบรูปเคอร์เนลที่ใช้งานอยู่:
uname -r
ตอนนี้รันคำสั่งนี้เพื่อดูรายการของเมล็ดที่ติดตั้ง:
dpkg --list 'linux-image*' | grep ^ii
และลบเมล็ดที่คุณไม่ต้องการ / ต้องการอีกต่อไปด้วยการทำสิ่งนี้:
sudo apt-get remove linux-image-VERSION
แทนที่ VERSION ด้วยเวอร์ชันของเคอร์เนลที่คุณต้องการลบ
เมื่อคุณลบเมล็ดเก่าออกแล้วคุณสามารถเรียกใช้สิ่งนี้เพื่อลบแพ็คเกจที่คุณไม่ต้องการได้อีกต่อไป:
sudo apt-get autoremove
และในที่สุดคุณก็สามารถรันสิ่งนี้เพื่ออัพเดตรายการเคอร์เนล grub:
sudo update-grub
sudo dpkg --list 'linux-image*' | grep ^ii
ทำให้ง่ายขึ้นที่จะเห็นเพียงเมล็ดที่ติดตั้งไว้ นอกจากนี้ฉันคิดว่าupdate-grub
ไม่มีอันตราย แต่ไม่จำเป็นอย่างเคร่งครัดที่จะทำงานโดยอัตโนมัติเมื่อคุณถอนการติดตั้งเคอร์เนล
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 remove
head -n -3
apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
sudo apt-get autoremove
ควรจะพอเพียง (โดยปกติจะทิ้งคุณไว้ด้วย 3 เมล็ดสุดท้าย)
/boot
เต็มแล้วดังนั้นapt-get
จะล้มเหลวด้วยรหัสข้อผิดพลาดหรืออื่น ๆ คำตอบด้านล่างเป็นบิต "hackier" (ผมต้องยอมรับว่าผมมีเหล็กตัวเองให้ออกว่าrm -rf
ใน/boot
) แต่เพียงคนเดียวที่มีโอกาสที่จะทำงานในสถานการณ์เช่นนี้
หมายเหตุ: นี่เป็นเพียงถ้าคุณไม่สามารถใช้ 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 หลังจากอัปเดตความปลอดภัยแต่ละครั้งเพื่อให้แน่ใจว่าคุณล้างเมล็ดที่ไม่ได้ใช้ แต่จะลบสิ่งอื่น ๆ ที่คิดว่าไม่ได้ใช้ช่วยให้คุณประหยัดจากปัญหานี้ในอนาคต
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
df -i
ฉันพบว่าฉันยังใช้งาน inodes หมด/
เนื่องจากไฟล์จำนวนมากสำหรับซอร์สโค้ดของเคอร์เนลที่เก่ากว่าใน/usr/src
มีเอกสารเกี่ยวกับเรื่องนี้ที่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
apt-get autoremove --purge
น่าจะเพียงพอแล้ว
ฉันพบว่ามันง่ายกว่ามากที่จะละทิ้งพาร์ติชันเล็ก ๆ และย้าย/boot
ไปที่รูท นอกจากนี้ยังป้องกันปัญหาพื้นที่ไม่เพียงพอในอนาคต
ขั้นแรกย้ายข้อมูลของคุณจากพาร์ติชันสำหรับบูตไปที่รูท (เรียกใช้sudo -s
):
cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot
ลบ (หรือความคิดเห็น) /boot
รายการใน/etc/fstab
:
vim /etc/fstab
อัพเดตด้วงและตรวจสอบให้แน่ใจว่าทุกอย่างถูกต้อง:
update-grub
apt
ตอนนี้น่าจะสามารถอัพเกรดได้โดยไม่มีปัญหา
สิ่งนี้ทำให้พาร์ติชันที่ไม่ได้ใช้งาน 200mb (ซึ่งคุณสามารถใช้สำหรับอย่างอื่นถ้าคุณพบว่ามันคุ้มค่ากับปัญหา)
การลบ 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
sudo apt-get autoremove
สิ่งนี้จะลบทั้งหมดยกเว้น 2 เมล็ดสุดท้าย ทดสอบกับ Ubuntu 16.04 LTS เมื่อ/boot
อยู่ที่ความจุ 100% และapt-get upgrade
ล้มเหลวมันเป็นการอัพเกรดเคอร์เนลครั้งสุดท้าย เคอร์เนล autoremove นั้นซ้ำแล้วซ้ำอีกดังนั้นถ้าคุณมีเมล็ดหลายเมล็ดพวกเขาจะถูกลบออกทีละครั้ง ดังนั้นจงอดทน
ทำไมทำด้วยมือเมื่อคุณสามารถทำได้ด้วยเครื่องมือ? คุณรู้ว่าคุณจะต้องการมันอีกครั้งใน 30 วินาทีเพราะมันใช้เวลา 30 วินาทีในการผลักดันการปรับปรุง kernal ใหม่ในวันนี้ = P
ฉันแนะนำให้ใช้เครื่องมือนี้bootnukem
git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh
แล้วก็
sudo bootnukem --dry-run
ลบ--dry-run
เมื่อคุณยืนยันแล้วดูปลอดภัย