/ boot 파티션을 정리하는 가장 안전한 방법은 무엇입니까?


273

/boot파티션에 200MB가 할당되었습니다 . 커널을 업데이트하려고 할 때마다 기본적으로 상태 /boot가 꽉 찼다 는 오류 메시지가 나타납니다 .

/boot이전 커널 을 정리 하고 제거 / 백업하려면 어떻게해야합니까?



/ boot가 가득 찬 경우 askubuntu.com/questions/263363/…을
nslntmnx 1

답변:


334

명령 줄 방법 ​​:

먼저 커널 버전을 확인하여 사용중인 커널 이미지를 삭제하지 마십시오.

uname -r

설치된 커널 목록을 보려면이 명령을 실행하십시오.

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

다음을 실행하여 더 이상 필요하지 않은 커널을 삭제하십시오.

sudo apt-get remove linux-image-VERSION

VERSION을 제거하려는 커널 버전으로 바꾸십시오.

이전 커널을 제거하면 더 이상 필요없는 패키지를 제거하기 위해이 커널을 실행할 수 있습니다.

sudo apt-get autoremove

마지막으로 grub 커널 목록을 업데이트하기 위해 이것을 실행할 수 있습니다.

sudo update-grub

34
sudo dpkg --list 'linux-image*' | grep ^ii설치된 커널 만보다 쉽게 ​​볼 수 있습니다. 또한 나는 update-grub무해하지만 엄격하게 필요한 것은 아니라고 생각합니다 . 커널을 제거 할 때 자동으로 실행됩니다.
Nelson

9
사용 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 개를 시스템에 유지하는 데 사용됩니다.
Sithsu

2
나의 간단한 하나의 라이너 :apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb

27
sudo apt-get autoremove충분하다 (보통 마지막 3 개의 커널로 떠난다)
mbx

6
이것은 좋은 대답이지만 대부분의 경우에 효과가 있다고 생각합니다. 문제 /boot가 가득 찼으므로 apt-get오류 코드 또는 기타 오류로 실패합니다. 답은 아래에 약간의 "hackier"(나는 그것을 발행하는 철강 자신에게 한 고백해야이다 rm -rf에서 /boot)하지만,이 상황에서 일할 가능성이있는 유일한 사람.
Marco

283

참고 : 이것은 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 updatesudo apt-get upgrade관리합니다.

제안 2 : https://help.ubuntu.com/community/AutomaticSecurityUpdates를 검토 하고 /etc/apt/apt.conf.d/50unattended-upgrades에서 Unattended-Upgrade :: Remove-Unused-Dependencies를 true로 설정하는 것을 고려하십시오. 이것은 각 보안 업데이트 후 자동 제거를 실행하여 사용하지 않는 커널을 정리하지만 사용하지 않는 것으로 생각되는 다른 것들도 제거하여 나중에이 문제에서 벗어날 수 있습니다.


3
이렇게하면 다음에 재부팅 할 때 최신 버전을 사용하고 그 전에 문제가 발생할 경우를 대비하여 최신 버전을 사용할 수 있습니다. 일반적으로 공간이 충분하므로 몇 가지로 인해 상처를 입지 않으며 주어진 시나리오에서 충분한 백업 옵션이 없기 때문에 편집증을 충족시킵니다.
flickerfly

1
무인 업그레이드로 인한 문제는 없었습니다. deb 패키지가 아닌 설치에서 의존성을 잃어 버리는 것에 대해 이것이 주로 문제가 될 수있는 시나리오를 상상할 수 있습니다. PHP를 설치하고 제거하고 소스에서 최신 버전을 설치한다고 가정하십시오. 이 버전에는 이전 설치에서 제공 한 종속성이 있지만 apt는 여전히 필요한지 알 수 없습니다. 다음에 자동 제거를 실행하면 해당 종속성이 사라집니다. 자동화 된 경우 약간 혼동 될 수 있습니다. 리포지토리 외부에 설치하지 않으면 완전히 안전하다고 생각합니다.
flickerfly

3
커널이 자동으로 업그레이드되었지만 나중에 제거되지 않은 여러 vsphere 가상 서버 에서 이것을 본 후에 는 자동화를 위해 Python 스크립트 를 작성 했습니다. 나는 그것에 더 많은 관심을 갖고 싶습니다
EvanK

2
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
flickerfly

1
/ boot apt-get install -f를 정리 한 후에도 여전히 작동하지 않습니다. 를 사용하여 df -i나는 /이전 커널의 소스 코드를위한 엄청난 양의 파일 때문에 inode가 부족하다는 것을 알았 습니다./usr/src
Kristofer

51

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

3
필자의 경우 보류중인 커널로 인해 apt가 작동하지 않으며 제안 된 수정 사항은 catch-22입니다.
James Bowery

먼저 askubuntu.com/a/304388/284313으로 깨진 패키지를 수정 해야했습니다. 그 후 솔루션이 작동했습니다.
James Bowery

3
나는 이것이 현재 받아 들여진 해결책이어야한다고 생각한다.
Fran Marzoa

3
이것은 허용 된 답변보다 훨씬 안전합니다. apt-get autoremove --purge그래도 충분 하다고 생각 합니다.
Woodrow Barlow

7

작은 파티션을 버리고 /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 파티션을 남깁니다 (문제가 발생하면 다른 용도로 사용할 수 있음).


5
이것은 좋은 생각이지만 루트 파티션에 대한 전체 디스크 암호화를 원할 경우 작동하지 않습니다.
Paŭlo Ebermann

예. / boot가 별도의 파티션이어야하는 경우가 있습니다. 다른 예로는 Grub이 이전에 LVM 파티션에서로드 할 수 없었습니다.
요새

4

이전 커널 제거 (/ 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

1
이것이 유일하게 작동 한 것입니다 ... 훌륭한 솔루션
John

최고의 답변! 이것은 나를 위해 일한 유일한 솔루션입니다. 자동 제거는 바보입니다. 의존성이없는 커널은 공식적으로 제거하기 전에 다시 설치하려고합니다. 나는 계속해서 공간이 부족한 서클에 들어갔다. 이 답변은 금입니다.
Lonnie Best

3

sudo apt-get autoremove

이것은 마지막 2 개의 커널을 제외한 모든 커널을 제거합니다. /boot용량이 100 % 일 때 Ubuntu 16.04 LTS에서 테스트되었으며 apt-get upgrade마지막 커널 업그레이드에 실패했습니다. 커널 자동 제거는 반복적이므로 여러 커널이있는 경우 한 번에 하나씩 제거됩니다. 그러니 인내하십시오.


1

도구로 할 수있는 이유는 무엇입니까? 요즘 새 커널 업데이트를 푸시하는 데 30 초가 걸리기 때문에 30 초 후에 다시 필요하다는 것을 알고 있습니다. = P

이 도구 인 bootnukem을 사용하는 것이 좋습니다.

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

그때

sudo bootnukem --dry-run

--dry-run안전하다고 확인되면 제거

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.