파일이 있는 나머지 커널 디렉토리

파일이 있는 나머지 커널 디렉토리

커널 잔류물이 있는 이유는 무엇입니까? 자동으로 지울 수 있나요?


몇 달이 지나자 커널 디렉터리가 너무 많아서 짜증이 났습니다.

방금 디렉토리를 다시 확인 /usr/lib/modules하고 이전 커널 디렉토리 중 하나만 삭제하고 실제 내용을 확인했습니다.

# \ls -lhkF 5.15.0-76-generic

total 28K
drwxr-xr-x 2 root root 4.0K Aug 24 06:36 misc/
-rw-r--r-- 1 root root   45 Aug 24 06:36 modules.alias
-rw-r--r-- 1 root root   12 Aug 24 06:36 modules.alias.bin
-rw-r--r-- 1 root root    0 Aug 24 06:36 modules.builtin.alias.bin
-rw-r--r-- 1 root root    0 Aug 24 06:36 modules.builtin.bin
-rw-r--r-- 1 root root    0 Aug 24 06:36 modules.dep
-rw-r--r-- 1 root root   12 Aug 24 06:36 modules.dep.bin
-rw-r--r-- 1 root root    0 Aug 24 06:36 modules.devname
-rw-r--r-- 1 root root   55 Aug 24 06:36 modules.softdep
-rw-r--r-- 1 root root   49 Aug 24 06:36 modules.symbols
-rw-r--r-- 1 root root   12 Aug 24 06:36 modules.symbols.bin

나머지 파일을 확인하면 해당 파일이 비어 있거나 쓸모가 없음을 알 수 있습니다.

# for file in *; do [ -f $file ] && echo "$file": && cat --show-nonprinting $file && echo && echo; done

modules.alias:
# Aliases extracted from modules themselves.


modules.alias.bin:
M-0^GM-tW^@^B^@^A^@^@^@^L

modules.builtin.alias.bin:


modules.builtin.bin:


modules.dep:


modules.dep.bin:
M-0^GM-tW^@^B^@^A^@^@^@^L

modules.devname:


modules.softdep:
# Soft dependencies extracted from modules themselves.


modules.symbols:
# Aliases for symbols, used by symbol_request().


modules.symbols.bin:
M-0^GM-tW^@^B^@^A^@^@^@^L

이제 내 질문은 왜 이러한 파일이 삭제되지 않습니까 apt-get --purge autoremove?

답변1

misc/디렉토리는 관리 시스템이 커널 버전의 설치 및 제거를 완전히 통합하지 못하는 일부 타사 모듈(예: VirtualBox)에 사용될 수 있습니다.

/lib/modules/$(uname -r)/misc문제가 있는 모듈을 식별하려면 현재 실행 중인 커널의 디렉터리를 살펴보세요 .

이러한 modules.*파일은 명령에 의해 생성된 다양한 모듈 별칭, 종속성 및 기호 맵 파일입니다 depmod.

커널 패키지가 제거되면 패키지 관리자는 커널 패키지( 위치)와 함께 패키지된 모듈을 자동으로 제거 하지만 /lib/modules/<kernel version>/kernel/타사 모듈 설치 프로그램(예: 귀하의 것 ) misc/이 만든 모듈 및 모듈 디렉터리는 건드리지 않습니다. DKMS에서 관리하는 타사 모듈을 사용하는 경우 일반적으로 이러한 모듈을 /lib/modules/<kernel version>/updates/dkms/,해당 커널 패키지가 제거되면 자동으로 제거됩니다.

타사 모듈 관리는 약간 간단한 것 같습니다. 시작 시 실행되고, 기존 /lib/modules/<kernel version>/디렉터리 misc/에서 하위 디렉터리 및 타사 모듈을 확인하고, 누락된 항목이 있으면 자동으로 타사 모듈 버전을 빌드하고 실행합니다. depmod <kernel version>타사 모듈의 종속성이 올바르게 처리되는지 확인합니다. 그러나 모듈이 제거되는 섹션과 misc/커널 패키지가 제거되는 하위 디렉터리는 구현되지 않거나 누락된 것으로 보입니다.

실제 커널 패키지 내용이 제거된 경우에도 디렉터리에 생성된 파일이 업데이트되는 것처럼 보이기 때문에 depmod타사 모듈 관리 스크립트는 기존 /lib/modules/<kernel version>디렉터리를 반복하면서 depmod각 디렉터리에서 계속 실행되는 것처럼 보입니다. 결과적으로 비어 있거나 거의 비어 있는 출력 depmod파일이 생성됩니다.

/etc/kernel/postrm.d/이 문제를 자동으로 제거하려면 다음과 같은 스크립트를 추가할 수 있습니다 ( zz-remove-miscmod예: 호출).

#!/bin/sh -e

version="$1"

# passing the kernel version is required
if [ -z "${version}" ]; then
    echo >&2 "W: zz-remove-miscmod: ${DPKG_MAINTSCRIPT_PACKAGE:-kernel package} did not pass a version number"
    exit 0
fi

if [ -d "/lib/modules/$version/misc" ]; then
    rm -rf "/lib/modules/$version/misc"

    # uncomment to remove the modules.* files too, if necessary
    #rm -f "/lib/modules/$version/modules.*" 2>/dev/null || /bin/true

    # attempt to remove the kernel version module directory too,
    # in case it just became empty; if not, ignore the error
    rmdir "/lib/modules/$version" 2>/dev/null || /bin/true
fi

이 스크립트는 커널 패키지가 제거된 후 자동으로 실행되며, 제거된 커널 버전이 있는 하위 디렉터리가 있는지 확인 misc하고 삭제합니다. 생성된 파일은 다음 시작 시 (다시) 생성된다고 가정합니다 depmod. 제가 틀렸다면 rm -f ...해당 줄의 주석 처리를 해제할 수도 있습니다.

답변2

apt-get autoremove --purge커널이 자동 삭제로부터 보호되기 때문에 이러한 파일은 삭제되지 않습니다 (참고자료 참조 /etc/apt/apt.conf.d/01autoremove). 정기적으로 삭제해야 합니다.

#!/bin/sh
for mods in /lib/modules/*/; do
    if ! [ -d "$mods"/kernel ]; then
        apt-get purge -y "linux-image-${mods##*/}"
    fi
done

파일에 추가하면 /etc/cron.d/weekly더 이상 남은 디렉토리에 갇히지 않게 됩니다 /lib/modules.

관련 정보