리눅스/Debian or Ubuntu

우분투 리눅스 커널 관리 01 - 오래된 커널 제거

씨실과 날실 2021. 3. 8. 09:00

리눅스 시스템 관리자는 시스템을 안정적으로 관리하기 위해 커널을 제거, 업데이트, 부팅 커널 변경 등의 작업을 합니다.

일반적인 데스크톱 환경 리눅스를 운영하는 사람들은 이 커널 관련 작업의 중요성이 서버 시스템 관리자에 비해 덜한 것은 사실입니다. 리눅스를 배포하는 커뮤니티들은 특히 그 배포 버전이 LTS라면 시스템이 최대한 안정적으로 돌아가도록 설계, 구축하기 때문입니다. 따라서 데스크톱 환경의 리눅스 초심자라면 커널 관련 작업 중 sudo apt update && sudo apt upgrade 명령으로 진행되는 커널 업데이트를 제외하고는 손을 대지 않는 것이 좋습니다.

 

그럼에도 불구하고 리눅스 관리자라면 언젠가 커널 관련 작업에 손을 댈 수밖에 없게 됩니다. 따라서 커널 관련 필수 작업들에 대해 연재하고자 합니다.

 

이번 글에 다룰 커널 관련 작업은 기존 커널의 제거 작업입니다.

앞서 주지했다시피 커널은 가능하면 건드리지 않는 것이 좋지만 디스크 용량의 부족 등의 이유로 더이상 쓰이지 않는 패키지들을 제거해 용량을 확보할 필요가 있을 때 더이상 쓰이지 않고 나중에라도 복구 등에 쓰이지 않을 것이 확실시되는 버전의 커널을 지워 용량을 확보할 수 있습니다.

 


1. 사용 중인 커널 확인

study@study-VirtualBox:~$ uname -r
5.8.0-44-generic

study@study-VirtualBox:~$ uname -a
Linux study-VirtualBox 5.8.0-44-generic #50~20.04.1-Ubuntu SMP Wed Feb 10 21:07:30 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
study@study-VirtualBox:~$ 

커널 정보를 확인하는 가장 손쉬운 방법은 uname 명령을 사용하는 것입니다. uname은 'You Name'의 의미를 명령어로 구현한 것으로 시스템의 일반 정보를 출력해주는 명령입니다.

총 10여 개의 옵션을 지원하지만 그중 자주 사용되는 옵션은 위와 같이 -r과 -a입니다.

uname 명령에 자주 사용되는 두 옵션의 의미

uname -r : 커널 릴리즈 정보 출력

uname -a : uname이 지원하는 시스템 정보 출력 옵션들 중 프로세서 정보(-p)와 하드웨어 플랫폼 정보(-i)를 제외한 모든 정보를 출력해줍니다.

 

study@study-VirtualBox:~$ cat /proc/version
Linux version 5.8.0-44-generic (buildd@lgw01-amd64-054) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #50~20.04.1-Ubuntu SMP Wed Feb 10 21:07:30 UTC 2021
study@study-VirtualBox:~$

uname을 더 많이 사용하지만 위와 같은 명령을 사용해 확인할 수도 있습니다.

 

2. 시스템에 설치되어 있는 모든 우분투 커널 확인

study@study-VirtualBox:~$ ls -l /boot
합계 262752
-rw------- 1 root root  4743112  9월 10 19:12 System.map-5.4.0-48-generic
-rw------- 1 root root  4743490 10월 15 19:28 System.map-5.4.0-52-generic
-rw------- 1 root root  5515823  2월  5 18:18 System.map-5.8.0-43-generic
-rw------- 1 root root  5519559  2월 11 03:51 System.map-5.8.0-44-generic
-rw-r--r-- 1 root root   237769  9월 10 19:12 config-5.4.0-48-generic
-rw-r--r-- 1 root root   237807 10월 15 19:28 config-5.4.0-52-generic
-rw-r--r-- 1 root root   248291  2월  5 18:18 config-5.8.0-43-generic
-rw-r--r-- 1 root root   248237  2월 11 03:51 config-5.8.0-44-generic
drwx------ 3 root root     4096  1월  1  1970 efi
drwxr-xr-x 4 root root     4096  2월 27 12:30 grub
lrwxrwxrwx 1 root root       27  2월 27 12:29 initrd.img -> initrd.img-5.8.0-44-generic
-rw-r--r-- 1 root root 50010972  2월 18 15:49 initrd.img-5.4.0-48-generic
-rw-r--r-- 1 root root 50021715  2월 18 15:49 initrd.img-5.4.0-52-generic
-rw-r--r-- 1 root root 52050974  2월 18 15:50 initrd.img-5.8.0-43-generic
-rw-r--r-- 1 root root 52063072  2월 27 12:30 initrd.img-5.8.0-44-generic
lrwxrwxrwx 1 root root       27  2월 27 12:29 initrd.img.old -> initrd.img-5.8.0-43-generic
-rw-r--r-- 1 root root   182704  8월 18  2020 memtest86+.bin
-rw-r--r-- 1 root root   184380  8월 18  2020 memtest86+.elf
-rw-r--r-- 1 root root   184884  8월 18  2020 memtest86+_multiboot.bin
lrwxrwxrwx 1 root root       24  2월 27 12:29 vmlinuz -> vmlinuz-5.8.0-44-generic
-rw------- 1 root root 11678464  9월 10 19:36 vmlinuz-5.4.0-48-generic
-rw------- 1 root root 11678464 10월 15 19:33 vmlinuz-5.4.0-52-generic
-rw------- 1 root root  9716672  2월  5 18:18 vmlinuz-5.8.0-43-generic
-rw------- 1 root root  9735840  2월 11 05:51 vmlinuz-5.8.0-44-generic
lrwxrwxrwx 1 root root       24  2월 27 12:29 vmlinuz.old -> vmlinuz-5.8.0-43-generic
study@study-VirtualBox:~$ 

시스템 부팅시 사용되는 파일을 담는 디렉터리인 /boot 디렉터리 안의 내용을 확인하여 시스템에 설치되어 있는 커널들을 확인할 수 있습니다.

이 명령은 어떤 계열의 리눅스이든 상관없이 사용할 수 있는 범용성 큰 명령입니다.

그러나 이 명령은 범용성이 큰 대신 가독성이 좋은 편이 아니며 필요한 추가 정보를 확인할 수 없어 일반적으로 각 리눅스 패키지 관리자의 명령을 활용하게 됩니다.

 

여기서는 우분투 20.04 LTS를 기준으로 설명하도록 하겠습니다.

study@study-VirtualBox:~$ dpkg --list|grep linux-image
rc  linux-image-5.4.0-26-generic               5.4.0-26.30                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-39-generic               5.4.0-39.43                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-42-generic               5.4.0-42.46                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-45-generic               5.4.0-45.49                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-47-generic               5.4.0-47.51                           amd64        Signed kernel image generic
ii  linux-image-5.4.0-48-generic               5.4.0-48.52                           amd64        Signed kernel image generic
ii  linux-image-5.4.0-52-generic               5.4.0-52.57                           amd64        Signed kernel image generic
ii  linux-image-5.8.0-43-generic               5.8.0-43.49~20.04.1                   amd64        Signed kernel image generic
ii  linux-image-5.8.0-44-generic               5.8.0-44.50~20.04.1                   amd64        Signed kernel image generic
ii  linux-image-generic-hwe-20.04              5.8.0.44.50~20.04.30                  amd64        Generic Linux kernel image
study@study-VirtualBox:~$ dpkg --list|grep linux-headers
ii  linux-headers-5.4.0-48                     5.4.0-48.52                           all          Header files related to Linux kernel version 5.4.0
ii  linux-headers-5.4.0-48-generic             5.4.0-48.52                           amd64        Linux kernel headers for version 5.4.0 on 64 bit x86 SMP
ii  linux-headers-5.4.0-52                     5.4.0-52.57                           all          Header files related to Linux kernel version 5.4.0
ii  linux-headers-5.4.0-52-generic             5.4.0-52.57                           amd64        Linux kernel headers for version 5.4.0 on 64 bit x86 SMP
ii  linux-headers-5.8.0-43-generic             5.8.0-43.49~20.04.1                   amd64        Linux kernel headers for version 5.8.0 on 64 bit x86 SMP
ii  linux-headers-5.8.0-44-generic             5.8.0-44.50~20.04.1                   amd64        Linux kernel headers for version 5.8.0 on 64 bit x86 SMP
ii  linux-headers-generic-hwe-20.04            5.8.0.44.50~20.04.30                  amd64        Generic Linux kernel headers
study@study-VirtualBox:~$ dpkg --list|grep linux-modules
rc  linux-modules-5.4.0-26-generic             5.4.0-26.30                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-39-generic             5.4.0-39.43                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-42-generic             5.4.0-42.46                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-45-generic             5.4.0-45.49                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-47-generic             5.4.0-47.51                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-5.4.0-48-generic             5.4.0-48.52                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-5.4.0-52-generic             5.4.0-52.57                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-5.8.0-43-generic             5.8.0-43.49~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
ii  linux-modules-5.8.0-44-generic             5.8.0-44.50~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-26-generic       5.4.0-26.30                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-39-generic       5.4.0-39.43                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-42-generic       5.4.0-42.46                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-45-generic       5.4.0-45.49                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-47-generic       5.4.0-47.51                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.4.0-48-generic       5.4.0-48.52                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.4.0-52-generic       5.4.0-52.57                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.8.0-43-generic       5.8.0-43.49~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.8.0-44-generic       5.8.0-44.50~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
study@study-VirtualBox:~$ 

리눅스 커널을 구성하는 주요 패키지들은 아래와 같습니다.

리눅스 커널을 구성하는 주요 패키지

linux-image-버전-generic/lowlatency

linux-headers-버전-generic/lowlatency

linux-modules-버전-generic/lowlatency

linux-modules-extra-버전-generic/lowlatency

linux-modules-버전

 

리눅스 커널은 다시 몇가지 종류로 나뉘게 되니다.

generic 커널 / low latency 커널

 

generic 커널

일반적인 환경에서 리눅스를 운영할 때 사용하는 가장 대중적인 커널 형식입니다.

 

low latency 커널

보안 위협으로부터 시스템을 보호하는 기능이 정상적으로 작동하는 환경 내에서 오디오 작업 등과 같이 가능한 한 짧은 대기시간(지연시간)을 필요로 할 때 그것을 지원하기 위해 특별히 고안된 커널입니다.

 

위에서는 커널을 구성하는 유형별 패키지들을 각각 검색했습니다만 해당 패키지들을 한번에 검색할 수도 있습니다.

study@study-VirtualBox:~$ dpkg --list|grep "linux-image\|linux-headers\|linux-modules"
ii  linux-headers-5.4.0-48                     5.4.0-48.52                           all          Header files related to Linux kernel version 5.4.0
ii  linux-headers-5.4.0-48-generic             5.4.0-48.52                           amd64        Linux kernel headers for version 5.4.0 on 64 bit x86 SMP
ii  linux-headers-5.4.0-52                     5.4.0-52.57                           all          Header files related to Linux kernel version 5.4.0
ii  linux-headers-5.4.0-52-generic             5.4.0-52.57                           amd64        Linux kernel headers for version 5.4.0 on 64 bit x86 SMP
ii  linux-headers-5.8.0-43-generic             5.8.0-43.49~20.04.1                   amd64        Linux kernel headers for version 5.8.0 on 64 bit x86 SMP
ii  linux-headers-5.8.0-44-generic             5.8.0-44.50~20.04.1                   amd64        Linux kernel headers for version 5.8.0 on 64 bit x86 SMP
ii  linux-headers-generic-hwe-20.04            5.8.0.44.50~20.04.30                  amd64        Generic Linux kernel headers
rc  linux-image-5.4.0-26-generic               5.4.0-26.30                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-39-generic               5.4.0-39.43                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-42-generic               5.4.0-42.46                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-45-generic               5.4.0-45.49                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-47-generic               5.4.0-47.51                           amd64        Signed kernel image generic
ii  linux-image-5.4.0-48-generic               5.4.0-48.52                           amd64        Signed kernel image generic
ii  linux-image-5.4.0-52-generic               5.4.0-52.57                           amd64        Signed kernel image generic
ii  linux-image-5.8.0-43-generic               5.8.0-43.49~20.04.1                   amd64        Signed kernel image generic
ii  linux-image-5.8.0-44-generic               5.8.0-44.50~20.04.1                   amd64        Signed kernel image generic
ii  linux-image-generic-hwe-20.04              5.8.0.44.50~20.04.30                  amd64        Generic Linux kernel image
rc  linux-modules-5.4.0-26-generic             5.4.0-26.30                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-39-generic             5.4.0-39.43                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-42-generic             5.4.0-42.46                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-45-generic             5.4.0-45.49                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-47-generic             5.4.0-47.51                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-5.4.0-48-generic             5.4.0-48.52                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-5.4.0-52-generic             5.4.0-52.57                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-5.8.0-43-generic             5.8.0-43.49~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
ii  linux-modules-5.8.0-44-generic             5.8.0-44.50~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-26-generic       5.4.0-26.30                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-39-generic       5.4.0-39.43                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-42-generic       5.4.0-42.46                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-45-generic       5.4.0-45.49                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-47-generic       5.4.0-47.51                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.4.0-48-generic       5.4.0-48.52                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.4.0-52-generic       5.4.0-52.57                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.8.0-43-generic       5.8.0-43.49~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.8.0-44-generic       5.8.0-44.50~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
study@study-VirtualBox:~$ 

 

커널 관련 패키지 수를 확인 방법은 위 명령 뒤에 | wc -l 을 덧붙여 주면 됩니다.

study@study-VirtualBox:~$ dpkg --list|grep "linux-image\|linux-headers\|linux-modules" | wc -l
35
study@study-VirtualBox:~$

 

커널 패키지명 앞에 ii 또는 rc가 붙은 것을 볼수 있는데 이것들은 다음과 같은 의미를 가집니다.

dpkg --list 명령의 결과물에서 패키지명 앞에 붙는 기호의 의미

ii : 해당 패키지가 시스템에 정상적으로 설치되어 있는 경우

rc : 해당 패키지가 제거되고 설정 파일만 남아 있는 경우

iU : 해당 패키지가 다운로드되어 설치 대기중인 경우

 

3. 오래된 커널 삭제 방법들

3-01. autoremove를 통한 제거

study@study-VirtualBox:~$ sudo apt autoremove
[sudo] study의 암호: 
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 패키지를 지울 것입니다:
  libllvm10 linux-headers-5.4.0-48 linux-headers-5.4.0-48-generic
  linux-headers-5.4.0-52 linux-headers-5.4.0-52-generic
  linux-image-5.4.0-48-generic linux-image-5.4.0-52-generic
  linux-modules-5.4.0-48-generic linux-modules-5.4.0-52-generic
  linux-modules-extra-5.4.0-48-generic linux-modules-extra-5.4.0-52-generic
0개 업그레이드, 0개 새로 설치, 11개 제거 및 0개 업그레이드 안 함.
이 작업 후 794 M바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까? [Y/n] 

sudo apt autoremove는  다른 패키지의 종속성을 충족시키기 위해 자동으로 설치가 되었지만 자동 설치의 근거가 되었던 패키지가 제거됨으로써 더이상 불필요해진 자동 설치 패키지들을 한번에 손쉽게 제거하는 명령입니다.

 

이 명령은 오래된 커널을 자동으로 제거하는데도 사용됩니다.

위 예에서 보면 오래된 커널 관련 패키지 10개도 같이 제거됨을 볼 수 있습니다.

 

apt autoremove 명령은 일반적인 경우 현재 사용 중인 버전의 커널, 제거되지 않도록 미리 설정된 커널, 그리고 최신의 두 버전 커널을 제외하고 그외 오래된 버전의 커널을 제거합니다.

 

study@study-VirtualBox:~$ sudo apt autoremove
[sudo] study의 암호: 
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 패키지를 지울 것입니다:
  libllvm10 linux-headers-5.4.0-48 linux-headers-5.4.0-48-generic
  linux-headers-5.4.0-52 linux-headers-5.4.0-52-generic
  linux-image-5.4.0-48-generic linux-image-5.4.0-52-generic
  linux-modules-5.4.0-48-generic linux-modules-5.4.0-52-generic
  linux-modules-extra-5.4.0-48-generic linux-modules-extra-5.4.0-52-generic
0개 업그레이드, 0개 새로 설치, 11개 제거 및 0개 업그레이드 안 함.
이 작업 후 794 M바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까? [Y/n] y
(데이터베이스 읽는중 ...현재 280133개의 파일과 디렉터리가 설치되어 있습니다.)
libllvm10:amd64 (1:10.0.0-4ubuntu1)를 제거합니다...
linux-headers-5.4.0-48-generic (5.4.0-48.52)를 제거합니다...
linux-headers-5.4.0-48 (5.4.0-48.52)를 제거합니다...
linux-headers-5.4.0-52-generic (5.4.0-52.57)를 제거합니다...
linux-headers-5.4.0-52 (5.4.0-52.57)를 제거합니다...
linux-modules-extra-5.4.0-48-generic (5.4.0-48.52)를 제거합니다...
linux-image-5.4.0-48-generic (5.4.0-48.52)를 제거합니다...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-5.4.0-48-generic
/etc/kernel/postrm.d/zz-update-grub:
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
grub 설정 파일을 형성합니다 ...
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.8.0-44-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.8.0-44-generic
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.8.0-43-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.8.0-43-generic
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.4.0-52-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.4.0-52-generic
Adding boot menu entry for UEFI Firmware Settings
완료되었습니다
linux-modules-extra-5.4.0-52-generic (5.4.0-52.57)를 제거합니다...
linux-image-5.4.0-52-generic (5.4.0-52.57)를 제거합니다...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-5.4.0-52-generic
/etc/kernel/postrm.d/zz-update-grub:
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
grub 설정 파일을 형성합니다 ...
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.8.0-44-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.8.0-44-generic
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.8.0-43-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.8.0-43-generic
Adding boot menu entry for UEFI Firmware Settings
완료되었습니다
linux-modules-5.4.0-48-generic (5.4.0-48.52)를 제거합니다...
linux-modules-5.4.0-52-generic (5.4.0-52.57)를 제거합니다...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
study@study-VirtualBox:~$ 

apt autoremove 실행 과정 모습니다.

 

 

study@study-VirtualBox:~$ dpkg --list|egrep '(linux-image|linux-headers|linux-modules)'
ii  linux-headers-5.8.0-43-generic             5.8.0-43.49~20.04.1                   amd64        Linux kernel headers for version 5.8.0 on 64 bit x86 SMP
ii  linux-headers-5.8.0-44-generic             5.8.0-44.50~20.04.1                   amd64        Linux kernel headers for version 5.8.0 on 64 bit x86 SMP
ii  linux-headers-generic-hwe-20.04            5.8.0.44.50~20.04.30                  amd64        Generic Linux kernel headers
rc  linux-image-5.4.0-26-generic               5.4.0-26.30                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-39-generic               5.4.0-39.43                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-42-generic               5.4.0-42.46                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-45-generic               5.4.0-45.49                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-47-generic               5.4.0-47.51                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-48-generic               5.4.0-48.52                           amd64        Signed kernel image generic
rc  linux-image-5.4.0-52-generic               5.4.0-52.57                           amd64        Signed kernel image generic
ii  linux-image-5.8.0-43-generic               5.8.0-43.49~20.04.1                   amd64        Signed kernel image generic
ii  linux-image-5.8.0-44-generic               5.8.0-44.50~20.04.1                   amd64        Signed kernel image generic
ii  linux-image-generic-hwe-20.04              5.8.0.44.50~20.04.30                  amd64        Generic Linux kernel image
rc  linux-modules-5.4.0-26-generic             5.4.0-26.30                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-39-generic             5.4.0-39.43                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-42-generic             5.4.0-42.46                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-45-generic             5.4.0-45.49                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-47-generic             5.4.0-47.51                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-48-generic             5.4.0-48.52                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-5.4.0-52-generic             5.4.0-52.57                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-5.8.0-43-generic             5.8.0-43.49~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
ii  linux-modules-5.8.0-44-generic             5.8.0-44.50~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-26-generic       5.4.0-26.30                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-39-generic       5.4.0-39.43                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-42-generic       5.4.0-42.46                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-45-generic       5.4.0-45.49                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-47-generic       5.4.0-47.51                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-48-generic       5.4.0-48.52                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.4.0-52-generic       5.4.0-52.57                           amd64        Linux kernel extra modules for version 5.4.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.8.0-43-generic       5.8.0-43.49~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
ii  linux-modules-extra-5.8.0-44-generic       5.8.0-44.50~20.04.1                   amd64        Linux kernel extra modules for version 5.8.0 on 64 bit x86 SMP
study@study-VirtualBox:~$ 

 

 

다른 패키지의 종속성으로 설치된 응용 프로그램이 마음에 들지 않는지 확인해야 합니다. apt-mark(8)를 사용하여 이러한 패키지를 수동으로 설치한 것으로 표시할 수 있습니다. 설치를 통해 명시적으로 설치한 패키지도 자동 제거용으로 제안되지 않습니다.

 

3-02 수동 제거

특정 버전의 커널만 제거할 때 아래와 같은 방식으로 명령을 실행해주면 됩니다.

$ sudo apt purge linux-{유형}-버전*

study@study-VirtualBox:~$ sudo apt purge linux-{image,headers,modules}-5.4.0-52*

 

study@study-VirtualBox:~$ sudo apt purge linux-{image,headers,modules}-5.4.0-52*
[sudo] study의 암호: 
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
glob 'linux-image-5.4.0-52-generic'에 대해 'linux-image-5.4.0-52*'를 선택합니다.
glob 'linux-image-5.4.0-52-lowlatency'에 대해 'linux-image-5.4.0-52*'를 선택합니다.
glob 'linux-headers-5.4.0-52-generic'에 대해 'linux-headers-5.4.0-52*'를 선택합니다.
glob 'linux-headers-5.4.0-52'에 대해 'linux-headers-5.4.0-52*'를 선택합니다.
glob 'linux-headers-5.4.0-52-lowlatency'에 대해 'linux-headers-5.4.0-52*'를 선택합니다.
glob 'linux-modules-5.4.0-52-generic'에 대해 'linux-modules-5.4.0-52*'를 선택합니다.
glob 'linux-modules-5.4.0-52-lowlatency'에 대해 'linux-modules-5.4.0-52*'를 선택합니다.
패키지 'linux-headers-5.4.0-52-lowlatency'는 설치되어 있지 않아, 지우지 않았습니다.
패키지 'linux-image-5.4.0-52-lowlatency'는 설치되어 있지 않아, 지우지 않았습니다.
패키지 'linux-modules-5.4.0-52-lowlatency'는 설치되어 있지 않아, 지우지 않았습니다.
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  libllvm10 linux-headers-5.4.0-48 linux-headers-5.4.0-48-generic
  linux-image-5.4.0-48-generic linux-modules-5.4.0-48-generic
  linux-modules-extra-5.4.0-48-generic
'sudo apt autoremove'를 이용하여 제거하십시오.
다음 패키지를 지울 것입니다:
  linux-headers-5.4.0-52* linux-headers-5.4.0-52-generic*
  linux-image-5.4.0-52-generic* linux-modules-5.4.0-52-generic*
  linux-modules-extra-5.4.0-52-generic*
0개 업그레이드, 0개 새로 설치, 5개 제거 및 0개 업그레이드 안 함.
이 작업 후 360 M바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까? [Y/n] y
(데이터베이스 읽는중 ...현재 280133개의 파일과 디렉터리가 설치되어 있습니다.)
linux-headers-5.4.0-52-generic (5.4.0-52.57)를 제거합니다...
linux-headers-5.4.0-52 (5.4.0-52.57)를 제거합니다...
linux-modules-extra-5.4.0-52-generic (5.4.0-52.57)를 제거합니다...
linux-image-5.4.0-52-generic (5.4.0-52.57)를 제거합니다...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-5.4.0-52-generic
/etc/kernel/postrm.d/zz-update-grub:
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
grub 설정 파일을 형성합니다 ...
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.8.0-44-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.8.0-44-generic
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.8.0-43-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.8.0-43-generic
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.4.0-48-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.4.0-48-generic
Adding boot menu entry for UEFI Firmware Settings
완료되었습니다
linux-modules-5.4.0-52-generic (5.4.0-52.57)를 제거합니다...
(데이터베이스 읽는중 ...현재 243752개의 파일과 디렉터리가 설치되어 있습니다.)
Purging configuration files for linux-modules-extra-5.4.0-52-generic (5.4.0-52.5
7) ...
Purging configuration files for linux-modules-5.4.0-52-generic (5.4.0-52.57) ...
dpkg: 경고: linux-modules-5.4.0-52-generic 제거 도중, 디렉토리 '/lib/modules/5.4
.0-52-generic'가 비어 있지 않아 제거할 수 없습니다
Purging configuration files for linux-image-5.4.0-52-generic (5.4.0-52.57) ...
study@study-VirtualBox:~$ 

커널 제거 중 일부 디렉터리가 비어있지 않아 제거할 수 없다는 문구가 표시되곤 합니다.

 

study@study-VirtualBox:~$ ls -F -1 /lib/modules/5.4.0-52-generic
ls: '/lib/modules/5.4.0-52-generic'에 접근할 수 없습니다: 그런 파일이나 디렉터리가 없습니다
study@study-VirtualBox:~$ 

그러나 커널 제거 작업 후 해당 디렉터리 내용을 확인해보면 위와 같이 오류 메시지를 출력하는 경우가 있는데 그것은 해당 디렉터리가 정상적으로 삭제된 경우입니다.

 

study@study-VirtualBox:~$ ls -F -1 /lib/modules/5.4.0-52-generic
initrd/
kernel/
modules.builtin
modules.builtin.modinfo
modules.order
vdso/
study@study-VirtualBox:~$ 

만약 오류 메시지처럼 정말 해당 디렉터리가 삭제되지 않은 경우 위처럼 해당 디렉터리의 내용을 확인할 수 있습니다.

 

study@study-VirtualBox:~$ tree /lib/modules/5.4.0-52-generic
/lib/modules/5.4.0-52-generic
├── initrd
├── kernel
│   ├── arch
│   │   └── x86
│   │       ├── crypto
│   │       │   ├── aegis128-aesni.ko
│   │       │   ├── aesni-intel.ko
│   │       │   ├── blowfish-x86_64.ko

- 중략 - 

└── vdso
    ├── vdso32.so
    ├── vdso64.so
    └── vdsox32.so

242 directories, 989 files
study@study-VirtualBox:~$ 

디렉터리의 내용을 가독성을 높여 확인하려면 tree 명령을 사용하면 됩니다.

참고로 tree 명령어는 tree 패키지가 있어야 사용할 수 있는데 이 패키지는 기본적으로 설치되지 않기 때문에 사용자가 따로 설치해주어야 합니다.

 

3-03 커널 정보 업데이트

 

study@study-VirtualBox:~$ sudo update-grub2
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
grub 설정 파일을 형성합니다 ...
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.8.0-44-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.8.0-44-generic
리눅스 이미지를 찾았습니다: /boot/vmlinuz-5.8.0-43-generic
initrd 이미지를 찾았습니다: /boot/initrd.img-5.8.0-43-generic
Adding boot menu entry for UEFI Firmware Settings
완료되었습니다
study@study-VirtualBox:~$ 

오래된 커널을 제거한 후에는 반드시 GNU GRUB 부트로더 정보를 최신으로 갱신해주어야 합니다.

 


4. Mainline을 통한 선택 제거

위에서처럼 터미널 명령을 통해 커널을 제거할 수도 있지만 전문적인 커널 관리 GUI 프로그램을 이용해 제거할 수도 있습니다.

 

과거에는 UKUU라는 프로그램을 주로 사용하였지만 최근 해당 프로그램이 유료화되면서 이 프로그램을 포크해 새로 개발, 유지보수하는 프로그램이 나왔습니다.

 

정식 명칭은 Ubuntu Maineline Kernel Installer(UMKI)라고 하는데 저장소를 통해 설치할 때 사용되는 패키지명은 mainline입니다.

설치 방법은 위 링크를 참고하시기 바랍니다.

 

 

설치 후 프로그램 표시 항목 내 아이콘들 중 위 아이콘을 더블클릭해줍니다.

mainline은 아래 사용법처럼 GUI를 지원하지만 터미널에서 명령어를 입력하여 사용하는 CLI 방식도 지원합니다.

 

설치되어 있는 커널은 위 그림에서 볼 수 있듯 리눅스의 마스코트 펭귄 턱스(Tux)가 아닌 우분투 브랜드 이미지가 표시됩니다.

 

제거할 커널을 선택하고 Remove 버튼을 눌러줍니다.

 

Ubuntu Maineline Kernel Installer 작입 창이 뜨고 사용자 인증 창이 그 위에 뜹니다.

암호를 입력하여 인증해줍니다.

 

커널 제거 작업이 진행됩니다. 작업이 다 완료되면 Close 버튼을 눌러 창을 닫아주면 됩니다.

 

Remove 버튼이 아닌 Purge 버튼을 누르면 위 그림과 같이 표시되고 작업이 진행되지 않습니다.

아마도 버그가 아닐까 싶습니다.