/ boot에서 더 많은 공간을 확보하려면 어떻게해야합니까?


563

/boot파티션이 거의 가득 내가 경고를 내 시스템을 다시 부팅 할 때마다 얻을. 이전 커널 패키지 (linux-headers ...)를 이미 삭제했습니다. 실제로 자동 업데이트와 함께 제공되는 최신 커널 버전을 설치했습니다.

새 버전을 설치 한 후 파티션이 거의 가득 찼습니다. 그래서 다른 무엇을 삭제할 수 있습니까? 이전 커널 이미지와 관련된 다른 파일이 있습니까?

/boot파티션 에있는 파일 목록은 다음과 같습니다 .

:~$ 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

현재 3.0.0-14-generic커널을 사용하고 있습니다.


5
모든 우분투 설치에 별도의 / boot 파티션이있는 것은 아니며 종종 하나의 큰 파티션 일뿐입니다. 이 답변은 별도의 / boot 파티션이있는 사용자에게 적용됩니다. LVM 또는 "전체 디스크"암호화를 사용하는 경우 별도의 / boot가 필요합니다. 그렇지 않으면 선택 사항 일 수 있습니다.
thomasrutter

4
다른 사람이 나와 같은 문제가있는 경우 : / boot에 남은 공간이없는 경우 설치된 커널에 대해 initrd 파일을 다시 생성하거나 update-initramfs 스크립트가 설치된 것으로 판단되면 "apt-get upgrade"가 실패합니다. / var / lib / initramfs-tools의 내용 이 경우 fscking / boot 파티션에 장치에 남은 공간이 없기 때문에 apt-get을 사용하여 이전 커널을 제거 할 수 없습니다. "dpkg -P"를 사용하여이 작업을 수행 한 다음 / boot (사용 가능한 공간 확보) 및 / var / lib / initramfs-tools의 해당 항목을 정리하십시오 (initrd 이미지는 생성되지 않음).
wojci

3
정답의 핵심 은 이전 버전의 커널이 포함 된 패키지 를 제거하라는 메시지 입니다. 이 문제를 해결하는 많은 웹 페이지 는 / boot 파티션에서 파일 을 직접 제거 할 것을 권장 합니다. 패키지가있는 커널 버전에 대해 누락 된 파일을 다시 생성하는 패키지를 업데이트하여 공간이 부족해질 수 있습니다.
kgrittn

답변:


629

사용하지 않은 커널이 많이 있습니다. 다음을 사용하여 마지막 커널을 제외한 모든 커널을 제거하십시오.

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

이것은 속기입니다 :

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

제거 단계 linux-image-x.x.x-x패키지도 제거됩니다 linux-image-x.x.x-x-generic.

헤더는 /usr/src전용 엔비디아 드라이버 및 가상 박스와 같은 외부 트리 커널 모듈을 구축 할 때 설치되고 사용됩니다. 일치하는 커널 패키지 ( linux-image-*)가 설치되지 않은 경우 대부분의 사용자는이 헤더 패키지를 제거해야합니다 .

설치된 모든 커널을 나열하려면 다음을 실행하십시오.

dpkg -l linux-image-\* | grep ^ii

현재 실행중인 커널을 제외하고 제거 할 수있는 모든 커널과 헤더를 표시하는 하나의 명령 :

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

linux-headers-<some number>또는로 시작하는 이름의 모든 패키지를 선택하고 linux-image-<some number>설치된 패키지의 패키지 이름을 인쇄 한 다음 현재로드 / 실행중인 커널 ( 최신 커널 일 필요는 없음) 을 제외합니다 . 이것은 작동하는 오래된 커널을 제거하기 전에 최신 커널을 테스트 할 것을 권장합니다.

따라서 커널을 업그레이드하고 다시 부팅하여 테스트 한 후 다음을 사용하여 다른 모든 커널을 제거 할 수 있습니다.

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

16
환상적인 답변. 추가 정보가 도움이 될 것입니다. 사용중인 커널을 어떻게 알 수 있습니까? 아마도 당신은 그냥 마지막 ...의지지 않습니다 편집 : 그리고 그것은 보이는 대답은 같은 uname -a. 보류중인 설치를 다시 시작하여 새 커널을 보류하지 않도록하는 것이 가장 좋습니다 (하지만 uname -a, "최신"커널과의 불일치에 주목했습니다 ).
TJ Crowder

5
@ 프레디 브. 이 명령 은로드 / 부트 된 커널 이외의 커널을 인쇄 / 제거합니다 .
Lekensteyn

9
충족되지 않은 종속성으로 인해 apt-get purge가 실패하면 askubuntu.com/questions/171209/…
svandragt

11
매우 철저한 답변과 여전히 작동하고 ... 2014 년에도 여전히 필요합니다. 여전히 GUI 도구에 의해 자동으로 수행되지 않는다는 것은 우스운 일입니다.
allprog

6
@ byf-ferdy 커널은 OS의 필수 부분입니다. 최신 버전이 하드웨어에서 완전히 작동하지 않으면 부팅 할 다른 버전을 선택할 수 있습니다. 좋은 기능은 아마도 한 달 이전에 자동으로 설치된 모든 커널을 제거하는 것입니다 (최근 두 달 제외).
Lekensteyn

217

부팅 파티션이 가득 찼습니다. 이것은 커널 업데이트이므로 이러한 파일은 부팅 파티션에 복사되므로 정리해야합니다. 다음은 하나의 명령으로 이전 커널 이미지를 지우는 방법을 보여주는 블로그 게시물 입니다. 이 방법의 기본 개요를 알려 드리겠습니다. 이 명령을 사용하여 현재 버전의 커널을 인쇄하십시오.

uname -r

그런 다음이 명령을 사용하여 최신 커널이 아닌 설치 한 모든 커널을 인쇄하십시오.

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

현재 커널이 해당 목록에 없는지 확인하십시오. 이것이 최종 명령의 대부분인 방법에 주목하십시오 (아래). 이러한 오래된 커널을 제거하고 삭제하려면 다음 인수를 파이프하십시오.

sudo apt-get -y purge

이제이 마지막 두 명령을이 부정한 혼란에 결합하여 원하는 모든 것을 할 수 있습니다.

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

그리고 그 하나의 명령은 당신을 위해 모든 것을 돌볼 것입니다. 나는 이것이 완벽하게 작동하지만 인터넷상의 아무도 믿지 않는다는 것을 확인합니다. :) 자세한 정보를 위해 블로그 게시물은 명령의 각 부분이 무엇을 읽었는지에 대한 아주 좋은 설명을 제공하므로 원하는 작업을 수행 할 수 있습니다.


이것은 또한 linux-libc-dev : amd64와 일치합니다
Frederick Nord

"linux-libc-dev : amd64"를 실수로 제거하면 어떻게됩니까?
ConfusedStack

@FrederickNord 감사합니다. 이 문제를 해결했습니다. c 프로그램을 컴파일하는 데 어려움이 있었을 것입니다.
dward

8
명령은 잘 들리지만 실행하면 무언가를 설치하려고 할 때와 같은 오류가 발생하며 부팅이 가득 찼으므로 실행할 수 없습니다. --------------- ----------- 다음 패키지는 충족되지 않은 의존성을 가지고 있습니다 : linux-image-extra-4.2.0-27-generic : 의존합니다 : linux-image-4.2.0-27-generic linux-image-extra-4.2.0-30-generic 설치 : 의존 : linux-image-4.2.0-30-generic
Alex

109
sudo apt-get autoremove

이 명령은 자동으로 작업을 수행합니다.


7
이름에서 알 수 있듯이 apt-get AUTOremove는 시스템이 달성하려는 것을 "최상의 추측"으로하는 자동화 된 작업입니다. 상식 시스템 관리를 대신 할 수 없습니다. 이 접근 방식의 문제점 :이 종속성 목록의 일부인 패키지를 제거하면 자동 제거 기능이 종속성 목록의 다른 모든 패키지를 제거하려고합니다. 시스템이 완전히 고장난 경우에도).
Rinzwind

참고 : 한 많은 소스의 이상이 댓글에 대한 : linuxquestions.org/questions/debian-26/...
Rinzwind

7
linux-image-generic이 설치되어 있고 새 커널이 명시 적으로 설치되지 않은 경우 이전 커널이 제거됩니다. 상식은 시스템을 먼저 읽지 않고 변경 사항을 받아들이지 않는 것입니다. 이 명령을 사용하기 전에 상식을 사용했다면 아무런 문제가 없습니다.
mchid

1
@Rinzwind -이 명령은 기존 '리눅스 헤더'를 제거하여 내 디스크 공간 250MB의 비운
Chinmaya B에게

3
공간 부족 조건이 존재 하기 전에 사용되는 경우 자동 제거가 작동 합니다. 그러나 일단 apt 공간이 부족하고 중단되면 (그리고 사용자가 문제를 발견하면) autremove 또는 다른 apt 기반 솔루션을 실행하기에는 너무 늦습니다. 이 경우 dpkg 기반 솔루션 중 하나를 사용해보십시오.
user535733

40

Synaptic Package Manager를 사용하여 이전 커널 이미지를 쉽게 선택하고 제거 할 수 있습니다. 시냅틱 패키지 관리자의 스크린 샷

시냅틱이 설치되어 있지 않은 경우 :

sudo apt-get install synaptic

응용 프로그램을 시작하고 표시된 옵션을 선택하십시오.

버전이 "2.6.x"인 모든 "linux-"패키지를 강조 표시 할 수 있어야합니다. 여기서 x는 / boot 폴더의 파일에 따라 31-38입니다.

각 Linux 패키지를 마우스 오른쪽 단추로 클릭하고 "완전 제거 표시"옵션을 선택하십시오. 마지막으로 적용 버튼을 클릭하십시오. 모든 파일과 관련 파일이 제거됩니다. 귀하의 /boot폴더가 이제 조금 정돈해야한다.


나는 14.04에 있습니다. 나는 과거에 커맨드 라인을 통해이 상황을 처리했지만 오늘이 방법을 시도하기로 결정했다. 나를 위해 내 리눅스 이미지는 설치되지 않은 (수동) 설치되지 않았거나 (로컬 또는 폐기 됨)
Ryan

8
아뇨 공간이 없기 때문에 Synaptic을 설치할 수 없습니다 /boot!
John McGehee

@JohnMcGehee fsck와 parted가 그 문제를 해결해야합니다.
FlipMcF

25

문제에 대한 자세한 게시물을 보내 주셔서 감사합니다. 이것이 올바른 방향으로 가고 있습니다. 이전 커널 파일을 유지하는 것이 유용하지만 모든 커널 파일을 한 번에 제거 할 수 있지만이 게시물을 확인
하십시오. 사용하지 않는 모든 Linux 커널 헤더, 이미지 및 모듈을 제거하는 방법

명령 행을 통해 완료 원격을 통해이 작업을 수행하는 경우 WINSCP와 같은 것을 사용하여 터미널 세션을 열고 붙여 넣기 만하면됩니다.

다음은 기사 링크에서 복사 한 것이므로 전체 기사를 읽는 것이 좋습니다.

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

23

이것은 오래된 질문에 대한 새로운 답변이지만이 일을 청소하는 쉬운 방법은 Ubuntu Tweak 을 설치하는 것 입니다. 설치 하려면 :

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

그런 다음 Ubuntu Tweak을 실행하여 "관리자"탭으로 이동하면 여기에서 세 번의 클릭으로 발생합니다.

오래된 커널에 대한 우분투 조정 청소부

안전을 위해 마지막 커널 (잘 모르겠 음)이나 잘 알려진 커널을 그대로 두는 것이 좋습니다. 하지만 쉽게 사용자 정의 할 수 있습니다.

동일한 도구를 사용하여 많은 것을 정리할 수 있습니다.-섬네일 캐시 나 TB 캐시를 정리하면 필요한 경우 시스템에서이를 다시 빌드해야합니다.


Ubuntu tweak을 설치하고 리포지토리 웹 사이트로 이동하려고했습니다. 그것은 13.10 이전 버전이라고 말합니다. 15.04의 업데이트 버전이 있습니까?
JayCouture.com

@ JayCouture.com 사이트의 버전은 14.04입니다 ( "13.10 이전"은 이전 릴리스에 대한 링크 임). 14.10 또는 15.04 버전이 있으면 무시합니다.
Rmano

19

dpkg패키지를 직접 제거하는 데 사용하여 문제를 해결할 수있었습니다 . 패키지가 여전히에 나열되어 있지만 dpkg -l파일이에서 제거 /boot되어 공간이 확보됩니다.

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`

그 후, apt-get -f install의존성 문제를 해결했고 모든 것이 세상과 잘 어울 렸습니다.

그러나 나는 내 /boot크기를 늘리 거나 다른 일 을해야하는지 여전히 알아야하기 때문에이 대답을 받아들이지 않을 것입니다.


처음에 별도의 / boot 파티션이 없거나 100MB가 너무 작아서 크기를 늘려야합니다.
psusi

1
감사합니다, 나는 통해 삭제 :sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt

2
sudo dpkg --remove linux-image-3.5.0-28*이미지의를 통해 확인df -h
TiloBunt

고마워요, 이것도 나에게 도움이되었습니다. 나는 몇 가지 오래된 커널 ( 현재 사용중인 커널이 아닌 )을 제거한 다음을 수행했습니다 apt-get -f install. 또한 apt-get autoremove필요없는 다른 것을 제거 하기 위해 나중에 할 것을 잊지 마십시오 .
Yajo

15

별도의 / boot 파티션 사용을 중지하면 공간이 제한되지 않습니다. 이렇게하려면 파티션을 마운트 해제 한 다음 다른 위치에 마운트하고 루트 파티션의 / boot 디렉토리에 모든 파일을 복사 한 다음 / etc / fstab에서 항목을 제거하고 grub을 다시 설치하십시오. 예를 들어 올바른 파티션을 사용해야합니다.

sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

그런 다음 gparted를 사용하여 이전 / boot 파티션을 삭제하고 루트 파티션을 확장하여 해당 공간을 사용할 수 있습니다. 루트 파티션을 확장하려면 livecd에서 부팅해야하며 여유 공간이 바로 오른쪽에 있어야합니다. / boot 파티션이 현재 루트 파티션의 왼쪽에있는 경우 먼저 루트 파티션을 왼쪽으로 이동 한 다음 확장해야하지만 시간이 매우 오래 걸릴 수 있으므로 수고.


6
/ boot를 제외한 모든 것이 암호화되어 있기 때문에 / boot를 기본 파티션으로 옮기는 것은 해결책이 아닙니다. 당신은 내 질문에서 그것을 알 수 없었습니다. 죄송합니다.
user6722

부팅 볼륨에 공간이 전혀 없기 때문에 위의 솔루션이 작동하지 않거나 "공간 부족"문제가 반복적으로 발생하는 경우이 방법이 좋습니다. 비록 때때로 / boot 파티션이 필요한 이유를 먼저 읽으십시오 : ( help.ubuntu.com/community/DiskSpace )
svandragt

@svandragt, 요즘 기본적으로 / boot 파티션이 필요한 이유는 없습니다. 남은 유일한 정보는 바이오스가 고장 나서 전체 디스크를 볼 수없고 지난 10 년 동안 제조 된 머신에는 그러한 제한이없는 것입니다. raid 또는 LVM 사용과 같은 다른 레거시 사례는 이제 grub2에서 올바르게 처리됩니다.
psusi

별도의 부팅 파티션을 사용해야하는 몇 가지 이유가 있습니다. 그러나 이점이 복잡성 설정의 가치가 있다고 확신하지는 않습니다. 1. OS는 ext2를 통한 빠른 부팅의 이점을 누릴 수 있습니다. 2. / boot를 RO로 마운트하여 보안을 강화할 수 있습니다. (루트킷 등) 또는 OS 런타임에 마운트 해제 된 상태로 유지됩니다. 3. grub (1)에 ext4와 관련된 몇 가지 문제가 있습니다. 4. lvm (grubv1)을 실행하는 데 필요합니다. 이것은 기본 우분투 설정에는 적용되지 않습니다.
David Cahill

lsblk어떤 파티션이 무엇인지 결정하는 데 사용될 수 있습니다
Mr Purple

9

위의 답변을 최대한 활용하여 시도한 진정한 접근 방식은 다음과 같습니다.

  • uname -a 실행중인 커널을 찾으십시오.
  • dpkg -l linux-{headers,image}-\* | grep ^ii현재 설치된 모든 커널 관련 패키지를 나열합니다. 여기에는 실행중인 커널이 포함됩니다.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz}이전 커널을 제거합니다. 교체 xx,yy,zz커널의 목록을하는 것은 당신이 원하는 빌드 제거 -이 모든 현재 실행중인 커널보다 오래된 이전 명령으로 나열 빌드된다. 현재 실행중인 커널을 제거하지 마십시오 . 시스템을 부팅 할 수 없게 됩니다. 커널 버전을 3.16.0시스템에 설치된 버전으로 변경해야 할 수도 있습니다.
  • 선택적으로 추가 작업을 수행하면 sudo apt-get autoremove현재 커널에서 더 이상 필요하지 않은 기존 커널의 남은 종속성을 제거하여 공간을 더 확보 할 수 있습니다.

일치하는 커널 버전이 설치되지 않은 헤더 파일이 있거나 그 반대의 경우도 있습니다. 명령에이 모든 버전을 포함하십시오. APT는 일부 패키지는 설치되지 않았기 때문에 제거 할 수 없지만 해를 끼치 지 않을 것이라고 불평합니다.

뭔가 실패하면 ...

  • 장치에 남은 공간없기 때문에 apt 명령이 실패 하면 해당 dpkg 명령을 대신 사용하십시오 sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • 동일한 버전 linux-imagelinux-headers패키지 (설치 제거하려는 패키지)에 패키지가 필요 하기 때문에 dpkg 명령이 여전히 작동하지 않으면 dpkg가이를 해결하지 못한 것일 수 있습니다. dpkg -l명령 행 에서 출력을 다시 검토하고 패키지 이름 접미 부를 지정하십시오. 예를 들어, 내 시스템 중 하나에서 결국 작동했던 명령은 sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae입니다.
  • 다른 오류가 발생하면 도움을 요청하십시오. 생각과 다른 문제가있을 수 있습니다.

@ user535733 일반적인 경우 (적어도 계속 계속 실행하는 경우)에는 다른 커널 패키지로는 충분하지 않은 공간 이 여전히 있습니다/boot . 그러한 경우 위의 내용은 잘 작동했습니다. 그러나 해당 dpkg명령 을 자유롭게 추가하십시오 . 에 관해서는 purge, 아니, 그것은 '강제 제거'의 일종이 아니다. 와 달리 remove구성 파일도 삭제한다는 것입니다. 커널 패키지가 어떤 설정 파일을 설치하지로 / 한 이후 removepurge커널 패키지에 대한 동일한 작업을 수행합니다.
user149408

해당 dpkg 명령으로 네 번째 글 머리 기호를 추가했습니다.
user535733

4

나를 위해 모두 apt-get purgedpkg --remove모두 실패했습니다. 따라서 / boot에서와 함께 몇 가지 이전 커널 이미지를 삭제해야했습니다 rm -f.


4
패키지를 제거하는 좋은 방법은 아닙니다. 이 답변은 왜 올바른 방법으로 제거하지 못했는지에 대해서는 구체적이지 않지만, (물론 별도의 질문으로) 해당 정보가 제공된 경우 문제의 원인을 알아낼 수있을 것입니다.
thomasrutter

2
/boot파티션이 가득 차서 실패했다고 생각합니다 . 이 명령은 먼저 커널을 최신으로 업그레이드 No space left on device하고 생성 하는 동안 충돌합니다initrd.img
vp_arth

1
경고 : 파일을 직접 제거하면 문제가 발생할 수 있습니다. linux-firmware 패키지를 업데이트하면 패키지 정보를 기반으로 설치된 것으로 생각되는 모든 버전에 대해 initrd.img 파일을 다시 만들 수 있습니다. 참조 : askubuntu.com/questions/865577/…
kgrittn

1
고마워, 이것은 아무것도 작동하지 않을 때 생명을 구하는 최종 솔루션입니다.
Jeff Puckett

4

모든 커널을 나열하십시오.

dpkg --list 'linux-image*'

현재 커널 표시 :

uname -r

현재 커널을 제외한 모든 커널을 나열하십시오 .

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

현재 커널이 해당 목록에 없는지 확인하십시오.

현재 커널을 제외한 모든 커널을 제거하십시오 .

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

다른 것들을 지우십시오 :

sudo apt-get autoremove

파일을 설치 / 제거 할 때 여전히 부팅 디스크 공간 오류가 발생하면 / boot 디렉토리에서 OLD 이미지 중 하나를 직접 제거하십시오 .

ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 

참고 : 이미지를 삭제하기 전에 현재 커널 이미지를 다시 검토하십시오.


2

이미 오래된 커널 패키지 (linux-headers ...)를 삭제했습니다.

linux-headers-*커널이 아닙니다. 커널 패키지는이라는 이름 linux-image-*입니다. 라는 사람은 linux-headers-*커널 모듈을 컴파일하기위한 개발 패키지입니다 : 그들은 / 부팅 디렉토리에 거주하지 않는 및 시스템의 일 사용에 일반적으로 하루에 필요하지 않습니다.

당신이 / 부팅 나열된 파일은 몇 가지 오래 된 커널 이미지를 포함 ( vmlinuz*)와 컴파일 된 initrd 이미지 ( initrd.img*당신은 여전히 설치 이전 커널 패키지를 많이 가지고 나타냅니다 그 커널에 대한).

설치된 커널을 다음과 같이 나열 할 수 있어야합니다.

aptitude search ~ilinux-image

(이것은 아마도 커널이 아닌 패키지를 반환 할 것입니다).

일반적으로 현재 사용중인 커널과 이전 커널을 두 개 이상 설치할 필요가 없습니다 (대체로). 따라서 다음과 같이 오래된 것을 하나씩 제거 할 수 있습니다.

sudo apt-get autoremove linux-image-3.2.0-23-generic

"3.2.0-23-generic"을 제거하려는 실제 커널 버전으로 대체하십시오! 또한와 같은 패키지를 제거하지 마십시오 linux-image-generic. 현재 실행중인 커널을 제거하지 않도록 조심해야합니다. 그렇지 않으면 부팅 할 수 없습니다 (우분투는이 작업에 대해 경고하거나 경고하지 않을 수 있습니다).

다음을 사용하여 현재 실행중인 커널을 찾을 수 있습니다.

uname -r

1

initrd-img-xxx/ boot에서 일부 파일을 수동으로 제거 할 때이 문제 가 발생했으며 이전 버전이 계속 생성되어 /boot폴더를 채우는 문제가있었습니다 . 그것을 고치기 위해 나는 다음을 따랐다.

  • 공간을 확보하기 위해 생성 된 이전 커널 버전을 수동으로 제거했습니다.
  • 텍스트 구성 파일을 수퍼 유저로 편집하므로 다음을 터미널에 붙여 넣으십시오.

    sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • 줄을 update_initramfs=yes찾아로 변경하십시오 update_initramfs=no. 파일을 저장하고 종료 한 후 다음을 실행하십시오.

    sudo dpkg --configure -a
    

그게 내 문제를 해결했다. 이 블로그를 기반으로

재부팅 할 때 희망, 다 잘해야하고, 나중에는 변경 시도 할 수 있습니다 no다시 yes에를 update-initramfs.conf.


1

나는 여전히 2017 년 에이 질문에 새로운 의견과 답변이 있지만 여기에 매우 유용하다고 생각되는 답변이 누락되었음을 보여줍니다.

간단한 일상적인 사용의 데스크톱 OS 인 Ubuntu는 별도의 \ boot 파티션으로 설치할 이유가 없으며 이와 같은 것은 "공통 사용자"에게 무언가를 제공하지 않습니다 ... 그래서 해결책은 \ boot 파티션이없는 새로운 설치이며 그런 문제가 없을 방법

추신 : 내 대답은 수락 된 답변에서 삭제되거나 추가 될 수 있습니다 ... (이 방법은 일부 사람들에게 도움이 될 것이라고 생각합니다)


1

부팅 파티션을 지우는 매우 유용한 유틸리티

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

당신 자신의 위험 부담으로 사용하지만 그것은 나를 위해 일했습니다 :

sudo bootnukem

왜 공감해야합니까?
Jonathan

0

적성 또는 시냅스에는 "이전 또는 수동으로 설치된 패키지"섹션이 있습니다. 거기에는 오래된 리눅스 패키지가 있어야합니다.


0

아래에 작성한 bash 스크립트가있어 프로세스를 좀 더 사용자 친화적으로 만듭니다.

YMMV-민트 14를 위해 만들어졌습니다. 아직도 배쉬를 배우기 때문에 아마도 약간 어색합니다. 자신의 책임하에 사용하지만 그것은 나를 위해 작동합니다!

#!/bin/bash

endCol='\e[0m'
bold_red='\e[1;31m'
bold_green='\e[1;32m'
bold_yellow='\e[1;33m'

title_color='\e[0;30;47m'

function show_kernel_info {
clear
current_kernel=$(uname -r)
echo "Current ACTIVE kernel is:"
echo -e "  "$bold_yellow$current_kernel$endCol
echo "This kernel will be TOTALLY EXCLUDED from all actions in this script."
echo "Also, one fallback non-active kernel will be always left untouched."
echo ""
echo "These are the non-active kernels stored in /boot:"
count_of_old_kernels_in_boot=$(ls -o /boot/initrd* | grep -c -v "$current_kernel")
if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo " * No non-active kernels found! *"
else
  ls -o /boot/initrd* | grep -v "$current_kernel"
fi
echo ""
list_of_old_kernels=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic" | head -n 1)
count_of_old_kernels_installed=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -c -v "linux-image-generic")
echo "Listing of all unused kernels still installed in the system (these may not exist in /boot):"
if [ $count_of_old_kernels_installed = 0 ]; then
  echo " * No unused kernel installs found! *"
else
  dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic"
fi
echo ""
}

function exit_script {
free_space_after=$(df -BM /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
let freed_space=$free_space_after-$free_space_before
echo ""
echo "Results (in MB)"
echo "---------------"
echo "Free space in /boot before script was run: "$free_space_before
echo "Free space now: "$free_space_after
echo ""
echo "Amount of space freed up = "$freed_space
echo ""
echo "Press any key to exit."
read -s -n 1
echo ""
exit
}

# Main code
echo ""
echo -e $title_color" --------------------------- "$endCol
echo -e $title_color" -   Kernel Cleanup v1.0   - "$endCol
echo -e $title_color" --------------------------- "$endCol
echo ""
echo "Maximise this window for readability."
echo "Press any key to continue."
read -s -n 1
echo ""
echo "This script will remove old unused kernels, but it will prompt you before removing each one."
echo "It will never remove the current running kernel, and will also leave one fallback kernel."
echo "It can also remove source files from /usr/src for each kernel removed."
echo "This is normally safe to do and will free up lots more space."
echo ""
echo "Do you want that done as well? (y/n, enter=yes)"
valid_input=0
while [ "$valid_input" = "0" ]; do
  read -s -n 1 YesNo_input
  if [ "$YesNo_input" = "" ]; then
    YesNo_input="y"
  fi
  case $YesNo_input
  in
    y)
    RemoveSource="y"
    valid_input=1
    ;;

    Y)
    RemoveSource="y"
    valid_input=1
    ;;

    n)
    RemoveSource="n"
    valid_input=1
    ;;

    N)
    RemoveSource="N"
    valid_input=1
    ;;
  esac
done

free_space_before=$(df -h /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
show_kernel_info
while [ $count_of_old_kernels_in_boot -gt 1 ]; do
  # failsafe check if somehow the current kernel is about to be removed!
  if [ "$current_old_kernel" = "$current_kernel" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow the current kernel has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  # failsafe check if somehow a linux-image-generic entry is about to be removed
  if [ "$current_old_kernel" = "linux-image-generic" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow one of the linux-image-generic entries has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  echo "Command about to be executed is:"
  echo "  $ sudo apt-get purge \"$current_old_kernel\""
  check_in_boot=$(echo $current_old_kernel | sed 's/linux-image/initrd.img/g')
  if [ -e /boot/$check_in_boot ]; then
    echo -e $bold_yellow"Note:"$endCol" This kernel exists in /boot but it NON-active, so it's OK to remove."
  else
    echo -e $bold_green"Totally safe to remove:"$endCol" This kernel does NOT exist in /boot."
  fi
  echo ""
  echo "Are you sure you want to remove this kernel?"
  echo "(*upper case* Y=yes / any other key will exit the script)"
  read -s -n 1 yes_no
  echo ""
  # Only entering a single upper case Y will work!
  if [ "$yes_no" != "Y" ]; then
    echo "Aborting script."
    exit_script
  fi
  echo "Removing kernel "$current_old_kernel"..."
  sleep 1
  sudo apt-get -y purge $current_old_kernel
  if [ "$RemoveSource" = "y" ]; then
    current_old_source=$(echo $current_old_kernel | sed 's/linux-image/linux-headers/g')
    current_old_source=$(echo $current_old_source | sed 's/-generic//g')
    current_old_source=$(echo $current_old_source | sed 's/-pae//g')
    sudo apt-get -y purge $current_old_source
  fi
  show_kernel_info
done

if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo -e $bold_red"There are no NON-active kernels to remove!"$endCol
else
  echo -e $bold_red"There is only one NON-active kernel left in /boot!"$endCol
  echo "This script will not remove the last non-active kernel so that you have at least one backup kernel."
fi
echo "Aborting script."
exit_script

0

[AskUbuntu 멍청한 놈으로서 나는 평판이 50이 될 때까지 언급 할 수 없으므로 이것 때문에 투표하지 마십시오.]

내 서버 도이 작업을 수행했습니다. 말 그대로 여기에 예상되는 답변 중 어느 것도 / boot에 작업 공간이 필요하기 때문에 아무런 효과가 없었습니다. 부팅 파티션이 가득 찬 경우 이미지를 삭제하지 않고 갑자기 종료됩니다.

나를 위해 일한 유일한 것은 현재 이미지를 검토 한 다음 sudo rm filename가장 오래된 이미지 파일 (각각 이름에 -3.16.0-30있음) 을 수동으로 보는 것 입니다. 그 일이 끝나면 sudo apt-get autoremove업무를 수행하는 데 필요한 흔들 방이있었습니다. 해당 버전과 관련된 일부 오류를 강조했습니다. 예 : "depmod : FATAL : /boot/System.map-3.16.0-30-generic : 해당 파일 또는 디렉토리를로드 할 수 없습니다"가 예상됩니다.

완료되면 df/ boot에 42 %의 사용률을 반환하여 다시 정상임을 나타냅니다.


1
당신이 찾고있는 게시물은 askubuntu.com/questions/171209/…
muru

@muru 글쎄요 .. 원래 포스터도이 조언이 필요하다고 제안합니다. / boot가 가득 차면,이를 수정하려고하는 스크립트 버전도 / boot가 가득 차서 실패합니다.
저스틴 케이스

두 가지 비슷한 문제가 있습니다 : a) 시스템이 디스크가 꽉 차 있지만 경고를 표시 apt-get할 공간이 충분 하다는 경고 와 b) apt-get디스크가 너무 꽉 차서 실패하는 경우. 그것은 다른 게시물입니다.
muru


0

이 스크립트를 다음과 같이 저장하십시오 /usr/local/bin/remove_kernels.sh(실행 권한을 부여해야 함 sudo chmod 755 /usr/local/bin/remove_kernels.sh).

#!/bin/sh
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 1
fi
apt purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )
update-grub

그런 다음 모든 오래된 커널을 제거하려면 다음을 입력하십시오. sudo remove_kernels.sh


0

/ boot 파티션은 때때로 조금 이상 할 수 있습니다

커널 파일을 직접 삭제하지 마십시오.

따라야 할 단계

  1. Linux 시스템에서 현재 사용중인 커널을 확인하십시오.

    uname -r

    이것은 시스템에 현재 설치된 커널 이미지의 이름을 제공합니다

  2. 이제 시스템에 설치된 특정 파일을 제외하고 추가 파일을 삭제하십시오.

    apt-get remove linux-image-XXXXX

  3. 헤더 파일도 제거하십시오.

    apt-get remove linux-headers-XXXXX

  4. 또한 apt작동이 중지 된 상태 일 수 있습니다. 이 경우 / boot로 전환하십시오.

    cd /boot

  5. 파일을 수동으로 제거하기 시작하지만 installed one's시스템에서 커널 파일을 삭제하지 않도록주의 하십시오.

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. 올바른 파일 정리를 제거한 후 부분 설치 (있는 경우)

    apt-get -f install

  7. 부팅 파일을 수동으로 정리할 때 추가 파일을 제거하십시오.

    apt-get autoremove

  8. 그럽 업데이트

    update-grub

  9. 마지막으로 시스템 패키지를 업데이트하십시오

    apt-get update


-1

더 이상 사용하지 않는 파일을 제거 할 수없고 동일한 장치에 여유 공간이있는 다른 파티션이있는 경우 parted / gparted 로 / boot 파티션의 크기를 조정할 수 있습니다 . (설치 미디어에도 포함되어 있습니다.)

경고 : 파티션 크기 조정은 위험한 작업이므로 중요한 데이터를 다른 미디어에 저장 한 후에 저장하십시오!


작은 개별 / 부트 파티션으로 고통받는 대부분의 사람들은 설치시 '전체 디스크 암호화'를 선택했으며, LVM이 필요합니다. 이 솔루션은 해당 사용자에게 해결하는 것보다 더 많은 문제를 일으키는 것으로 보입니다.
user535733
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.