/boot
파티션에 200MB가 할당되었습니다 . 커널을 업데이트하려고 할 때마다 기본적으로 상태 /boot
가 꽉 찼다 는 오류 메시지가 나타납니다 .
/boot
이전 커널 을 정리 하고 제거 / 백업하려면 어떻게해야합니까?
/boot
파티션에 200MB가 할당되었습니다 . 커널을 업데이트하려고 할 때마다 기본적으로 상태 /boot
가 꽉 찼다 는 오류 메시지가 나타납니다 .
/boot
이전 커널 을 정리 하고 제거 / 백업하려면 어떻게해야합니까?
답변:
먼저 커널 버전을 확인하여 사용중인 커널 이미지를 삭제하지 마십시오.
uname -r
설치된 커널 목록을 보려면이 명령을 실행하십시오.
dpkg --list 'linux-image*' | grep ^ii
다음을 실행하여 더 이상 필요하지 않은 커널을 삭제하십시오.
sudo apt-get remove linux-image-VERSION
VERSION을 제거하려는 커널 버전으로 바꾸십시오.
이전 커널을 제거하면 더 이상 필요없는 패키지를 제거하기 위해이 커널을 실행할 수 있습니다.
sudo apt-get autoremove
마지막으로 grub 커널 목록을 업데이트하기 위해 이것을 실행할 수 있습니다.
sudo update-grub
sudo dpkg --list 'linux-image*' | grep ^ii
설치된 커널 만보다 쉽게 볼 수 있습니다. 또한 나는 update-grub
무해하지만 엄격하게 필요한 것은 아니라고 생각합니다 . 커널을 제거 할 때 자동으로 실행됩니다.
sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""
에 사용되는 패키지 이름의 목록을 얻을 sudo apt-get remove
. head -n -3
가장 최근의 커널 3 개를 시스템에 유지하는 데 사용됩니다.
apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
sudo apt-get autoremove
충분하다 (보통 마지막 3 개의 커널로 떠난다)
/boot
가 가득 찼으므로 apt-get
오류 코드 또는 기타 오류로 실패합니다. 답은 아래에 약간의 "hackier"(나는 그것을 발행하는 철강 자신에게 한 고백해야이다 rm -rf
에서 /boot
)하지만,이 상황에서 일할 가능성이있는 유일한 사람.
참고 : 이것은 100 % 전체 / 부팅으로 인해 apt를 사용하여 정리할 수없는 경우에만 해당됩니다
/ boot가 100 %이기 때문에 apt-get이 작동하지 않으면 먼저 / boot를 정리해야합니다. 이것은 부분 설치에서 커널 업그레이드를 포착했을 가능성이 높습니다. 이는 apt가 완전히 멈 췄음을 의미 apt-get -f install
하며 명령이 계속 실패하더라도 계속 실행하라는 메시지를 표시합니다 .
커널 이미지 목록을보고없이 수행 할 수있는 작업을 결정하십시오. 이 명령은 현재 실행중인 커널을 제외하고 설치된 커널을 보여줍니다 sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`
. 목록에서 두 가지 최신 버전을 확인하십시오. 여기에 나열되어 있지 않으므로 실행중인 것에 대해 걱정할 필요가 없습니다. 로 확인할 수 있습니다 uname -r
.
중괄호 확장을 사용하여 제정신을 유지하는 데 중요하지 않은 커널에 대해 / boot에서 모든 파일을 삭제하는 명령을 작성하십시오. 현재 및 두 개의 최신 커널 이미지를 제외해야합니다. 예 : sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*
. 구문 {80..84}와 함께 범위를 사용할 수도 있습니다.
sudo apt-get -f install
부분 설치에 대해 심술 making은 것을 정리합니다.
"내부 오류 : 이미지를 찾을 수 없습니다 (/boot/vmlinuz-3.2.0-56-generic)"와 같은 줄이 포함 된 오류가 발생하면 명령을 sudo apt-get purge linux-image-3.2.0-56-generic
적절한 버전으로 실행하십시오 .
마지막으로 sudo apt-get autoremove
수동 부팅 정리로 분리 된 이전 커널 이미지 패키지를 지우십시오.
전체 / 부트 파티션을 발견하기를 기다리는 동안 백업되었을 수있는 업그레이드를 제안, 실행 sudo apt-get update
및 sudo apt-get upgrade
관리합니다.
제안 2 : https://help.ubuntu.com/community/AutomaticSecurityUpdates를 검토 하고 /etc/apt/apt.conf.d/50unattended-upgrades에서 Unattended-Upgrade :: Remove-Unused-Dependencies를 true로 설정하는 것을 고려하십시오. 이것은 각 보안 업데이트 후 자동 제거를 실행하여 사용하지 않는 커널을 정리하지만 사용하지 않는 것으로 생각되는 다른 것들도 제거하여 나중에이 문제에서 벗어날 수 있습니다.
dpkg --purge
전체 부팅 을 사용 하면 다음과 같은 결과가 나타납니다. $ 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
나는 /
이전 커널의 소스 코드를위한 엄청난 양의 파일 때문에 inode가 부족하다는 것을 알았 습니다./usr/src
https://help.ubuntu.com/community/RemoveOldKernels 에 이에 대한 설명서가 있습니다.
요약 : 사용
sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels
purge-old-kernels
도구를 통해 설치 될 수 있습니다 sudo apt install byobu
. 다음은 해당 매뉴얼 페이지의 설명입니다.
이 프로그램은 시스템에서 오래된 커널 및 헤더 패키지를 제거하여 디스크 공간을 비 웁니다. 현재 실행중인 커널을 제거하지 않습니다. 기본적으로 최소 2 개의 커널을 유지하지만 사용자는
--keep
매개 변수를 사용하여 해당 값을 무시할 수 있습니다 .
복사하여 붙여 넣기 솔루션을 원하는 경우 ReSearchIT Eng는 다음을 제안했습니다.
sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge
apt-get autoremove --purge
그래도 충분 하다고 생각 합니다.
작은 파티션을 버리고 /boot
루트 로 이동하는 것이 훨씬 쉽다는 것을 알았습니다 . 또한 향후 공간 부족 문제를 방지합니다.
먼저 부팅 파티션에서 루트로 데이터를 이동하십시오 (으로 실행 sudo -s
).
cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot
다음에서 /boot
항목을 제거 (또는 주석)하십시오 /etc/fstab
.
vim /etc/fstab
grub을 업데이트하고 모든 것이 올바른지 확인하십시오.
update-grub
apt
이제 문제없이 업그레이드 할 수 있어야합니다.
이것은 사용되지 않은 200MB 파티션을 남깁니다 (문제가 발생하면 다른 용도로 사용할 수 있음).
이전 커널 제거 (/ boot에 여유 공간 확보) : http://askubuntu.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]+//')")
그런 다음 실행
sudo apt-get update
sudo apt-get autoremove
이것은 마지막 2 개의 커널을 제외한 모든 커널을 제거합니다. /boot
용량이 100 % 일 때 Ubuntu 16.04 LTS에서 테스트되었으며 apt-get upgrade
마지막 커널 업그레이드에 실패했습니다. 커널 자동 제거는 반복적이므로 여러 커널이있는 경우 한 번에 하나씩 제거됩니다. 그러니 인내하십시오.
도구로 할 수있는 이유는 무엇입니까? 요즘 새 커널 업데이트를 푸시하는 데 30 초가 걸리기 때문에 30 초 후에 다시 필요하다는 것을 알고 있습니다. = P
이 도구 인 bootnukem을 사용하는 것이 좋습니다.
git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh
그때
sudo bootnukem --dry-run
--dry-run
안전하다고 확인되면 제거