Tôi có 200 MB được chỉ định cho /boot
phâ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 /boot
là trạng thái đã đầy.
Tôi có thể làm gì để dọn dẹp /boot
và loại bỏ / sao lưu các hạt nhân cũ hơn?
Tôi có 200 MB được chỉ định cho /boot
phâ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 /boot
là trạng thái đã đầy.
Tôi có thể làm gì để dọn dẹp /boot
và loại bỏ / sao lưu các hạt nhân cũ hơn?
Câu trả lời:
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
sudo dpkg --list 'linux-image*' | grep ^ii
là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-grub
nó 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.
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.
apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
sudo apt-get autoremove
nên đủ (thường để lại cho bạn 3 hạt nhân cuối cùng)
/boot
là đầy đủ, vì vậy apt-get
sẽ 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 -rf
trong /boot
) nhưng là người duy nhất có khả năng làm việc trong tình huống này.
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 install
ngay 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 update
và sudo apt-get upgrade
chă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.
dpkg --purge
trê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
df -i
tô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
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-kernels
cô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
apt-get autoremove --purge
nên là đủ, mặc dù.
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) /boot
mụ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).
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
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 upgrade
khô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.
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-run
một khi bạn xác nhận nó có vẻ an toàn