이전 커널을 제거하면 그래픽 드라이버가 제거되는 것 같습니다. 재부팅해도 안전합니까?
루틴을 실행하는 동안 오류 sudo apt upgrade
가 발생합니다 No space left on device
. 커널이 누적 /boot/
되고 파티션에 공간이 부족한 것으로 나타났습니다 .
이전 커널의 자동 제거가 작동하지 않습니다.
$ sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
그래서 제목과 이미지 목록을 필터링했습니다.
$ dpkg --list | grep -E 'linux-image|linux-headers|linux-modules' | awk '{ print $2 }'
linux-headers-5.10.0-20-amd64
linux-headers-5.10.0-20-common
linux-headers-5.10.0-21-amd64
linux-headers-5.10.0-21-common
linux-headers-5.10.0-22-amd64
linux-headers-5.10.0-22-common
linux-headers-5.10.0-23-amd64
linux-headers-5.10.0-23-common
linux-headers-5.10.0-24-amd64
linux-headers-5.10.0-24-common
linux-headers-5.10.0-25-amd64
linux-headers-5.10.0-25-common
linux-headers-amd64
linux-image-5.10.0-18-amd64
linux-image-5.10.0-19-amd64
linux-image-5.10.0-20-amd64
linux-image-5.10.0-21-amd64
linux-image-5.10.0-22-amd64
linux-image-5.10.0-23-amd64
linux-image-5.10.0-24-amd64
linux-image-5.10.0-25-amd64
linux-image-amd64
5.10.0-18
에서 까지의 모든 제목과 이미지를 삭제했습니다 5.10.0-23
. 하지만 이미지를 지울 때 예상치 못한 메시지가 표시됩니다.
Removing linux-image-5.10.0-23-amd64 (5.10.179-3) ...
/etc/kernel/prerm.d/dkms:
dkms: removing: nvidia 535.98 (5.10.0-23-amd64) (x86_64)
-------- Uninstall Beginning --------
Module: nvidia
Version: 535.98
Kernel: 5.10.0-23-amd64 (x86_64)
-------------------------------------
Status: Before uninstall, this module version was ACTIVE on this kernel.
nvidia.ko:
- Uninstallation
- Deleting from: /lib/modules/5.10.0-23-amd64/kernel/drivers/video/
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
nvidia-uvm.ko:
- Uninstallation
- Deleting from: /lib/modules/5.10.0-23-amd64/kernel/drivers/video/
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
nvidia-modeset.ko:
- Uninstallation
- Deleting from: /lib/modules/5.10.0-23-amd64/kernel/drivers/video/
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
nvidia-drm.ko:
- Uninstallation
- Deleting from: /lib/modules/5.10.0-23-amd64/kernel/drivers/video/
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
nvidia-peermem.ko:
- Uninstallation
- Deleting from: /lib/modules/5.10.0-23-amd64/kernel/drivers/video/
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
depmod...
DKMS: uninstall completed.
dkms: removing: v4l2loopback 0.12.5 (5.10.0-23-amd64) (x86_64)
-------- Uninstall Beginning --------
Module: v4l2loopback
Version: 0.12.5
Kernel: 5.10.0-23-amd64 (x86_64)
-------------------------------------
Status: Before uninstall, this module version was ACTIVE on this kernel.
v4l2loopback.ko:
- Uninstallation
- Deleting from: /lib/modules/5.10.0-23-amd64/updates/dkms/
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
depmod...
DKMS: uninstall completed.
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-5.10.0-23-amd64
/etc/kernel/postrm.d/zz-update-grub:
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-5.10.0-25-amd64
Found initrd image: /boot/initrd.img-5.10.0-25-amd64
Found linux image: /boot/vmlinuz-5.10.0-24-amd64
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Adding boot menu entry for UEFI Firmware Settings ...
done
$ dpkg --list | grep -E 'linux-image|linux-headers|linux-modules' | awk '{ print $2 }'
linux-headers-5.10.0-24-amd64
linux-headers-5.10.0-24-common
linux-headers-5.10.0-25-amd64
linux-headers-5.10.0-25-common
linux-headers-amd64
linux-image-5.10.0-24-amd64
linux-image-5.10.0-25-amd64
linux-image-amd64
실수로 그래픽 카드 드라이버를 삭제했나요? 아니면 드라이버가 최신 커널에도 존재하기 때문에 괜찮습니까?
만일을 대비해 initrd
나머지 두 코어에 대한 이미지를 수동으로 재생성했습니다.
$ sudo rm /boot/initrd.img*
$ sudo update-initramfs -c -k all
update-initramfs: Generating /boot/initrd.img-5.10.0-24-amd64
update-initramfs: Generating /boot/initrd.img-5.10.0-25-amd64
$ ls /boot/
config-5.10.0-24-amd64 grub lost+found vmlinuz-5.10.0-24-amd64
config-5.10.0-25-amd64 initrd.img-5.10.0-24-amd64 System.map-5.10.0-24-amd64 vmlinuz-5.10.0-25-amd64
efi initrd.img-5.10.0-25-amd64 System.map-5.10.0-25-amd64
$ uname -r
5.10.0-24-amd64
재부팅한 후 컴퓨터를 5.10.0-25
.
답변1
컴파일된 커널 이미지가 제거될 때 컴파일된 dkms 모듈이 제거되는 것은 완전히 정상입니다.
실행하면 dkms status
정리하지 않은 커널 이미지 패키지용 모듈(예: linux-image-5.10.0-24-amd64
및 linux-image-5.10.0-25-amd64
)이 여전히 설치되어 있는 것을 볼 수 있습니다.
해당 메시지가 표시되지 않으면 nvidia-kernel-dkms
실수로 패키지도 제거했을 수 있습니다. 해결 방법은 패키지를 다시 설치하는 것입니다.
관련 메모에서 및 apt-mark hold
패키지를 사용하고 업그레이드된 커널 패키지만 수동으로 설치하는 것이 좋습니다(예: 루트로, 루트 쉘에서 또는 사용).linux-image-amd64
linux-headers-amd64
sudo
apt-get -u install linux-image-amd64 linux-headers-amd64 ; \
apt-mark hold linux-image-amd64 linux-headers-amd64
왜? dkms 패키지가 최신 커널과 호환되지 않는 경우가 있으므로 커널을 업그레이드하기 전에 최신 버전의 dkms 패키지가 나올 때까지 기다려야 합니다. (그런데 업데이트된 패키지가 빨리 도착하는 경우도 있고 며칠, 몇 주 또는 그 이상 기다려야 하는 경우도 있습니다. 잠시 기다려 주십시오.시스템을 파괴할 가치가 없습니다반짝이는 최신 제품을 얻기 위해, 특히 반짝이고 새롭다고 해서 자동으로 더 좋아지거나 "실제로 사용하는 것을 추가하는 것"을 의미하지는 않습니다.필요").
같은 이유로 NVIDIA 관련 패키지도 보관해야 합니다. 나는 내 시스템 list-nvidia.sh
(적어도 여전히 nvidia GPU가 있고 점차적으로 라데온 카드로 옮기고 있는 시스템) 에서 다음 스크립트(호출)를 사용합니다 .
#!/bin/bash
#
# script: list-nvidia.sh
# author: Craig Sanders <[email protected]>
# license: Public Domain (this script is too trivial to be anything else)
# options:
# default/none list the packages, one per line
# -v verbose (dpkg -l) list the packages
# -h hold the packages with apt-mark
# -u unhold the packages with apt-mark
# build an array of currently-installed nvidia packages.
PKGS=( $(dpkg -l '*nvidia*' '*cuda*' '*vdpau*' 2>/dev/null| awk '/^[hi][^n]/ && ! /mesa/ {print $2}') )
if [ "$1" == "-v" ] ; then
dpkg -l "${PKGS[@]}" | cat
elif [ "$1" == "-h" ] ; then
apt-mark hold "${PKGS[@]}"
elif [ "$1" == "-u" ] ; then
apt-mark unhold "${PKGS[@]}"
else
printf "%s\n" "${PKGS[@]}"
fi
모든 nvidia 관련 패키지를 저장하기 위해 실행 list-nvidia.sh -h
한 다음 nvidia 드라이버를 업그레이드하고 싶을 때 다음을 실행합니다.
apt-get install $(list-nvidia.sh) ; \
list-nvidia.sh -h
list-zfs.sh
비슷한 ZFS dkms 모듈 스크립트가 있습니다 .
#! /bin/bash
#
# script: list-zfs.sh
# author: Craig Sanders <[email protected]>
# license: Public Domain (this script is too trivial to be anything else)
# options:
# default/none list the packages, one per line
# -v verbose (dpkg -l) list the packages
# -h hold the packages with apt-mark
# -u unhold the packages with apt-mark
# build an array of currently-installed zfs packages.
PKGS=( $(dpkg -l '*libnvpair*linux' '*libuutil*linux*' '*zfs*' '*zpool*' 'spl' 'spl-dkms' 'spl-kernel-modules' 'zfs-kernel-modules' 2>/dev/null | awk '/^[hi][^n]/ && ! /zfsnap|libvirt/ {print $2}') )
if [ "$1" == "-v" ] ; then
dpkg -l "${PKGS[@]}" | cat
elif [ "$1" == "-h" ] ; then
apt-mark hold "${PKGS[@]}"
elif [ "$1" == "-u" ] ; then
apt-mark unhold "${PKGS[@]}"
else
printf "%s\n" "${PKGS[@]}"
fi
이에 대한 스크립트도 있을 수 있지만 list-kernels.sh
(그러기 위해 위의 스크립트 중 하나를 수정하는 것은 어렵지 않습니다), dlocate -k
및 에 대한 대부분의 스크립트가 이미 있습니다 dlocate -K
. 이에 대한 나의 용도 중 하나는 모든 커널 이미지와 dkms 모듈을 수동으로 설치된 것으로 표시하여 apt-mark manual $(dlocate -k)
원할 때만 제거/제거되도록 하는 것입니다.
grep
마지막으로, grep이 할 수 있는 모든 일과 그 이상을 할 수 있는 awk를 사용한다면 awk
awk를 사용할 필요가 거의 없습니다. 예를 들어 명령은 다음과 같습니다.
dpkg --list | grep -E 'linux-image|linux-headers|linux-modules' |
awk '{ print $2 }'
다음과 같이 단축할 수 있습니다.
dpkg -l | awk '/linux-image|linux-headers|linux-modules/ { print $2 }'
또는 더 나은 방법은 dpkg -l
출력의 두 번째 필드만 일치시키는 것입니다.
dpkg -l | awk '$2 ~ /^linux-(image|headers|modules)/ { print $2 }'
특정 필드에 대한 정규식 패턴 일치를 부울 표현식과 결합하는 awk의 기능을 활용할 수도 있습니다. 예를 들어:
dpkg -l | awk '$2 ~ /^linux-(image|headers|modules)/ &&
$3 ~ /^5\.10\.(1[89]|2[0-3])-/ { print $2 }'
그러면 명령에 추가할 수 있는 패키지 목록이 제공됩니다 ( 위 예 apt-get purge
와 같이 명령 대체를 통해 가능 ). apt-get install
나는 이전에 설치된 커널을 제거해야 할 때마다 이와 같은 것을 자주 사용합니다.