Làm cách nào để xóa kernel cũ / cài đặt cái mới khi / boot đã đầy?


31

Tôi biết câu hỏi này được hỏi nhiều lần trước đây, tuy nhiên với tôi nó chỉ khác một chút.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       224G  5.2G  208G   3% /
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           777M  260K  777M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
/dev/sda2        90M   88M     0 100% /boot
/dev/sda6       1.9G  514M  1.3G  29% /tmp

Phân vùng khởi động của tôi đã đầy.

Hạt nhân hiện tại:

# uname -r
3.2.0-35-generic

Tất cả các hạt nhân:

# dpkg --list | grep linux-image
ii  linux-image-3.2.0-32-generic    3.2.0-32.51                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-34-generic    3.2.0-34.53                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-35-generic    3.2.0-35.55                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-37-generic    3.2.0-37.58                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-38-generic    3.2.0-38.60                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iU  linux-image-generic             3.2.0.37.45                         Generic Linux kernel image

Vì vậy, tôi đã nghĩ đến việc loại bỏ kernel chung 3.2.0.32 bằng:

# sudo apt-get purge linux-image-3.2.0-32-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-generic : Depends: linux-headers-generic (= 3.2.0.37.45) but 3.2.0.38.46 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Không thành công.

Khi tôi thử apt-get -f installnó cũng thất bại:

# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-34 linux-headers-3.2.0-35 linux-headers-3.2.0-34-generic linux-headers-3.2.0-35-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-generic linux-image-generic
The following packages will be upgraded:
  linux-generic linux-image-generic
2 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
5 not fully installed or removed.
Need to get 0 B/4,334 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
Setting up initramfs-tools (0.99ubuntu13.1) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-3.2.0-37-generic (3.2.0-37.58) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-38-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-37-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-37-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-37-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
Setting up linux-image-3.2.0-38-generic (3.2.0-38.60) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-37-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-38-generic /boot/vmlinuz-3.2.0-38-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-38-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-38-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-38-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-38-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of linux-image-generic:
 linux-image-generic depends on linux-image-3.2.0-37-generic; however:
  Package linux-image-3.2.0-37-generic is not configured yet.
dpkg: error processing linux-image-generic (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Package linux-image-generic is not configured yet.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
Processing triggers for initramfs-tools ...
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because MaxReports is reached already
  update-initramfs: Generating /boot/initrd.img-3.2.0-35-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-35-generic with 1.
dpkg: error processing initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
 linux-image-3.2.0-37-generic
 linux-image-3.2.0-38-generic
 linux-image-generic
 linux-generic
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

Bất kỳ trợ giúp sẽ thực sự được đánh giá cao.

Cập nhật: Tôi đã làm:

sudo rm /boot/*-3.2.0-32-generic /boot/*-3.2.0-34-generic

Sau đó, vấn đề sau đây với apt-get -f install:

root@localhost:/# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  linux-generic
The following packages will be upgraded:
  linux-generic
1 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,722 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Version of linux-image-generic on system is 3.2.0.38.46.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error     from a previous failure.
                      Errors were encountered while processing:
 linux-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)


Xem câu trả lời của tôi khi autoremove không hoạt động do thiếu không gian.
nslntmnx

Câu trả lời:


22

Bạn không thể sử dụng apt-get khi kernel của bạn đã lỗi thời.

cd /boot
sudo rm *-2.6.35-6.9-generic
sudo rm *-3.16.0-23-generic

sử dụng lsđể xem những gì trong thư mục loại bỏ một hoặc hai cũ nhất sau đó

sudo apt-get -f install

Sau đó, bạn có thể thanh lọc apt-get như trong

sudo apt-get purge linux-image-3.2.0-32-generic linux-image-3.2.0-34-generic

hoặc chỉ tiếp tục với rm.

bạn cũng nên sudo update-grubkhi bạn bị vây


Lệnh cài đặt đã cài đặt lại nhiều nhân cũ, dẫn đến một đĩa khởi động đầy đủ. Lệnh thanh trừng đã giải quyết điều này cho tôi.
XUÂN 10/2/2017

Tôi đã làm theo câu trả lời này sudo apt-get -f install, sau đó khởi động lại để đảm bảo tất cả đều tốt và loại bỏ phần còn lại với apt autoremovenhư được đề xuất trong đầu ra lệnh trước đó.
Bart C

10

Rõ ràng, điều này hoạt động:

sudo apt-get autoremove 

Theo apt-gettrang con người:

autoremove được sử dụng để loại bỏ các gói được cài đặt tự động để đáp ứng các phụ thuộc cho các gói khác và hiện không còn cần thiết nữa.

3.16.0-39 là cái tôi đã cố cài đặt, nhưng không thành công vì / boot đã đầy. 3.16.0-38 là phiên bản hiện tại của tôi. Bạn có thể thấy rằng -38 đã bị bỏ qua.

server:~$ uname -r
3.16.0-38-generic
server:~$ sudo apt-get autoremove 
[sudo] password for mikeb: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.16.0-30 linux-headers-3.16.0-30-generic
  linux-headers-3.16.0-31 linux-headers-3.16.0-31-generic
  linux-headers-3.16.0-33 linux-headers-3.16.0-33-generic
  linux-headers-3.16.0-34 linux-headers-3.16.0-34-generic
  linux-headers-3.16.0-36 linux-headers-3.16.0-36-generic
  linux-headers-3.16.0-39 linux-headers-3.16.0-39-generic
  linux-image-3.16.0-30-generic linux-image-3.16.0-31-generic
  linux-image-3.16.0-33-generic linux-image-3.16.0-34-generic
  linux-image-3.16.0-36-generic linux-image-3.16.0-39-generic
  linux-image-extra-3.16.0-30-generic linux-image-extra-3.16.0-31-generic
  linux-image-extra-3.16.0-33-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic linux-image-extra-3.16.0-39-generic
0 upgraded, 0 newly installed, 24 to remove and 0 not upgraded.

Tôi thích câu trả lời này nhưng nó bỏ lỡ một số hướng dẫn để biết chính xác những gì được sử autoremovedụng.
s3m3n

1
autoremove chỉ hoạt động nếu bất kỳ hành động apt được xếp hàng trước nào hoàn thành đúng. Autoremove sẽ không hoạt động nếu bạn đã gặp phải lỗi 'không còn chỗ trống trên thiết bị' - những hành động được xếp hàng trước đó sẽ không thành công và autoremove sẽ không chạy. Nói cách khác, autoremove hoạt động ... cho đến khi không.
dùng535733

@ user535733 bạn đúng. Xem câu trả lời của tôi khi autoremove không hoạt động do thiếu không gian.
nslntmnx

7

Trong một thiết bị đầu cuối, thực hiện lệnh sau:

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

Lệnh này liệt kê tất cả các nhân Linux hiện đang cài đặt, sau đó chọn tất cả các nhân hiện không được sử dụng và loại bỏ chúng.


2
Có lẽ bạn muốn giải thích chính xác những gì lệnh này làm. Trông có vẻ khá phức tạp: nói chung, mọi người nên được khuyên tránh chạy các lệnh như thế này mà họ không hiểu - đặc biệt là với một cái gì đó quan trọng đối với hệ thống của họ.
mtdevans

@mtdevans: Tôi đã thêm rằng lệnh trên liệt kê tất cả các hạt nhân Linux hiện đang cài đặt, sau đó chọn tất cả các hạt nhân hiện không được sử dụng và sau đó loại bỏ tất cả các hạt nhân hiện không được sử dụng.
Kristian

4
Lệnh này rất hữu ích, chỉ cần chạy phần trước "| xargs" trước để kiểm tra những gì bạn sẽ xóa. Ngoài ra, | grep -v có thể cần thiết để bảo tồn kernel mới nhất, có thể chưa được sử dụng, nhưng muốn.
Roman Susi

4
Điều này thật nguy hiểm vì nó cũng phù hợp với linux-libc-dev: amd64
Frederick Nord

2
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

Nếu chạy lệnh trên mà không có "sudo apt-get -y purge" khớp với linux-libc-dev: amd64, bạn có thể thêm dấu chấm phẩy vào biểu thức chính quy để không bao gồm nó:

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

Bây giờ chỉ cần đảm bảo rằng nó trông tốt và thêm "sudo apt-get -y purge"


1

Đối với Ubuntu 12.04 hãy thử điều này sudo apt-get purge linux-image-[kernel version]

Điều này sẽ xóa bất kỳ phiên bản kernel. Nếu thư mục khởi động của bạn có nhiều nhân, đừng quên cập nhật grub và khởi động lại hệ thống của bạn

ví dụ sudo apt-get purge linux-image-3.11.6 *


2
Vấn đề là điều này không còn hoạt động nữa khi người ta có một điểm có vấn đề phụ thuộc, như vấn đề phía trước.
Paŭlo Ebermann

Điều này làm việc cho tôi!
Daniel

0

Nhiều câu trả lời cho biết sử dụng "apt autoremove" nhưng điều đó có thể không hoạt động khi / boot đầy vì apt cố gắng thêm hạt nhân trước khi gỡ bỏ.

Autoremove tiếp theo sẽ không xóa bất kỳ hạt nhân nào được đề cập trong /etc/apt/apt.conf.d/01autoremove-kernels vì vậy chúng tôi cần khắc phục điều đó.

Đây là quá trình làm việc cho tôi.

Loại bỏ các tập tin cấu hình kernel không mong muốn.

sudo dpkg --purge $ (COLUMNS = 200 dpkg -l | grep "linux-image-Extra" | grep "^ rc" | tr -s '' | cut -d '' -f 2)

Cập nhật /etc/apt/apt.conf.d/01autoremove-kernels bằng cách chạy ...

sudo /etc/kernel/postinst.d/apt-auto-removal

Hy vọng apt autoremove sẽ hoạt động.

sudo apt autoremove --purge

Nếu không, bạn có thể loại bỏ các hạt nhân rất cũ và không sử dụng khỏi / boot.

Trước tiên hãy tìm hiểu xem bạn đang chạy kernel nào.

uname -r

Đừng loại bỏ kernel hiện tại hoặc kernel trước đó.

sudo rm /boot/initrd.img-V.XX.Y-ZZ-generic

Bây giờ bạn nên có đủ chỗ để thử lại autoremove. Nếu không, loại bỏ một kernel rất cũ. Tất nhiên, giữ hiện tại và lâu đời nhất.


-2

Tôi hy vọng điều này có thể giúp:

tôi thường xóa các kernel cũ bằng cách sử dụng janitor ubfox, GUI đẹp và dễ dàng :)

nhấp vào 'hệ thống' và sẽ có danh sách các hạt nhân cũ, chỉ cần nhấp vào nó và dọn dẹp


1
đó là một máy chủ Ubuntu và tôi được kết nối thông qua putty. (Nhưng tôi cũng có sẵn Webmin trên máy chủ)
Marcel

Làm thế nào tôi có thể cài đặt janitor tinh chỉnh Ubuntu này?
Jenny O'Reilly
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.