Cách an toàn nhất để dọn dẹp / khởi động phân vùng là gì?


274

Tôi có 200 MB được chỉ định cho /bootphân vùng. Bất cứ khi nào tôi cố gắng cập nhật kernel, tôi nhận được một thông báo lỗi về cơ bản /bootlà trạng thái đã đầy.

Tôi có thể làm gì để dọn dẹp /bootvà loại bỏ / sao lưu các hạt nhân cũ hơn?



Nếu / boot đã đầy, hãy xem Askubfox.com/questions/263363/ trên
nslntmnx

Câu trả lời:


335

Phương pháp dòng lệnh:

Trước tiên hãy kiểm tra phiên bản kernel của bạn, vì vậy bạn sẽ không xóa hình ảnh kernel đang sử dụng, đang chạy:

uname -r

Bây giờ hãy chạy lệnh này cho danh sách các hạt nhân đã cài đặt:

dpkg --list 'linux-image*' | grep ^ii

và xóa các hạt nhân bạn không muốn / cần nữa bằng cách chạy này:

sudo apt-get remove linux-image-VERSION

Thay thế VERSION bằng phiên bản kernel bạn muốn xóa.

Khi bạn hoàn thành loại bỏ các hạt nhân cũ hơn, bạn có thể chạy nó để loại bỏ các gói bạn không cần nữa:

sudo apt-get autoremove

Và cuối cùng bạn có thể chạy nó để cập nhật danh sách kernel grub:

sudo update-grub

34
sudo dpkg --list 'linux-image*' | grep ^iilàm cho nó dễ dàng hơn một chút để xem chỉ các hạt nhân được cài đặt. Ngoài ra tôi nghĩ rằng update-grubnó vô hại nhưng không thực sự cần thiết, nó được chạy tự động khi bạn gỡ cài đặt kernel.
Nelson

9
Sử dụng sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""để có được danh sách các tên gói được sử dụng sudo apt-get remove. head -n -3được sử dụng để giữ 3 hạt nhân gần đây nhất còn lại trong hệ thống.
Sithsu

2
lót đơn giản của tôi:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb

27
sudo apt-get autoremovenên đủ (thường để lại cho bạn 3 hạt nhân cuối cùng)
mbx

6
Đây là một câu trả lời tốt, nhưng tôi nghi ngờ nó có thể hoạt động trong hầu hết các trường hợp (nếu không phải tất cả): vấn đề /bootlà đầy đủ, vì vậy apt-getsẽ thất bại với một số mã lỗi hoặc khác. Câu trả lời dưới đây là một chút "hackier" (Tôi phải thú nhận tôi đã phải thép bản thân mình để phát hành mà rm -rftrong /boot) nhưng là người duy nhất có khả năng làm việc trong tình huống này.
Marco

284

LƯU Ý: điều này chỉ khi bạn không thể sử dụng apt để dọn dẹp do đầy đủ 100% / khởi động

Nếu apt-get không hoạt động vì / boot của bạn ở mức 100%, trước tiên bạn cần phải dọn sạch / khởi động. Điều này có khả năng đã bắt gặp nâng cấp kernel trong cài đặt một phần, điều đó có nghĩa là apt đã bị đóng băng hoàn toàn và sẽ tiếp tục bảo bạn chạy apt-get -f installngay cả khi lệnh đó tiếp tục thất bại.

Lấy danh sách các hình ảnh kernel và xác định những gì bạn có thể làm mà không cần. Lệnh này sẽ hiển thị các hạt nhân đã cài đặt trừ cái hiện đang chạy sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`. Lưu ý hai phiên bản mới nhất trong danh sách. Bạn không cần phải lo lắng về việc chạy vì nó không được liệt kê ở đây. Bạn có thể kiểm tra với uname -r.

Tạo một lệnh để xóa tất cả các tệp trong / boot cho các kernel không quan trọng với bạn bằng cách sử dụng mở rộng dấu ngoặc để giữ cho bạn lành mạnh. Hãy nhớ để loại trừ các hình ảnh hạt nhân hiện tại và hai mới nhất. Ví dụ : sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. Bạn cũng có thể sử dụng một phạm vi với cú pháp {80..84}.

sudo apt-get -f install để dọn dẹp những gì làm cho khó chịu về cài đặt một phần.

Nếu bạn gặp phải một lỗi bao gồm một dòng như "Lỗi nội bộ: Không thể tìm thấy hình ảnh (/boot/vmlinuz-3.2.0-56-generic)", thì hãy chạy lệnh sudo apt-get purge linux-image-3.2.0-56-generic(với phiên bản phù hợp của bạn).

Cuối cùng, sudo apt-get autoremoveđể xóa các gói hình ảnh kernel cũ đã được mồ côi bằng cách khởi động thủ công sạch sẽ.

Đề xuất, chạy sudo apt-get updatesudo apt-get upgradechăm sóc mọi nâng cấp có thể đã sao lưu trong khi chờ bạn khám phá phân vùng đầy đủ / khởi động.

Gợi ý2, Đánh giá https://help.ubfox.com/community/AutomaticSecurityUpdates và xem xét cài đặt Unattends-Nâng cấp :: Xóa-Không sử dụng-Phụ thuộc thành đúng trong /etc/apt/apt.conf.d/50unattends-upgrades. Điều này sẽ tương đương với việc chạy tự động sau mỗi lần cập nhật bảo mật để đảm bảo bạn dọn sạch các hạt nhân không sử dụng nhưng cũng sẽ loại bỏ những thứ khác mà nó cho là không sử dụng giúp bạn thoát khỏi vấn đề này trong tương lai.


3
Bằng cách này, tôi có bản mới nhất cho lần khởi động lại tiếp theo và sau đó là lần trước trong trường hợp có thứ gì đó bị hỏng trong cái đó. Thông thường tôi có rất nhiều phòng nên không có chút đau và nó thỏa mãn sự hoang tưởng của tôi vì không có đủ tùy chọn sao lưu trong bất kỳ kịch bản cụ thể nào.
flickerfly

1
Tôi chưa bao giờ có một vấn đề gây ra bởi nâng cấp không giám sát. Tôi có thể tưởng tượng các tình huống trong đó điều này có thể là một vấn đề chủ yếu xung quanh việc phụ thuộc bị mất trên các bản cài đặt không được gỡ lỗi Giả sử bạn cài đặt php, quyết định gỡ cài đặt nó và cài đặt phiên bản mới hơn từ nguồn. Phiên bản này có các phụ thuộc được cung cấp bởi lần cài đặt trước, nhưng apt không biết rằng nó vẫn được yêu cầu. Lần tới khi bạn chạy tự động loại bỏ những phụ thuộc đó sẽ biến mất. Nếu tự động, điều này có thể hơi khó hiểu. Nếu bạn không cài đặt bên ngoài kho, tôi tin rằng nó hoàn toàn an toàn.
flickerfly

3
Sau khi thấy điều này trong một số máy chủ ảo vsphere (nơi các hạt nhân được tự động nâng cấp nhưng không bị xóa sau đó), tôi đã viết một kịch bản python để tự động hóa nó. Tôi muốn có nhiều con mắt hơn về nó
EvanK

2
Nếu bạn sử dụng dpkg --purgetrên một khởi động đầy đủ, bạn sẽ nhận được những điều sau đây $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
flickerfly

1
Sau khi dọn dẹp / khởi động apt-get install -f vẫn không hoạt động. Sử dụng df -itôi phát hiện ra rằng tôi cũng sắp hết inodes /vì số lượng tệp khổng lồ cho mã nguồn của các hạt nhân cũ trong/usr/src
Kristofer

51

Có tài liệu về điều này tại https://help.ub Ubuntu.com/community/RemoveOldKernels

Tóm lại: Sử dụng

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

Các purge-old-kernelscông cụ có thể được cài đặt thông qua sudo apt install byobu. Dưới đây là mô tả từ trang man của nó:

Chương trình này sẽ loại bỏ các gói kernel và tiêu đề cũ khỏi hệ thống, giải phóng không gian đĩa. Nó sẽ không bao giờ loại bỏ kernel hiện đang chạy. Theo mặc định, nó sẽ giữ ít nhất 2 hạt nhân mới nhất, nhưng người dùng có thể ghi đè giá trị đó bằng --keep tham số.

Nếu bạn muốn một giải pháp sao chép-dán, ReSearchIT Eng đã gợi ý những điều sau:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge

3
Trong trường hợp của tôi, apt không hoạt động do kernel đang chờ xử lý và cách khắc phục được đề xuất là bắt-22:
James Bowery

Tôi đã phải sửa các gói bị hỏng trước tiên với Askubfox.com/a/304388/284313 Sau đó, giải pháp của bạn đã hoạt động.
James Bowery

3
Tôi nghĩ rằng đây nên là giải pháp được chấp nhận cho đến nay.
Fran Marzoa

3
Điều này an toàn hơn nhiều so với câu trả lời được chấp nhận. Tôi nghĩ rằng apt-get autoremove --purgenên là đủ, mặc dù.
Woodrow Barlow

7

Tôi thấy rằng việc từ bỏ phân vùng nhỏ và di chuyển /bootđến thư mục gốc dễ dàng hơn nhiều . Điều này cũng ngăn chặn bất kỳ vấn đề ngoài không gian trong tương lai.

Đầu tiên di chuyển dữ liệu của bạn từ phân vùng khởi động sang root (chạy dưới dạng sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

Xóa (hoặc bình luận) /bootmục trong /etc/fstab:

vim /etc/fstab

Cập nhật grub và đảm bảo mọi thứ đều chính xác:

update-grub

apt bây giờ có thể nâng cấp mà không có vấn đề.

Điều này để lại một phân vùng 200mb chưa sử dụng (mà bạn có thể sử dụng cho mục đích khác nếu bạn thấy nó đáng để gặp rắc rối).


5
Đây là một ý tưởng tốt, nhưng không hoạt động nếu bạn muốn mã hóa toàn bộ đĩa cho phân vùng gốc của mình.
Paŭlo Ebermann

Có, có trường hợp / boot phải là một phân vùng riêng. Một ví dụ khác là Grub trước đây không thể tải từ phân vùng LVM.
Pháo đài

4

Xóa Kernels cũ (để có không gian trống trên / boot) xem: http://askubfox.com/questions/89710/how-do-i-free-up-more-space-in-boot

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

Sau đó chạy

sudo apt-get update

1
đây là cách duy nhất có hiệu quả .... giải pháp tuyệt vời
John

Câu trả lời hay nhất! Đây là giải pháp duy nhất hiệu quả với tôi; autoremove là ngu ngốc; nó cố gắng cài đặt lại bất kỳ hạt nhân nào với các phụ thuộc chưa được đáp ứng trước khi chính thức loại bỏ chúng. Tôi đã đi theo vòng tròn hết chỗ này đến lần khác. Câu trả lời này là vàng.
Lonnie hay nhất

3

sudo apt-get autoremove

Điều này loại bỏ tất cả trừ 2 hạt nhân cuối cùng. Đã thử nghiệm trên Ubuntu 16.04 LTS khi /bootđạt 100% dung lượng và apt-get upgradekhông thành công trong lần nâng cấp kernel cuối cùng. Autoremove kernel là lặp đi lặp lại, vì vậy nếu bạn có một vài hạt nhân, chúng sẽ bị xóa từng cái một. Vì vậy, hãy kiên nhẫn.


1

Tại sao làm điều đó bằng tay khi bạn có thể làm điều đó với một công cụ? Bạn biết rằng bạn sẽ cần nó một lần nữa sau 30 giây, bởi vì phải mất 30 giây để họ cập nhật một bản cập nhật mới trong những ngày này = P

Tôi khuyên bạn nên sử dụng công cụ này, bootnukem

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

Sau đó

sudo bootnukem --dry-run

Xóa --dry-runmột khi bạn xác nhận nó có vẻ an toàn

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.