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


Của tôi /boot phân vùng gần đầy và tôi nhận được cảnh báo mỗi lần khởi động lại hệ thống của mình. Tôi đã xóa các gói hạt nhân cũ (linux-headers ...), thực sự tôi đã làm điều đó để cài đặt một phiên bản hạt nhân 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. Vì vậy, những gì khác tôi có thể xóa? Có một số tệp khác liên quan đến hình ảnh hạt nhân cũ không?

Dưới đây là danh sách các tệp có trên /boot vách ngăn:

:~$ 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-generic hạt nhân.


524
2017-12-22 10:06


gốc


Điều đáng nói là không phải mọi bản cài đặt Ubuntu đều có phân vùng / boot riêng biệt - thường thì tất cả 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 / boot riêng biệt. Những người sử dụng LVM hoặc "toàn bộ đĩa" mã hóa cần một riêng biệt / khởi động, nếu không nó có thể là tùy chọn. - thomasrutter
Nếu bất kỳ ai khác có cùng vấn đề với tôi: sau / khởi động không còn chỗ trống "apt-get upgrade" sẽ thất bại khi tạo lại các tệp initrd cho các hạt nhân được cài đặt hoặc tập lệnh initramfs update được tin tưởng đượ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 dấu cách 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" theo sau bằng cách dọn sạch mục nhập tương ứng trong / boot (để giải phóng dung lượng trống) và / var / lib / initramfs-tools (hình ảnh initrd sẽ không được tạo). - wojci
Điểm mấu chốt cho câu trả lời đúng là họ cho bạn biết để xóa gói chứa các phiên bản cũ hơn của hạt nhân. 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 tin trong phân vùng / boot; có thể hoạt động trong một thời gian, nhưng cuối cùng bạn có thể cập nhật một gói để tạo lại các tệp bị thiếu cho các phiên bản hạt nhân có các gói, do đó giúp bạn thoát khỏi không gian. - kgrittn
help.ubuntu.com/community/RemoveOldKernels - jarno


Các câu trả lời:


Bạn đã có rất nhiều hạt nhân không 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

Di chuyển cái linux-image-x.x.x-x gói cũng sẽ xóa linux-image-x.x.x-x-generic.

Các tiêu đề được cài đặt vào /usr/src và đượ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 độc quyền và hộp ảo). Hầu hết người dùng nên loại bỏ các gói tiêu đề này nếu gói hạt nhân phù hợp (linux-image-*) chưa đượ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à các tiêu đề có thể được loại bỏ, không bao gồm hiện hành chạy hạt nhân:

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 là 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 đang chạy / đang chạy (không nhất thiết là muộn nhất hạt nhân!). Điều này phù hợp với đề xuất thử nghiệm một hạt nhân mới hơn trước khi loại bỏ các hạt nhân cũ, đã biết đến công 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]+//')")

600
2017-12-24 14:34



Câu trả lời tuyệt vời. Một phần thông tin nữa sẽ giúp bạn: Làm thế nào bạn có thể biết (chắc chắn) cái nào của hạt nhân bạn đang sử dụng? Có lẽ bạn không thể cho rằng đó là người cuối cùng ... Chỉnh sửa: Và nó nhìn như câu trả lời là uname -a. Có lẽ tốt nhất để đảm bảo rằng bạn không có một đang chờ khởi động lại để cài đặt-hạt nhân mới đang chờ xử lý (như tôi đã làm, nhưng tôi lưu ý sự không khớp giữa uname -a và hạt nhân "mới nhất"). - T.J. Crowder
@freddyb Xong. Lưu ý rằng các lệnh in / xóa hạt nhân khác với hạt nhân được tải / khởi động. - Lekensteyn
Nếu apt-get purge thất bại vì những phụ thuộc chưa được đáp ứng thì bạn có thể làm theo lời khuyên tại askubuntu.com/questions/171209/… - svandragt
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. Kinda vô lý rằng nó vẫn không tự động được thực hiện bởi các công cụ GUI. - allprog
@ byf-ferdy Hạt nhân là một phần thiết yếu của hệ điều hành, nếu phiên bản mới nhất bằng cách nào đó không hoàn toàn làm việc 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 tốt đẹp có lẽ sẽ là một cái gì đó mà 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 mới nhất). - Lekensteyn


Phân vùng khởi động của bạn đã đầy. Vì đây là bản cập nhật hạt nhân nên 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 dọn dẹp. Đây là bài viết trên blog sẽ chỉ cho bạn cách xóa hình ảnh hạt nhân 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 kernel hiện tại 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 mà 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]'

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

sudo apt-get -y purge

Bây giờ chúng ta có thể làm tất cả mọi thứ chúng ta muốn bằng cách kết hợp hai lệnh cuối cùng vào mớ hỗn độn không lành mạnh 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ẽ chăm sóc mọi thứ cho bạn. Tôi sẽ xác nhận rằng điều này hoạt động hoàn hảo nhưng không bao giờ tin tưởng bất cứ ai trên internet. :) Để biết thêm thông tin, bài đăng trên blog đưa ra một giải thích rất tốt về những gì mỗi phần của lệnh thực hiện để đọc qua nó, do đó bạn hài lòng rằng nó làm những gì bạn muốn nó làm.


200
2018-02-21 03:38



Điều này làm việc tuyệt vời, cảm ơn. - Michael Durrant
điều này cũng khớp với linux-libc-dev: amd64 - Frederick Nord
những gì sẽ loại bỏ không mong muốn của "linux-libc-dev: amd64" nguyên nhân? - ConfusedStack
@ FrederickNord cảm ơn những người đứng đầ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
Lệnh có vẻ tốt, nhưng khi tôi chạy nó, tôi nhận được cùng một lỗi mà tôi nhận được khi tôi muốn cài đặt một cái gì đó và nó không thể làm điều đó vì khởi động là đầy đủ: --------------- ----------- Các gói sau có các phụ thuộc chưa được đáp ứng: linux-image-extra-4.2.0-27-generic: Phụ thuộc: linux-image-4.2.0-27-generic nhưng nó sẽ không được cài đặt linux-image-extra-4.2.0-30-generic: Phụ thuộc: linux-image-4.2.0-30-generic nhưng nó sẽ không được cài đặt - Alex


sudo apt-get autoremove

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


94
2017-11-05 05:58



Như tên cho thấy, apt-get AUTOremove là một hoạt động tự động, nơi hệ thống có "phỏng đoán tốt nhất" của nó 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ông thường. Vấn đề với phương pháp này: Nếu bạn (hoặc bản cập nhật) loại bỏ gói nằm trong danh sách phụ thuộc này, chức năng tự động xóa sẽ xóa tất cả các gói khác trong danh sách phụ thuộc, để lại cho bạn một hệ thống mà không làm việc trên máy tính ngay cả với một hệ thống hoàn toàn bị hỏng). - Rinzwind
Tham chiếu: 1 trong nhiều nguồn cho nhận xét này ở trên: linuxquestions.org/questions/debian-26/… - Rinzwind
nếu linux-image-generic được cài đặt và các hạt nhân mới chưa được cài đặt một cách rõ ràng, điều này sẽ loại bỏ các hạt nhân cũ. Ý thức 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 cảm giác thông thường đã được sử dụng trước khi sử dụng lệnh này thì sẽ không có rắc rối. - mchid
@Rinzwind - Lệnh này làm trống 250 mb dung lượng đĩa của tôi bằng cách xóa 'tiêu đề linux' cũ - Chinmaya B
autoremove hoạt động nếu được sử dụng trước một điều kiện ngoài không gian tồn tại. Tuy nhiên, khi apt hết dung lượng và hủy bỏ (và cuối cùng người dùng nhận thấy sự cố), đã 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 các giải pháp dựa trên dpkg. - user535733


Synaptic Package Manager có thể được sử dụng để dễ dàng lựa chọn và loại bỏ hình ảnh hạt nhân cũ. Screenshot of Synaptic Package Manager

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

sudo apt-get install synaptic

Khởi động ứng dụng và chọn các tùy chọn được 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 là từ 31 đến 38 theo các tệp trong thư mục / boot của bạn.

Nhấn chuột phải vào từng gói linux đó và chọn tùy chọn "Mark for Complete Removal". Cuối cùng bấm vào nút áp dụng. Thao tác này sẽ xóa tất cả các tệp và mọi tệp được liên kết. Của bạn /boot thư mục bây giờ sẽ được một chút tidier.


38
2017-12-24 14:34



Tôi đang ở 14.04. Tôi đã xử lý tình trạ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 nằm dưới cài đặt (thủ công), chưa được cài đặt (cục bộ hoặc lỗi thời) - Ryan
Ồ không. Tôi không thể cài đặt Synaptic vì không có dung lượng trống /boot! - John McGehee
@JohnMcGehee fsck và parted nên giải quyết vấn đề đó cho bạn. - FlipMcF


Cảm ơn bạn đã đăng bài chi tiết của bạn về vấn đề của bạn, điều này đã cho tôi đi đúng hướng. Mặc dù việc giữ các tệp hạt nhân trước đó rất hữu ích, 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:
Làm thế nào để Hủy bỏ tất cả các tiêu đề hạt nhân Linux không sử dụng, hình ảnh và mô-đun

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 sử dụng từ xa một cái gì đó như WINSCP để mở một phiên thiết bị đầu 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

24
2018-06-01 12:53





Đâ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 điều này (và nhiều hơn nữa) là cài đặt Ubuntu Tweak. Đến 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 "janitor" và từ đây chỉ là ba lần nhấp chuột:

Ubuntu tweak janitor for old kernels

Nó là tốt hơn để rời khỏi hạt nhân cuối cùng (bạn không bao giờ biết) hoặc một hạt nhân làm việc nổi tiếng về an toàn, mặc dù; nhưng điều đó dễ dàng tùy chỉnh.

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


22
2017-11-25 13:11



Tôi đã cố gắng để cài đặt Ubuntu tinh chỉnh và cũng sẽ vào trang web 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 là dành cho 14.04 ("cho 13.10 và trước" là một liên kết đến các phiên bản cũ hơn). Tôi bỏ qua nếu có một phiên bản cho 14.10 hoặc 15.04. - Rmano


Tôi đã có thể khắc phục sự cố 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 đây, apt-get -f install cố định các vấn đề phụ thuộc của tôi, và tất cả đều tốt đẹp với thế giới.

Tôi sẽ không chấp nhận câu trả lời này của tôi, tuy nhiên, vì tôi vẫn cần biết tôi có nên tăng /boot kích thước hoặc làm điều gì đó khác.


17
2017-12-03 18:47



Bạn không nên có một phân vùng riêng / boot ở nơi đầu tiên, hoặc bạn nên tăng kích thước của nó là 100mb là quá nhỏ. - psusi
Cảm ơn, tôi xóa qua: sudo dpkg --remove linux-headers-3.5.0-28* - TiloBunt
và sudo dpkg --remove linux-image-3.5.0-28* cho hình ảnh, được kiểm tra qua df -h - TiloBunt


Bạn có thể ngừng sử dụng một phân vùng / boot riêng biệt, sau đó bạn sẽ không có không gian giới hạn ở đó. Để thực hiện việc này, hãy tháo gắn kết phân vùng, sau đó gắn 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 đó loại bỏ mục nhập từ / etc / fstab và cài đặt lại grub. Ví dụ (bạn sẽ cần phải 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ũ / khởi động 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 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 phân vùng gốc, thì trước tiên bạn cần di chuyển phân vùng gốc sang bên trái, sau đó mở rộng, nhưng điều này có thể mất rất nhiều thời gian, vì vậy có thể không đáng rắc rối.


11
2017-12-22 16:38



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 điều đó từ câu hỏi của tôi, xin lỗi. - user6722
Đâ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 không có không gian nào cả trên ổ đĩa khởi động, hoặc nếu bạn liên tục có vấn đề "hết dung lượng". Xin vui lòng đọc đầu tiên tại sao đôi khi nó yêu cầu phải có một phân vùng / boot mặc dù: (help.ubuntu.com/community/DiskSpace) - svandragt
@svandragt, về cơ bản không có lý do gì để lại cần phân vùng / boot trong những ngày này. Về người còn lại chỉ 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 thực hiện 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 raid hoặc LVM hiện được xử lý đúng cách bởi grub2. - psusi
Có một vài lý do để có phân vùng khởi động riêng biệt. Nhưng tôi không chắc chắn những lợi ích có giá trị thiết lập phức tạp tăng lên. 1. Hệ điều hành có thể được 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, vv), hoặc thậm chí vẫn chưa được gắn kết tại thời gian chạy os. 3. grub (1) có (đã 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
lsblk có thể được sử dụng để xác định phân vùng nào là gì - Mr Purple