Làm cách nào để giải phóng thêm dung lượng trong / boot?


563

/bootPhân vùng của tôi đã gần đầy và tôi nhận được cảnh báo mỗi khi khởi động lại hệ thống của mình. Tôi đã xóa các gói kernel cũ (tiêu đề linux ...), thực sự tôi đã làm điều đó để cài đặt phiên bản kernel mới hơn đi kèm với các bản cập nhật tự động.

Sau khi cài đặt phiên bản mới đó, phân vùng gần đầy lại. Vì vậy, những gì tôi có thể xóa? Có một số tập tin khác liên quan đến hình ảnh kernel cũ?

Đây là danh sách các tập tin nằm trong /bootphân vùng của tôi :

:~$ 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

Hiện tại, tôi đang sử dụng 3.0.0-14-generickernel.


5
Điều đáng nói là không phải mọi cài đặt Ubuntu sẽ có một phân vùng khởi động / riêng biệt - thường thì tất cả sẽ chỉ là một phân vùng lớn. Câu trả lời này áp dụng cho những người có phân vùng khởi động / riêng biệt. Những người sử dụng mã hóa LVM hoặc "toàn bộ đĩa" cần có một khởi động / khởi động riêng, nếu không nó có thể là tùy chọn.
thomasrutter

4
Nếu bất cứ ai khác có cùng vấn đề với tôi: after / boot không còn chỗ trống, "apt-get Nâng cấp" sẽ thất bại khi tạo lại các tệp initrd cho các kernel đã được cài đặt hoặc tập lệnh update-initramfs được cài đặt bằng cách kiểm tra nội dung của / var / lib / initramfs-tools. Trong tình huống này, người ta không thể loại bỏ các hạt nhân cũ bằng apt-get vì phân vùng fscking / boot không còn chỗ trống trên thiết bị. Người ta có thể làm điều này bằng cách sử dụng "dpkg -P", sau đó dọn sạch mục nhập tương ứng trong / boot (để có không gian trống) và / var / lib / initramfs-tools (hình ảnh initrd sẽ không được tạo).
wojci

3
Một điểm quan trọng cho câu trả lời chính xác là họ bảo bạn loại bỏ các gói chứa các phiên bản cũ hơn của kernel. Nhiều trang web giải quyết vấn đề này khuyên bạn nên xóa trực tiếp các tệp trong phân vùng / boot; có thể hoạt động được một lúc, nhưng cuối cùng bạn có thể cập nhật gói tạo lại các tệp bị thiếu cho các phiên bản kernel có gói, do đó sẽ khiến bạn hết dung lượng.
kgrittn

Câu trả lời:


629

Bạn đã có rất nhiều hạt nhân chưa sử dụng. Loại bỏ tất cả trừ các hạt nhân cuối cùng với:

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

Đây là viết tắt của:

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

Loại bỏ các linux-image-x.x.x-xgói cũng sẽ loại bỏ linux-image-x.x.x-x-generic.

Các tiêu đề được cài đặt vào /usr/srcvà được sử dụng khi xây dựng các mô-đun hạt nhân ngoài cây (như trình điều khiển nvidia và hộp ảo độc quyền). Hầu hết người dùng nên xóa các gói tiêu đề này nếu gói kernel ( linux-image-*) không được cài đặt.

Để liệt kê tất cả các hạt nhân đã cài đặt, hãy chạy:

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

Một lệnh để hiển thị tất cả các hạt nhân và tiêu đề có thể được loại bỏ, ngoại trừ kernel đang chạy hiện tại :

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

Nó chọn tất cả các gói có tên bắt đầu bằng linux-headers-<some number>hoặc linux-image-<some number>, in tên gói cho các gói đã cài đặt và sau đó loại trừ hạt nhân được tải / chạy hiện tại (không nhất thiết phải là hạt nhân mới nhất !). Điều này phù hợp với khuyến nghị thử nghiệm hạt nhân mới hơn trước khi loại bỏ các hạt nhân cũ hơn, đã biết để làm việc.

Vì vậy, sau khi nâng cấp hạt nhân và khởi động lại để kiểm tra nó, bạn có thể loại bỏ tất cả các hạt nhân khác bằng:

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
Câu trả lời tuyệt vời. Một thông tin nữa sẽ giúp ích: Làm thế nào bạn có thể biết (chắc chắn) hạt nhân nào bạn đang sử dụng? Có lẽ bạn không thể cho rằng đó là câu cuối cùng ... Chỉnh sửa : Và có vẻ như câu trả lời là vậy uname -a. Có lẽ tốt nhất để đảm bảo bạn không có kernel đang chờ khởi động lại để cài đặt mới (như tôi đã làm; nhưng tôi lưu ý sự không phù hợp giữa uname -avà kernel "mới nhất").
TJ Crowder

5
@freddyb Xong. Lưu ý rằng các lệnh in / loại bỏ các hạt nhân khác với các lệnh được tải / khởi động .
Lekensteyn

9
Nếu việc thanh lọc apt-get không thành công do phụ thuộc không được đáp ứng thì bạn có thể làm theo lời khuyên tại askubfox.com/questions/171209/iêu
svandragt

11
Câu trả lời rất kỹ lưỡng và vẫn hoạt động ... và vẫn cần thiết trong năm 2014. Thật nực cười là nó vẫn không tự động được thực hiện bởi các công cụ GUI.
allprog

6
@ byf-ferdy Hạt nhân là một phần thiết yếu của HĐH, nếu phiên bản mới nhất bằng cách nào đó không hoạt động hoàn toàn với phần cứng của bạn, thì bạn vẫn có thể chọn một phiên bản khác để khởi động. Một tính năng đẹp có lẽ sẽ là thứ loại bỏ tất cả các hạt nhân được cài đặt tự động cũ hơn một tháng (ngoại trừ hai hạt mới nhất).
Lekensteyn

217

Phân vùng khởi động của bạn đã đầy. Vì đây là bản cập nhật kernel, các tệp này sẽ được sao chép vào phân vùng khởi động, do đó bạn cần phải dọn sạch. Đây là một bài đăng trên blog sẽ chỉ cho bạn cách xóa các ảnh kernel cũ bằng một lệnh. Tôi sẽ đưa ra một bản tóm tắt cơ bản của phương pháp. Sử dụng lệnh này để in ra phiên bản hiện tại của kernel của bạn:

uname -r

Sau đó sử dụng lệnh này để in ra tất cả các hạt nhân bạn đã cài đặt không phải là hạt nhân mới nhất của bạn:

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

Hãy chắc chắn rằng kernel hiện tại của bạn không có trong danh sách đó. Lưu ý rằng đây là phần lớn của lệnh cuối cùng (xuống bên dưới). Để gỡ cài đặt và xóa các hạt nhân cũ này, bạn sẽ muốn chuyển các đối số này sang:

sudo apt-get -y purge

Bây giờ chúng ta có thể làm mọi thứ chúng ta muốn bằng cách kết hợp hai lệnh cuối cùng này vào mớ hỗn độn không tưởng này:

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

Và một lệnh đó sẽ lo tất cả mọi thứ cho bạn. Tôi sẽ xác nhận rằng điều này không hoạt động hoàn hảo nhưng không bao giờ tin bất cứ ai trên internet. :) Để biết thêm thông tin, bài đăng trên blog cung cấp một lời giải thích rất tốt về những gì từng phần của lệnh thực hiện để đọc qua nó để bạn hài lòng rằng nó làm những gì bạn muốn nó làm.


cái này cũng phù hợp với linux-libc-dev: amd64
Frederick Nord

việc loại bỏ "linux-libc-dev: amd64" sẽ vô tình gây ra điều gì?
ConfuseStack

@FrederickNord cảm ơn vì đã ngẩng cao đầu. Đã sửa lỗi này. Nó sẽ gây ra một số khó khăn khi biên dịch chương trình c.
dward

9
Lệnh này nghe có vẻ tốt, nhưng khi tôi chạy nó, tôi cũng gặp lỗi tương tự khi tôi muốn cài đặt một cái gì đó và nó không thể thực hiện được vì boot đã đầy: --------------- ----------- Các gói sau có phụ thuộc chưa được đáp ứng: linux-image-Extra-4.2.0-27-generic: Depends: linux-image-4.2.0-27-generic nhưng nó sẽ không hoạt động để được cài đặt linux-image-Extra-4.2.0-30-generic: Tùy thuộc: linux-image-4.2.0-30-generic nhưng nó sẽ không được cài đặt
Alex

109
sudo apt-get autoremove

Lệnh này đang thực hiện công việc tự động.


7
Như tên cho thấy, apt-get AUTOremove là một hoạt động tự động trong đó hệ thống lấy "dự đoán tốt nhất" những gì bạn đang cố gắng đạt được. Nó không nên được sử dụng như là một thay thế cho quản trị hệ thống ý thức chung. Vấn đề với cách tiếp cận này: Nếu bạn (hoặc một bản cập nhật) xóa gói là một phần của danh sách phụ thuộc này, chức năng tự động xóa muốn xóa tất cả các gói khác trong danh sách phụ thuộc, khiến bạn có một hệ thống không có máy tính để bàn hoạt động (và đôi khi thậm chí với một hệ thống hoàn toàn bị hỏng).
Rinzwind

Tham khảo: 1 trong nhiều nguồn cho nhận xét này ở trên: linuxquestions.org/questions/debian-26/ mẹo
Rinzwind

7
nếu linux-image-generic được cài đặt và các kernel mới không được cài đặt rõ ràng, điều này sẽ loại bỏ các kernel cũ. Tâm lý chung là không chấp nhận bất kỳ thay đổi nào đối với hệ thống mà không đọc chúng trước. Nếu ý thức chung đã được sử dụng trước khi sử dụng lệnh này thì sẽ không có rắc rối nào.
mchid

1
@Rinzwind - Lệnh này đã lấy hết 250 mb dung lượng ổ đĩa của tôi bằng cách xóa 'tiêu đề linux' cũ
Chinmaya B

3
autoremove hoạt động nếu được sử dụng trước khi tồn tại một điều kiện ngoài không gian. Tuy nhiên, một khi apt hết dung lượng và hủy bỏ (và cuối cùng người dùng cũng nhận thấy vấn đề), đã quá muộn để chạy autremove hoặc bất kỳ giải pháp dựa trên apt nào khác. Nếu đó là trường hợp của bạn, hãy thử một trong những giải pháp dựa trên dpkg.
dùng535733

40

Trình quản lý gói Synaptic có thể được sử dụng để dễ dàng chọn và xóa các ảnh kernel cũ. Ảnh chụp màn hình của Trình quản lý gói Synaptic

Nếu bạn chưa cài đặt Synaptic:

sudo apt-get install synaptic

Bắt đầu ứng dụng và chọn các tùy chọn hiển thị.

Bạn sẽ có thể làm nổi bật tất cả các gói "linux-" với phiên bản "2.6.x" trong đó x nằm trong khoảng từ 31 đến 38 theo các tệp trong thư mục / boot của bạn.

Nhấp chuột phải vào từng gói linux và chọn tùy chọn "Đánh dấu để loại bỏ hoàn toàn". Cuối cùng nhấp vào nút áp dụng. Điều này sẽ loại bỏ tất cả các tập tin và bất kỳ tập tin liên quan. /bootThư mục của bạn bây giờ sẽ gọn gàng hơn một chút.


Tôi vào ngày 14.04. Tôi đã xử lý tình huống này trong quá khứ thông qua dòng lệnh, nhưng tôi đã quyết định thử phương pháp này ngày hôm nay ... đối với tôi, hình ảnh linux của tôi được đặt dưới cài đặt (thủ công), không được cài đặt (cục bộ hoặc lỗi thời)
Ryan

8
Ôi không. Tôi không thể cài đặt Synaptic vì không còn chỗ trống /boot!
John McGehee

@JohnMcGehee fsck và chia tay sẽ giải quyết vấn đề đó cho bạn.
FlipMcF

25

Cảm ơn bạn đã gửi bài chi tiết về vấn đề của bạn, điều này đã đưa tôi đi đúng hướng. Mặc dù rất hữu ích để giữ các tệp kernel trước đó, bạn có thể xóa tất cả chúng trong một lần, hãy kiểm tra bài đăng này:
Cách xóa tất cả các tiêu đề, hình ảnh và mô-đun hạt nhân Linux không sử dụng

Thực hiện thông qua dòng lệnh. Nếu bạn đang làm điều này thông qua điều khiển từ xa, hãy sử dụng một cái gì đó như WINSCP để mở một phiên cuối và chỉ cần dán nó vào, hoạt động rất tốt.

Ở đây nó được sao chép từ liên kết bài viết, tôi đề nghị bạn đọc toàn bộ bài viết:

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

Đây là một câu trả lời mới cho một câu hỏi cũ, nhưng một cách dễ dàng để làm sạch thứ này (và hơn thế nữa) là cài đặt Ubuntu Tweak . Để cài đặt nó :

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

sau đó bạn có thể chạy Ubuntu Tweak, Chuyển đến tab "người gác cổng" và từ đây, vấn đề là ba lần nhấp:

Ubuntu chỉnh janitor cho hạt nhân cũ

Tuy nhiên, tốt hơn là để lại kernel cuối cùng (bạn không bao giờ biết) hoặc kernel hoạt động nổi tiếng để đảm bảo an toàn; nhưng điều đó dễ dàng tùy biến.

Bạn có thể sử dụng cùng một công cụ để dọn dẹp nhiều thứ --- chỉ cần nhớ rằng nếu bạn xóa bộ đệm hình thu nhỏ hoặc bộ đệm TB thì hệ thống sẽ phải xây dựng lại chúng nếu cần thiết.


Tôi đã cố gắng cài đặt Ubuntu và cũng đi đến trang web kho lưu trữ. Nó nói nó chỉ dành cho 13.10 và trước đó. Bạn có phiên bản cập nhật cho 15.04 không?
JayCouture.com

@ JayCouture.com Phiên bản trong trang web dành cho 14.04 ("cho 13.10 và trước đó" là một liên kết đến các bản phát hành cũ hơn). Tôi bỏ qua nếu có phiên bản cho 14.10 hoặc 15.04.
Rmano

19

Tôi đã có thể khắc phục vấn đề bằng cách sử dụng dpkgđể loại bỏ các gói trực tiếp. Mặc dù các gói vẫn được liệt kê trong dpkg -l, các tệp được xóa khỏi /boot, giải phóng không gian.

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`

Sau này, đã apt-get -f installkhắc phục các vấn đề phụ thuộc của tôi và tất cả đều tốt với thế giới.

Tuy nhiên, tôi sẽ không chấp nhận câu trả lời này của tôi, vì tôi vẫn cần biết liệu tôi nên tăng /bootkích thước của mình hay làm gì khác.


Bạn không nên có một phân vùng khởi động / riêng biệt ở nơi đầu tiên, hoặc bạn nên tăng kích thước của nó vì 100mb quá nhỏ.
psusi

1
Cảm ơn, tôi xóa qua:sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt

2
sudo dpkg --remove linux-image-3.5.0-28*đối với hình ảnh, được kiểm tra quadf -h
TiloBunt

Cảm ơn, điều này phục vụ tôi quá. Tôi đã loại bỏ một vài hạt nhân cũ ( không phải cái tôi đang sử dụng) và sau đó đã làm apt-get -f install. Ngoài ra, đừng quên sau này để làm apt-get autoremove, để có thể loại bỏ những thứ khác không cần thiết.
Yajo

15

Bạn có thể ngừng sử dụng phân vùng khởi động / riêng biệt, sau đó bạn sẽ không có không gian hạn chế như vậy ở đó. Để thực hiện việc này, ngắt kết nối phân vùng, sau đó gắn kết nó vào một nơi khác và sao chép tất cả các tệp ở đó vào thư mục / boot trong phân vùng gốc của bạn, sau đó xóa mục nhập khỏi / etc / fstab và cài đặt lại grub. Ví dụ: (bạn sẽ cần sử dụng phân vùng chính xác):

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

Sau đó, bạn có thể sử dụng gparted để xóa phân vùng cũ / boot và có thể mở rộng phân vùng gốc để sử dụng không gian đó. Để mở rộng phân vùng gốc, bạn sẽ cần phải khởi động từ livecd và không gian trống cần phải ở ngay bên phải. Nếu phân vùng / boot hiện ở bên trái của phân vùng gốc, trước tiên bạn sẽ cần di chuyển phân vùng gốc sang bên trái, sau đó mở rộng nó, nhưng điều này có thể mất một thời gian rất, rất lâu, vì vậy có thể không đáng rắc rối.


6
Di chuyển / khởi động vào phân vùng chính của tôi không phải là giải pháp cho tôi vì mọi thứ nhưng / boot được mã hóa. Bạn không thể biết rằng từ câu hỏi của tôi, xin lỗi.
dùng6722

Đây là một giải pháp tốt nếu các giải pháp trên không hoạt động do hoàn toàn không có dung lượng trên ổ đĩa khởi động hoặc nếu bạn liên tục gặp sự cố "hết dung lượng". Vui lòng đọc trước tại sao đôi khi bắt buộc phải có phân vùng / boot: ( help.ubfox.com/community/DiskSpace )
svandragt

@svandragt, về cơ bản không còn lý do gì để cần phân vùng / boot trong những ngày này. Về điều duy nhất còn lại là nếu bios của bạn bị hỏng và không thể nhìn thấy toàn bộ đĩa, và bất kỳ máy nào được sản xuất trong thập kỷ qua không có giới hạn như vậy. Các trường hợp kế thừa khác như sử dụng đột kích hoặc LVM hiện được xử lý đúng cách bởi grub2.
psusi

Có một vài lý do để có một phân vùng khởi động riêng. Nhưng tôi không chắc lợi ích có giá trị khi thiết lập độ phức tạp tăng lên. 1. HĐH có thể hưởng lợi từ việc khởi động nhanh hơn thông qua ext2. 2. Bảo mật có thể được tăng lên bằng cách gắn / khởi động như RO. (rootkit, v.v.), hoặc thậm chí vẫn chưa được đếm trong thời gian chạy os. 3. grub (1) đã (có) một số vấn đề với ext4 vẫn còn. 4. Cần thiết để chạy lvm (grubv1). Mặc dù điều này không áp dụng cho thiết lập Ubuntu mặc định.
David Cahill

lsblkcó thể được sử dụng để xác định phân vùng nào là gì
Mr Purple

9

Tận dụng tốt nhất từ ​​các câu trả lời ở trên, cách tiếp cận thử và đúng của tôi là:

  • uname -a để tìm kernel đang chạy.
  • dpkg -l linux-{headers,image}-\* | grep ^iiđể liệt kê tất cả các gói liên quan đến kernel hiện được cài đặt. Điều này sẽ bao gồm kernel đang chạy.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz}để loại bỏ các hạt nhân cũ. Thay thế xx,yy,zzbằng một danh sách các bản dựng kernel mà bạn muốn loại bỏ, đây là tất cả các bản dựng được liệt kê bởi lệnh trước đó cũ hơn kernel hiện đang chạy. Hãy chắc chắn rằng bạn không xóa kernel hiện đang chạy, hệ thống của bạn sẽ không thể khởi động được . Bạn cũng có thể cần thay đổi phiên bản kernel từ 3.16.0bất kỳ thứ gì được cài đặt trên hệ thống của bạn.
  • Tùy chọn, thực hiện một bổ sung khác sudo apt-get autoremovesẽ loại bỏ mọi phụ thuộc còn sót lại của các nhân cũ không còn cần thiết cho hiện tại, giải phóng thêm không gian.

Bạn có thể có các tệp tiêu đề mà không cài đặt các phiên bản kernel phù hợp hoặc ngược lại chỉ bao gồm tất cả các phiên bản này trong lệnh. APT sẽ phàn nàn rằng một số gói không thể bị xóa vì chúng không được cài đặt, nhưng điều đó sẽ không gây hại.

Nếu có gì đó thất bại ...

  • Nếu lệnh apt không thành công do không còn chỗ trống trên lỗi thiết bị , hãy sử dụng lệnh dpkg tương ứng : sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Nếu lệnh dpkg vẫn không hoạt động vì các linux-imagegói được yêu cầu bởi các linux-headersgói cùng phiên bản (mà bạn cũng muốn gỡ cài đặt), dpkg có thể đã không giải quyết được điều đó. Kiểm tra lại đầu ra của dpkg -lvà chỉ định bất kỳ hậu tố tên gói nào trên dòng lệnh. Ví dụ, trên một trong các hệ thống của tôi, lệnh cuối cùng đã hoạt động sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • Nếu bạn gặp phải bất kỳ lỗi nào khác, hãy tìm kiếm trợ giúp, bạn có thể gặp vấn đề khác với bạn nghĩ.

@ user535733 trường hợp thông thường (ít nhất là trường hợp tôi tiếp tục chạy) là vẫn còn một khoảng trống /boot, chỉ không đủ cho gói kernel khác. Trong những trường hợp trên đã làm việc tốt. Mặc dù vậy, hãy thoải mái để thêm dpkglệnh tương ứng . Đối với purge, không, nó không phải là một loại 'buộc loại bỏ'. Những gì nó làm, khác với remove, là nó cũng xóa các tập tin cấu hình. Vì / miễn là các gói kernel không cài đặt tập tin cấu hình removepurgesẽ làm tương tự cho các gói kernel.
user149408

Đã thêm viên đạn thứ tư với lệnh dpkg tương ứng.
dùng535733

4

Đối với tôi cả apt-get purgedpkg --removecả hai đều thất bại. Vì vậy, tôi đã phải xóa một vài hình ảnh kernel cũ khỏi / boot với rm -f.


4
Đây không phải là một cách tốt để loại bỏ các gói. Mặc dù câu trả lời này không cụ thể về lý do tại sao loại bỏ chúng đúng cách lại thất bại, tôi chắc chắn nếu thông tin đó được đưa ra (trong một câu hỏi riêng biệt), chúng tôi sẽ có thể thử và tìm ra nguyên nhân của vấn đề.
thomasrutter

2
Tôi tin rằng nó đã thất bại, vì /bootphân vùng đã đầy. Lệnh này trước tiên hãy thử nâng cấp kernel lên gần đây và gặp sự cố No space left on devicetrong khi tạoinitrd.img
vp_arth

1
CẢNH BÁO, loại bỏ trực tiếp các tệp có thể dẫn đến các sự cố, vì một bản cập nhật của gói phần mềm linux có thể tạo lại tệp initrd.img cho mọi phiên bản mà nó nghĩ được cài đặt dựa trên thông tin gói. Xem: Askubfox.com/questions/865577/ Mạnh
kgrittn

1
cảm ơn, đây là giải pháp cuối cùng cứu người khi không có gì khác hoạt động.
Jeff Puckett

4

Liệt kê tất cả các hạt nhân:

dpkg --list 'linux-image*'

Hiển thị kernel hiện tại:

uname -r

Liệt kê tất cả các hạt nhân NGOẠI TRỪ hiện tại:

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

Hãy chắc chắn rằng kernel hiện tại của bạn không có trong danh sách đó.

Loại bỏ tất cả các nhân EXCEPT hiện tại:

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

Xóa các thứ khác:

sudo apt-get autoremove

Nếu nó vẫn cung cấp cho bạn lỗi không gian đĩa khởi động để cài đặt / gỡ cài đặt tệp thì hãy xóa trực tiếp một trong các hình ảnh OLD khỏi thư mục / boot,

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

rm /boot/*-3.13.0-119*; 

LƯU Ý: Vui lòng xem lại hình ảnh hạt nhân hiện tại một lần nữa trước khi xóa bất kỳ hình ảnh.


2

Tôi đã xóa các gói kernel cũ (tiêu đề linux ...)

linux-headers-*không phải là hạt nhân. Các gói kernel là những cái được đặt tên linux-image-*. Các linux-headers-*gói được đặt tên là các gói phát triển để biên dịch các mô-đun hạt nhân: chúng không tồn tại trong thư mục / boot và không bắt buộc phải sử dụng hàng ngày cho hệ thống của bạn.

Các tập tin bạn được liệt kê trong / boot làm bao gồm một số hình ảnh hạt nhân cũ ( vmlinuz*) và hình ảnh initrd biên dịch ( initrd.img*) đối với những hạt nhân, đó là một dấu hiệu cho thấy bạn vẫn còn có rất nhiều các gói kernel cũ được cài đặt.

Bạn sẽ có thể liệt kê các hạt nhân đã cài đặt của bạn với

aptitude search ~ilinux-image

(Lưu ý rằng điều này có thể cũng sẽ trả về các gói không phải là hạt nhân).

Thường không cần nhiều hơn hai nhân được cài đặt - một nhân hiện đang sử dụng và một trước đó (như một dự phòng). Vì vậy, bạn có thể bắt đầu loại bỏ những cái cũ hơn, từng cái một, như thế này:

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

Đảm bảo bạn thay thế "3.2.0-23-generic" bằng phiên bản kernel thực tế mà bạn muốn xóa! Ngoài ra, không loại bỏ các gói như linux-image-generic. Bạn phải thực sự cẩn thận để không xóa kernel hiện đang chạy hoặc bạn sẽ không thể khởi động (Ubuntu có thể hoặc không thể cảnh báo bạn về việc này).

Bạn có thể tìm thấy kernel hiện đang chạy của mình với:

uname -r

1

Tôi gặp vấn đề này và nhiều hơn nữa khi tôi gỡ bỏ một số initrd-img-xxxtệp theo cách thủ công khỏi / boot và tôi gặp vấn đề là các phiên bản cũ này tiếp tục được tạo và điền vào /bootthư mục. Để sửa nó, tôi làm theo như sau:

  • Tôi đã gỡ bỏ phiên bản kernel cũ được tạo thủ công để giải phóng không gian.
  • Bạn sẽ chỉnh sửa tệp cấu hình văn bản dưới dạng siêu người dùng, vì vậy hãy dán phần sau vào thiết bị đầu cuối:

    sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • Xác định vị trí dòng update_initramfs=yesvà thay đổi nó thành update_initramfs=no. Lưu và thoát tệp, sau đó chạy:

    sudo dpkg --configure -a
    

Điều đó đã giải quyết vấn đề của tôi. Điều đó được dựa trên blog này

Hy vọng, mọi thứ sẽ ổn khi bạn khởi động lại, và sau này bạn có thể thử thay đổi notrở lại thành yestrong update-initramfs.conf.


1

Tôi cho thấy rằng vẫn còn trong năm 2017 câu hỏi này có nhận xét và câu trả lời mới nhưng thiếu một câu trả lời mà tôi nghĩ là rất hữu ích ở đây:

Ubuntu là một hệ điều hành máy tính để bàn sử dụng đơn giản hàng ngày không có lý do gì để cài đặt phân vùng \ boot riêng biệt và một cái gì đó như thế này sẽ KHÔNG cung cấp thứ gì đó cho "người dùng thông thường" ... Vì vậy, một giải pháp là một bản cài đặt mới không có \ phân vùng khởi động và điều này cách bạn sẽ không bao giờ có vấn đề như vậy

Tái bút: Câu trả lời của tôi có thể bị xóa hoặc thêm vào câu trả lời được chấp nhận ... (Tôi nghĩ rằng nó sẽ giúp một số người theo cách này)


1

Tiện ích siêu hữu ích sẽ xóa phân vùng khởi động của bạn

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

Sử dụng có nguy cơ của riêng bạn, nhưng nó làm việc cho tôi:

sudo bootnukem

Tại sao các downvote?
Jonathan

0

Trong năng khiếu hoặc khớp thần kinh có một phần "đóng gói cũ hoặc cài đặt thủ công". Nên có các gói linux cũ ở đó.


0

Có một tập lệnh bash mà tôi đã viết đưa ra dưới đây giúp cho quy trình trở nên thân thiện hơn một chút.

YMMV - nó được tạo ra cho Mint 14. Vẫn đang học BASH nên có lẽ hơi khó hiểu. Sử dụng có nguy cơ, nhưng nó làm việc cho tôi!

#!/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

[Với tư cách là một Askoobfox noob, tôi không thể nhận xét cho đến khi danh tiếng = 50 vì vậy đừng bỏ phiếu vì điều này.]

Máy chủ của tôi cũng đang làm điều này. Theo nghĩa đen, không có câu trả lời dự kiến ​​nào ở đây có hiệu quả vì những câu hỏi này đòi hỏi một số phòng làm việc trên / khởi động để chúng hoàn thành. Nếu phân vùng khởi động đầy, nó sẽ kết thúc đột ngột mà không xóa bất kỳ hình ảnh nào.

Điều duy nhất làm việc cho tôi là xem lại hình ảnh hiện tại, sau đó chọn thủ công sudo rm filenamecác tệp hình ảnh cũ nhất (mỗi tệp có -3.16.0-30 trong tên của chúng). Khi đã xong, sau đó sudo apt-get autoremovecó phòng ngọ nguậy cần thiết để thực hiện công việc của mình. Nó đã làm nổi bật một số lỗi liên quan đến phiên bản đó, ví dụ: "depmod: FATAL: không thể tải /boot/System.map-3.16.0-30-generic: Không có tệp hoặc thư mục như vậy" nhưng đó là điều được mong đợi.

Khi kết thúc, df42% được sử dụng cho / boot để cho biết rằng nó khỏe mạnh trở lại.


1
Bài đăng bạn đang tìm kiếm là Askubfox.com/questions/171209/ từ
muru

@muru Vâng, vâng ... Tôi cũng đề nghị rằng poster gốc cũng sẽ cần lời khuyên này. Khi / boot đã đầy, các phiên bản theo kịch bản này cố gắng sửa nó cũng không thành công vì, / boot đã đầy.
Trường hợp Justin

Vâng, có hai vấn đề tương tự: a) trong đó hệ thống cảnh báo rằng đĩa của bạn đã đầy, nhưng apt-getcó đủ không gian để tiếp tục và b), khi apt-getkhông thành công vì đĩa quá đầy. Đó là bài viết khác.
muru

0

Tôi đã viết kịch bản bash này để chọn lọc các hạt nhân cũ cùng một lúc:

hạt nhân rm kích thước thật

Tất cả các mã bash và hướng dẫn được bao gồm trong liên kết.


0

Lưu tập lệnh này dưới dạng /usr/local/bin/remove_kernels.sh(nhớ cung cấp quyền thực thi 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

Sau đó, để loại bỏ tất cả các hạt nhân cũ chỉ cần gõ: sudo remove_kernels.sh


0

/ phân vùng boot đôi khi có thể hơi lạ

không trực tiếp bắt đầu để xóa các tập tin kernal.

Các bước để làm theo

  1. Kiểm tra hạt nhân hiện đang được cài đặt đang được sử dụng bởi hệ thống linux

    uname -r

    cái này sẽ cung cấp cho bạn tên của hình ảnh kernal hiện được cài đặt trên hệ thống

  2. Bây giờ bắt đầu xóa các tệp bổ sung ngoại trừ một tệp cụ thể được cài đặt trên hệ thống của bạn

    apt-get remove linux-image-XXXXX

  3. Đồng thời xóa tệp tiêu đề

    apt-get remove linux-headers-XXXXX

  4. Ngoài ra, có thể có một điều kiện aptđã ngừng hoạt động, trong trường hợp đó chuyển sang / boot

    cd /boot

  5. Bắt đầu xóa các tệp theo cách thủ công nhưng rất cẩn thận cũng lưu ý không xóa các installed one'stệp kernal khỏi hệ thống của bạn.

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. Sau khi xóa các tập tin chính xác, dọn dẹp cài đặt một phần nếu có

    apt-get -f install

  7. Loại bỏ các tệp bổ sung ngồi ở đó khi các tệp khởi động được làm sạch bằng tay

    apt-get autoremove

  8. Cập nhật grub

    update-grub

  9. Cuối cùng cập nhật các gói hệ thống của bạn

    apt-get update


-1

Nếu bạn không thể xóa thêm các tệp không sử dụng và nếu bạn có phân vùng khác có / hoặc không gian trống trên cùng một thiết bị, bạn có thể thay đổi kích thước / phân vùng khởi động bằng cách chia / gparted . (Nó cũng được bao gồm trên phương tiện cài đặt.)

Cảnh báo : Thay đổi kích thước phân vùng là hoạt động nguy hiểm , lưu dữ liệu quan trọng của bạn trên các phương tiện khác trước khi thực hiện!


Hầu hết những người mắc phải các phân vùng khởi động / tách riêng nhỏ đã chọn 'mã hóa toàn bộ đĩa' khi cài đặt, yêu cầu LVM. Giải pháp này dường như sẽ gây ra nhiều vấn đề hơn là giải quyết cho những người dùng đó.
dùng535733
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.