ฉันจะเพิ่มพื้นที่ว่างใน / boot ได้อย่างไร


563

/bootพาร์ติชันของฉันใกล้จะเต็มและฉันได้รับคำเตือนทุกครั้งที่ฉันรีบูตระบบ ฉันลบแพคเกจเคอร์เนลเก่าไปแล้ว (linux-headers ... ) จริง ๆ แล้วฉันได้ทำการติดตั้งเคอร์เนลเวอร์ชันใหม่กว่าที่มาพร้อมกับการอัปเดตอัตโนมัติ

หลังจากติดตั้งเวอร์ชันใหม่แล้วพาร์ติชันก็เกือบเต็มแล้วอีกครั้ง แล้วฉันจะลบอะไรได้อีก มีไฟล์อื่น ๆ ที่เกี่ยวข้องกับภาพเคอร์เนลเก่าหรือไม่?

นี่คือรายการของไฟล์ที่อยู่ใน/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เคอร์เนล


5
เป็นมูลค่าการกล่าวขวัญว่าการติดตั้ง Ubuntu ทุกครั้งจะมีพาร์ติชั่น / บูตแยกต่างหาก - บ่อยครั้งที่มันจะเป็นเพียงพาร์ติชั่นใหญ่ คำตอบนี้ใช้สำหรับผู้ที่มีพาร์ติชัน / boot แยกต่างหาก ผู้ที่ใช้การเข้ารหัส LVM หรือ "เต็มดิสก์" จำเป็นต้องมีการแยก / บูตมิฉะนั้นอาจเป็นทางเลือก
thomasrutter

4
หากใครมีปัญหาเช่นเดียวกับฉัน: หลังจาก / boot ไม่มีพื้นที่เหลือ "apt-get upgrade" จะล้มเหลวเมื่อสร้างไฟล์ initrd ใหม่สำหรับเมล็ดที่ติดตั้งหรือสคริปต์ update-initramfs เชื่อว่าติดตั้งโดยการตรวจสอบ เนื้อหาของ / var / lib / initramfs-tools ในสถานการณ์เช่นนี้เราไม่สามารถลบเมล็ดเก่าโดยใช้ apt-get ได้เนื่องจากพาร์ติชัน fscking / boot ไม่มีพื้นที่เหลือบนอุปกรณ์ หนึ่งสามารถทำได้โดยใช้ "dpkg -P" ตามด้วยการทำความสะอาดรายการที่เกี่ยวข้องใน / boot (เพื่อเพิ่มพื้นที่ว่าง) และ / var / lib / initramfs- เครื่องมือ (ภาพเริ่มต้นจะไม่ถูกสร้างขึ้น)
wojci

3
จุดสำคัญสำหรับคำตอบที่ถูกต้องคือพวกเขาบอกให้คุณลบแพ็กเกจที่มีเคอร์เนลเวอร์ชั่นเก่ากว่า หน้าเว็บหลายแห่งที่จัดการปัญหานี้ขอแนะนำให้ลบไฟล์ในพาร์ทิชัน / boot โดยตรง อาจใช้งานได้สักพัก แต่ในที่สุดคุณอาจอัพเดตแพ็คเกจที่สร้างไฟล์ที่หายไปสำหรับเคอร์เนลเวอร์ชันที่มีแพ็คเกจซึ่งจะทำให้คุณไม่มีพื้นที่เหลือ
kgrittn

คำตอบ:


629

คุณมีเมล็ดที่ไม่ได้ใช้มาก ลบทั้งหมดยกเว้นเมล็ดสุดท้ายด้วย:

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และใช้เมื่อสร้างโมดูลเคอร์เนล out-tree (เช่นไดร์เวอร์ nvidia และ virtualbox ที่เป็นกรรมสิทธิ์) ผู้ใช้ส่วนใหญ่ควรลบแพ็คเกจส่วนหัวเหล่านี้หาก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]+//')")

16
คำตอบที่ยอดเยี่ยม ข้อมูลอีกหนึ่งชิ้นจะช่วยได้: คุณจะบอกได้อย่างไรว่าเมล็ดใดที่คุณใช้อยู่ สันนิษฐานว่าคุณก็ไม่สามารถถือว่าเป็นคนสุดท้าย ... แก้ไข : และมันมีลักษณะuname -aเหมือนคำตอบคือ อาจดีที่สุดเพื่อให้แน่ใจว่าคุณไม่มีการรีสตาร์ทระหว่างการติดตั้งใหม่สำหรับเคอร์เนลที่ค้างอยู่ (เหมือนที่ฉันทำ แต่ฉันสังเกตเห็นความไม่ตรงกันระหว่างuname -aและเคอร์เนล "ล่าสุด")
TJ Crowder

5
@freddyb เสร็จสิ้น โปรดทราบว่าคำสั่งพิมพ์ / ลบเมล็ดนอกเหนือจากที่โหลด / บู๊ตแล้ว
Lekensteyn

9
หากการล้าง apt-get ล้มเหลวเนื่องจากการขึ้นต่อกันที่ไม่คาดคิดคุณสามารถทำตามคำแนะนำได้ที่askubuntu.com/questions/171209/…
svandragt

11
คำตอบที่ละเอียดมากและยังใช้งานได้ ... และยังจำเป็นในปี 2557 ค่อนข้างไร้สาระที่เครื่องมือ GUI ไม่ได้ทำโดยอัตโนมัติ
allprog

6
@ byf-ferdy เคอร์เนลเป็นส่วนสำคัญของระบบปฏิบัติการหากเวอร์ชั่นล่าสุดไม่สามารถทำงานกับฮาร์ดแวร์ของคุณได้อย่างเต็มที่คุณยังสามารถเลือกอีกอันหนึ่งที่จะทำการบูตได้ คุณลักษณะที่ดีอาจเป็นสิ่งที่จะลบเมล็ดที่ติดตั้งโดยอัตโนมัติทั้งหมดที่เก่ากว่าหนึ่งเดือน (ยกเว้นสำหรับสองล่าสุด)
Lekensteyn

217

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

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

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


สิ่งนี้ยังตรงกับ linux-libc-dev: amd64
Frederick Nord

การลบโดยไม่ตั้งใจของ "linux-libc-dev: amd64" จะทำให้เกิดอะไร
ConfusedStack

@ FrerickNord ขอบคุณสำหรับหัวขึ้น แก้ไขสิ่งนี้ มันจะทำให้เกิดปัญหาในการรวบรวมโปรแกรม c
dward

8
คำสั่งฟังดูดี แต่เมื่อฉันเรียกใช้ฉันได้รับข้อผิดพลาดเดียวกับที่ฉันได้รับเมื่อฉันต้องการติดตั้งบางอย่างและไม่สามารถทำได้เนื่องจากการบูตเต็ม: --------------- ----------- แพ็คเกจต่อไปนี้มีการพึ่งพาแบบไม่แน่นอน: linux-image-extra-4.2.0-27-generic: ขึ้นอยู่กับ: linux-image-4.2.0-27-generic แต่มันจะไม่เกิดขึ้น ที่จะติดตั้ง linux-image-extra-4.2.0-30-generic: ขึ้นอยู่กับ: linux-image-4.2.0-30-generic แต่มันจะไม่ถูกติดตั้ง
Alex

109
sudo apt-get autoremove

คำสั่งนี้ทำงานโดยอัตโนมัติ


7
apt-get AUTOremove เป็นชื่อที่แนะนำเป็นการดำเนินการอัตโนมัติซึ่งระบบจะใช้ "เดาที่ดีที่สุด" ในสิ่งที่คุณพยายามจะทำ ไม่ควรนำมาใช้แทนการจัดการระบบสามัญสำนึก ปัญหาเกี่ยวกับวิธีการนี้: หากคุณ (หรืออัปเดต) ลบแพคเกจที่เป็นส่วนหนึ่งของรายการการพึ่งพานี้ฟังก์ชันลบอัตโนมัติต้องการลบแพคเกจอื่น ๆ ทั้งหมดในรายการการพึ่งพาทำให้คุณมีระบบโดยไม่ต้องใช้เดสก์ท็อป แม้จะมีระบบที่ใช้งานไม่ได้ก็ตาม)
Rinzwind

การอ้างอิง: 1 ในหลาย ๆ แหล่งสำหรับความคิดเห็นนี้ด้านบน: linuxquestions.org/questions/debian-26/…
Rinzwind

7
หากติดตั้ง linux-image-generic และไม่ได้ติดตั้งเมล็ดใหม่อย่างชัดเจนสิ่งนี้จะลบเมล็ดเก่า สามัญสำนึกคือการไม่ยอมรับการเปลี่ยนแปลงใด ๆ กับระบบโดยไม่ได้อ่านก่อน หากใช้สามัญสำนึกก่อนที่จะใช้คำสั่งนี้จะไม่มีปัญหา
mchid

1
@Rinzwind - คำสั่งนี้ใช้พื้นที่ว่างในดิสก์ของฉัน 250 mb โดยลบ 'linux headers' เก่า
Chinmaya B

3
autoremove ใช้งานได้หากใช้ก่อนที่จะมีเงื่อนไขไม่อยู่ในพื้นที่ อย่างไรก็ตามเมื่อ apt หมดพื้นที่และยกเลิกการใช้งาน (และในที่สุดผู้ใช้สังเกตเห็นปัญหา) มันก็สายเกินไปที่จะเรียกใช้ autremove หรือโซลูชันที่ใช้ apt อื่น ๆ หากเป็นกรณีของคุณลองใช้หนึ่งในโซลูชั่นที่ใช้ dpkg
user535733

40

Synaptic Package Manager สามารถใช้เพื่อเลือกและลบอิมเมจเคอร์เนลเก่าได้อย่างง่ายดาย สกรีนช็อตของผู้จัดการแพคเกจ Synaptic

หากคุณยังไม่ได้ติดตั้ง Synaptic:

sudo apt-get install synaptic

เริ่มแอปพลิเคชั่นแล้วเลือกตัวเลือกที่แสดง

คุณควรจะไฮไลต์แพ็คเกจ "linux-" ทั้งหมดที่มีรุ่น "2.6.x" โดยที่ x อยู่ระหว่าง 31 ถึง 38 ตามไฟล์ในโฟลเดอร์ / boot ของคุณ

คลิกขวาแต่ละแพ็กเกจ linux เหล่านั้นและเลือกตัวเลือก "Mark for Complete Removal" ในที่สุดคลิกที่ปุ่มใช้ จะเป็นการลบไฟล์ทั้งหมดและไฟล์ที่เกี่ยวข้อง /bootตอนนี้โฟลเดอร์ของคุณควรจะเป็นระเบียบมากขึ้น


ฉันอายุ 14.04 ฉันจัดการสถานการณ์นี้ในอดีตผ่านทางบรรทัดคำสั่ง แต่ฉันตัดสินใจลองใช้วิธีนี้ในวันนี้ ... สำหรับฉันรูปภาพ linux ของฉันตั้งอยู่ภายใต้การติดตั้ง (ด้วยตนเอง) ไม่ได้ติดตั้ง (ภายในเครื่องหรือล้าสมัย)
Ryan

8
ไม่นะ. ฉันไม่สามารถติดตั้ง Synaptic ได้เพราะไม่มีที่ว่าง/boot!
John McGehee

@JohnMcGehee fsck และแยกควรแก้ไขปัญหานั้นให้คุณ
FlipMcF

25

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

ทำผ่านบรรทัดคำสั่ง หากคุณกำลังทำสิ่งนี้ผ่านทางรีโมตให้ใช้สิ่งที่ต้องการเช่น 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

23

นี่คือคำตอบใหม่ที่จะเป็นคำถามที่เก่า แต่เป็นวิธีที่ง่ายในการทำความสะอาดสิ่งนี้ (และอื่น ๆ ) คือการติดตั้งUbuntu Tweak วิธีติดตั้ง :

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

จากนั้นคุณสามารถเรียกใช้ Ubuntu Tweak ไปที่แท็บ "ภารโรง" และจากที่นี่เป็นเรื่องของการคลิกสามครั้ง:

อูบุนตูปรับแต่งภารโรงสำหรับเมล็ดเก่า

เป็นการดีกว่าถ้าคุณปล่อยเคอร์เนลตัวสุดท้าย (คุณไม่รู้) หรือเคอร์เนลที่ใช้งานได้ดีเพื่อความปลอดภัย แต่มันปรับแต่งได้ง่าย

คุณสามารถใช้เครื่องมือเดียวกันเพื่อล้างสิ่งต่างๆมากมาย - เพียงจำไว้ว่าถ้าคุณล้างแคชภาพขนาดย่อหรือแคช TB ระบบจะต้องสร้างใหม่หากจำเป็น


ฉันพยายามติดตั้ง Ubuntu tweak และไปที่เว็บไซต์ของที่เก็บ มันบอกว่ามันเป็นเพียง 13.10 และก่อน คุณมีเวอร์ชันอัปเดตสำหรับ 15.04 หรือไม่
JayCouture.com

@ JayCouture.com เวอร์ชันในเว็บไซต์นี้มีไว้สำหรับ 14.04 ("สำหรับ 13.10 และก่อนหน้า" เป็นลิงก์ไปยังรุ่นเก่ากว่า) ฉันไม่สนใจถ้ามีรุ่นสำหรับ 14.10 หรือ 15.04
Rmano

19

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

phrogz@planar:/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ขนาดของฉันหรือทำอย่างอื่น


คุณไม่ควรมีพาร์ติชั่น / บูตแยกต่างหากในตอนแรกหรือคุณควรเพิ่มขนาดของมันเนื่องจาก 100mb นั้นเล็กเกินไป
psusi

1
ขอบคุณฉันลบผ่าน:sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt

2
และsudo dpkg --remove linux-image-3.5.0-28*สำหรับรูปภาพให้ตรวจสอบผ่านdf -h
TiloBunt

ขอบคุณสิ่งนี้ทำหน้าที่ฉันด้วย ฉันเอาเมล็ดเก่าไม่กี่ ( ไม่หนึ่งผมก็กำลังใช้) apt-get -f installและจากนั้นก็ทำ นอกจากนี้อย่าลืมที่จะทำในภายหลังเพื่อapt-get autoremoveลบคนอื่น ๆ ที่ไม่จำเป็นออกไป
Yajo

15

คุณสามารถหยุดใช้พาร์ติชัน / บูตแยกต่างหากจากนั้นคุณจะไม่มีพื้นที่ จำกัด เช่นนั้น เมื่อต้องการทำสิ่งนี้ให้ถอนติดตั้งพาร์ติชันแล้วติดตั้งที่อื่นและคัดลอกไฟล์ทั้งหมดไปยังไดเร็กทอรี / boot ในรูทพาร์ติชันของคุณจากนั้นลบรายการออกจาก / etc / fstab และติดตั้งด้วงใหม่ ตัวอย่างเช่น (คุณจะต้องใช้พาร์ติชันที่ถูกต้อง):

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

จากนั้นคุณสามารถใช้ gparted เพื่อลบพาร์ติชันเก่า / บูตและอาจขยายพาร์ติชันรูทเพื่อใช้พื้นที่นั้น ในการขยายพาร์ติชั่นรูทคุณจะต้องบูตจาก livecd และพื้นที่ว่างจะต้องอยู่ทางขวาทันที หากพาร์ติชั่น / boot อยู่ทางด้านซ้ายของรูทพาร์ติชั่นคุณจะต้องย้ายพาร์ติชั่นรูทไปทางซ้ายก่อนจากนั้นขยายออก แต่อาจใช้เวลานานมากดังนั้นจึงอาจไม่คุ้มค่า ปัญหา


6
การย้าย / บูตพาร์ติชันหลักของฉันไม่ใช่วิธีแก้ปัญหาสำหรับฉันเนื่องจากทุกอย่าง แต่ / boot ถูกเข้ารหัส คุณไม่รู้จากคำถามของฉันขอโทษ
user6722

นี่เป็นวิธีแก้ปัญหาที่ดีถ้าโซลูชันข้างต้นไม่ทำงานเนื่องจากไม่มีที่ว่างสำหรับบูตโวลุ่มหรือหากคุณซ้ำ ๆ มีปัญหา "พื้นที่ไม่เพียงพอ" โปรดอ่านก่อนว่าทำไมบางครั้งจำเป็นต้องมีพาร์ติชัน / boot แม้ว่า: ( help.ubuntu.com/community/DiskSpace )
svandragt

@ svandragt โดยทั่วไปไม่มีเหตุผลที่ต้องใช้ / boot partition ในทุกวันนี้ เกี่ยวกับสิ่งเดียวที่เหลืออยู่คือถ้าไบออสของคุณเสียและมองไม่เห็นดิสก์ทั้งหมดและเครื่องใด ๆ ที่ทำในทศวรรษที่ผ่านมาไม่มีข้อ จำกัด เช่นนี้ ขณะนี้มีการจัดการกรณีแบบดั้งเดิมอื่น ๆ เช่นการใช้งานการตรวจค้นหรือ LVM อย่างเหมาะสมโดย grub2
psusi

มีเหตุผลบางประการในการมีพาร์ติชันสำหรับบูตแยกต่างหาก แต่ฉันไม่แน่ใจว่าผลประโยชน์คุ้มค่ากับการตั้งค่าความซับซ้อนที่เพิ่มขึ้น 1. ระบบปฏิบัติการจะได้ประโยชน์จากการบูทเร็วขึ้นผ่านทาง ext2 2. ความปลอดภัยสามารถเพิ่มขึ้นได้โดยการติดตั้ง / boot เช่น RO (รูทคิท ฯลฯ ) หรือแม้กระทั่งยังไม่ได้ต่อเชื่อมที่ os runtime 3. ด้วง (1) มี (มี) ปัญหาบางอย่างกับ ext4 ยัง 4. จำเป็นสำหรับการเรียกใช้ lvm (grubv1) แม้ว่าสิ่งนี้จะไม่ใช้กับการตั้งค่า ubuntu เริ่มต้น
David Cahill

lsblkสามารถใช้เพื่อกำหนดพาร์ติชันที่เป็นอะไร
Mr Purple

9

การใช้สิ่งที่ดีที่สุดจากคำตอบข้างต้นวิธีการที่ฉันพยายามและจริงคือ:

  • 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ด้วยรายการของเคอร์เนลบิลด์ที่คุณต้องการลบ - นี่คือบิลด์ทั้งหมดที่แสดงรายการโดยคำสั่งก่อนหน้าซึ่งเก่ากว่าเคอร์เนลที่รันอยู่ในปัจจุบัน ตรวจสอบให้แน่ใจว่าคุณไม่ได้ลบเคอร์เนลที่รันอยู่ในปัจจุบัน - ระบบของคุณจะไม่สามารถบูตได้ คุณอาจต้องเปลี่ยนรุ่นเคอร์เนลจาก3.16.0เป็นสิ่งที่ติดตั้งบนระบบของคุณ
  • อีกทางเลือกหนึ่งทำเพิ่มเติมsudo apt-get autoremove- สิ่งนี้จะลบการพึ่งพาใด ๆ ที่เหลืออยู่ของเมล็ดเก่าซึ่งไม่ต้องการโดยกระแสในปัจจุบันอีกต่อไปทำให้มีพื้นที่ว่างเพิ่มขึ้น

คุณอาจมีไฟล์ส่วนหัวโดยไม่ต้องติดตั้งเคอร์เนลเวอร์ชันที่ตรงกันหรือในทางกลับกันเพียงรวมเวอร์ชันทั้งหมดเหล่านี้ไว้ในคำสั่ง 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ตัวอย่างเช่นในหนึ่งในระบบของฉันคำสั่งที่ในที่สุดก็ทำงานเป็น
  • หากคุณได้รับข้อผิดพลาดอื่น ๆ ขอความช่วยเหลือ - คุณอาจมีปัญหาแตกต่างจากที่คุณคิด

@ user535733 กรณีปกติ (อย่างน้อยที่ฉันยังคงทำงานอยู่) คือยังมีพื้นที่บางส่วน/bootเพียงพอสำหรับแพคเกจเคอร์เนลอื่น ในกรณีดังกล่าวข้างต้นได้ผลดี อย่างไรก็ตามรู้สึกฟรีเพื่อเพิ่มdpkgคำสั่งที่สอดคล้องกัน สำหรับpurgeไม่มันไม่ใช่ 'แรงลบ' สิ่งที่แตกต่างจากremoveคือลบไฟล์กำหนดค่าด้วย ตั้งแต่ / ตราบใดที่เคอร์เนลแพ็คเกจติดตั้งไม่มีไฟล์กำหนดค่าremoveและpurgeจะทำเช่นเดียวกันสำหรับแพ็คเกจเคอร์เนล
user149408

เพิ่มสัญลักษณ์ลำดับที่สี่ด้วยคำสั่ง dpkg ที่สอดคล้องกัน
user535733

4

สำหรับฉันทั้งสองapt-get purgeและdpkg --removeทั้งสองล้มเหลว ดังนั้นผมจึงต้องลบภาพคู่ของเคอร์เนลเก่าจาก / boot rm -fด้วย


4
นี่ไม่ใช่วิธีที่ดีในการลบแพ็คเกจ แม้ว่าคำตอบนี้จะไม่เฉพาะเจาะจงมากนักเกี่ยวกับสาเหตุที่ทำให้การลบออกไม่ถูกต้อง แต่ฉันแน่ใจว่าข้อมูลนั้นได้รับ (แยกจากคำถามแน่นอน) เราสามารถลองหาสาเหตุของปัญหาได้
thomasrutter

2
ฉันเชื่อว่ามันล้มเหลวเพราะ/bootพาร์ทิชันเต็ม คำสั่งนี้จะพยายามอัปเกรดเคอร์เนลเป็นล่าสุดและหยุดทำงานNo space left on deviceในขณะที่สร้างinitrd.img
vp_arth

1
คำเตือนการลบไฟล์โดยตรงอาจทำให้เกิดปัญหาเนื่องจากการอัปเดตแพคเกจ linux-firmware สามารถสร้างไฟล์ initrd.img ใหม่สำหรับทุกเวอร์ชั่นที่คิดว่าติดตั้งตามข้อมูลแพ็คเกจ ดู: askubuntu.com/questions/865577/…
kgrittn

1
ขอบคุณนี่เป็นทางออกสุดท้ายที่ช่วยชีวิตเมื่อไม่มีสิ่งใดได้ผล
Jeff Puckett

4

รายชื่อเมล็ดทั้งหมด:

dpkg --list 'linux-image*'

แสดงเคอร์เนลปัจจุบัน:

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]'

ตรวจสอบให้แน่ใจว่าเคอร์เนลปัจจุบันของคุณไม่อยู่ในรายการนั้น

ลบทั้งหมดยกเว้นเมล็ดปัจจุบัน:

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โดยตรงจาก / ไดเรกทอรีบูต

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

rm /boot/*-3.13.0-119*; 

หมายเหตุ:โปรดตรวจสอบภาพเคอร์เนลปัจจุบันอีกครั้งก่อนที่จะลบภาพใด ๆ


2

ฉันลบแพคเกจเคอร์เนลเก่าไปแล้ว (linux-headers ... )

linux-headers-*ไม่ใช่เมล็ด linux-image-*แพคเกจเคอร์เนลเป็นคนตั้งชื่อ ชุดที่linux-headers-*มีชื่อว่าเป็นแพ็กเกจการพัฒนาสำหรับการรวบรวมโมดูลเคอร์เนล: พวกเขาไม่ได้อยู่ในไดเรกทอรี / boot และไม่จำเป็นสำหรับการใช้งานทั่วไปของคุณในแต่ละวัน

ไฟล์ที่คุณระบุไว้ใน / boot จะรวมอิมเมจเคอร์เนลเก่าหลายอัน ( vmlinuz*) และอิมเมจที่คอมไพล์อิมเมจ ( 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

1

ฉันมีปัญหานี้และอื่น ๆ เมื่อฉันลบบาง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กลับไปในyesupdate-initramfs.conf


1

ฉันแสดงให้เห็นว่าในปี 2017 คำถามนี้มีความคิดเห็นและคำตอบใหม่ แต่ไม่มีคำตอบเดียวที่ฉันคิดว่ามีประโยชน์มากที่นี่:

อูบุนตูในฐานะที่เป็นเดสก์ท็อประบบปฏิบัติการที่ใช้งานง่าย ๆ ในชีวิตประจำวันไม่มีเหตุผลที่จะต้องติดตั้งด้วย \ boot partition แยกต่างหากและบางอย่างเช่นนี้จะไม่ให้อะไรกับ "ผู้ใช้ทั่วไป" ... ดังนั้นทางออกคือการติดตั้งใหม่ วิธีที่คุณจะไม่มีปัญหาดังกล่าว

PS: คำตอบของฉันสามารถลบหรือเพิ่มในคำตอบที่ยอมรับได้ ... (ฉันคิดว่ามันจะช่วยให้คนบางคนด้วยวิธีนี้)


1

ยูทิลิตี้ที่มีประโยชน์สุดยอดที่จะช่วยล้างพาร์ติชันสำหรับบูตของคุณ

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

ใช้ความเสี่ยงของคุณเอง แต่มันเหมาะกับฉัน:

sudo bootnukem

ทำไมต้องลงคะแนน
โจนาธาน

0

ในความถนัดหรือ synaptic มีส่วน "บรรจุภัณฑ์เก่าหรือติดตั้งด้วยตนเอง" ควรมีแพ็คเกจลินุกซ์เก่าที่นั่น


0

มีสคริปต์ทุบตีที่ฉันเขียนให้ด้านล่างที่ทำให้กระบวนการเป็นมิตรกับผู้ใช้อีกเล็กน้อย

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 noob ฉันไม่สามารถแสดงความคิดเห็นได้จนกว่าชื่อเสียง = 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 เพื่อบ่งบอกว่ามันแข็งแรงอีกครั้ง


1
โพสต์ที่คุณต้องการคือaskubuntu.com/questions/171209/…
muru

@muru ใช่แล้ว ... ฉันขอแนะนำให้ผู้โพสต์ต้นฉบับต้องการคำแนะนำนี้ด้วย เมื่อ / boot เต็มเวอร์ชั่นสคริปต์เหล่านี้ซึ่งพยายามแก้ไขมันก็ล้มเหลวด้วยเช่นกัน / boot เต็ม
กรณีจัสติน

มีปัญหาที่คล้ายกันสองประการ: ก) ที่ระบบเตือนว่าดิสก์ของคุณเต็ม แต่apt-getมีพื้นที่เพียงพอที่จะดำเนินการต่อและ b) ซึ่งapt-getล้มเหลวเนื่องจากดิสก์เต็มเกินไป นั่นคือโพสต์อื่น ๆ
muru


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

พาร์ติชั่นบูต / อาจจะแปลกไปบ้างในบางครั้ง

ห้ามเริ่มลบไฟล์ kernal โดยตรง

ขั้นตอนในการติดตาม

  1. ตรวจสอบ kernal ที่ติดตั้งอยู่ในปัจจุบันที่ใช้โดยระบบ linux

    uname -r

    สิ่งนี้จะให้ชื่อของอิมเมจ kernal ที่ติดตั้งอยู่บนระบบ

  2. ตอนนี้เริ่มลบไฟล์พิเศษยกเว้นไฟล์ที่ติดตั้งไว้ในระบบของคุณ

    apt-get remove linux-image-XXXXX

  3. ยังลบไฟล์ส่วนหัวเช่นกัน

    apt-get remove linux-headers-XXXXX

  4. นอกจากนี้ยังอาจมีเงื่อนไขที่aptหยุดทำงานในกรณีนั้นสลับไปที่ / boot

    cd /boot

  5. เริ่มลบไฟล์ด้วยตนเอง แต่ระวังอย่าลืมลบinstalled one'sไฟล์ kernal ออกจากระบบของคุณ

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. หลังจากลบไฟล์ที่ถูกต้องล้างการติดตั้งบางส่วนถ้ามี

    apt-get -f install

  7. ลบไฟล์พิเศษที่อยู่ที่นั่นเนื่องจากไฟล์สำหรับทำความสะอาดด้วยตนเอง

    apt-get autoremove

  8. อัพเดตด้วง

    update-grub

  9. อัปเดตแพ็กเกจระบบล่าสุดของคุณ

    apt-get update


-1

ถ้าคุณไม่สามารถลบไฟล์ที่ไม่ได้ใช้งานมากขึ้นและถ้าคุณมีพาร์ทิชันอื่น ๆ ที่มี / หรือพื้นที่ว่างบนอุปกรณ์เดียวกันคุณสามารถปรับขนาดของพาร์ทิชัน / boot โดยแยก / gparted (มันรวมอยู่ในสื่อการติดตั้งด้วย)

คำเตือน : การปรับขนาดพาร์ติชันเป็นการดำเนินการที่เป็นอันตรายบันทึกข้อมูลสำคัญของคุณลงในสื่อบันทึกอื่นก่อนดำเนินการ!


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