Debian 9.0 Stretch의 커널을 4.9.0-1-amd64로 업그레이드하고 있습니다.
패키지가 설치되었지만 프로세스가 끝나면 알 수 없는 오류가 발생합니다.
device-mapper: reload ioctl on osprober-linux-sda2 failed: Device or resource busy
Command failed
다시 시작하는 것도 걱정되고 제대로 부팅되지 않습니다.
실행 dpkg-reconfigure linux-image-4.9.0-1-amd64
해도 동일한 오류가 발생합니다.
이상하게도 지금까지는 파티션을 나누지 /etc/fstab
않고도 프로세스가 진행되었습니다 sda2
. 마지막 패키지 업그레이드 후에 작동이 멈췄습니다(사실 마지막 패키지를 232-18로 업그레이드한 후 처음으로 오류를 봤다고 맹세할 수 있었습니다 udev
). Jessie의 가상 머신은 여전히 잘 작동합니다.
또한 이렇습니다 fstab
:
$cat /etc/fstab
/dev/sda1 / ext3 errors=remount-ro,noatime 0 1
/dev/sda3 none swap sw 0 0
그러나 를 실행하면 이제 ext3 로그 파티션이라는 blkid
것을 기억합니다 ./dev/sda2
/dev/sda1: UUID="43dcd715-1914-4da8-8e55-27879705920a" EXT_JOURNAL="b153f326-cb4e-491b-9b38-f9750dcf5165" TYPE="ext3" PARTUUID="8aac691c-01"
/dev/sda2: LABEL="j-my-dev" UUID="b153f326-cb4e-491b-9b38-f9750dcf5165" LOGUUID="b153f326-cb4e-491b-9b38-f9750dcf5165" TYPE="jbd" PARTUUID="8aac691c-02"
/dev/sda3: UUID="a04c0b69-07d5-40e1-8c80-6914118f6df4" TYPE="swap" PARTUUID="8aac691c-03"
추가 조사 후에도 여전히 old를 언급하는 매달린 파일을 발견했습니다 sda2
(이 VM은 몇 달 전에 LVM이 있는 서버에서 마이그레이션되었기 때문입니다).
내용은 /etc/blkid.tab
다음 과 같습니다
<device DEVNO="0x0802" TIME="1414777337.116803" UUID="B24u3l-mvwB-vyxK-GRNw-vc6o-r2sS-NDgVru" TYPE="LVM2_member">/dev/sda2</device>
제거했지만 올바른 blkid.tab
내용이 예상대로 이므로 아무런 차이가 없을 것입니다./var/run/blkid/blkid.tab
<device DEVNO="0x0801" TIME="1487991512.317454" UUID="43dcd715-1914-4da8-8e55-27879705920a" EXT_JOURNAL="b153f326-cb4e-491b-9b38-f9750dcf5165" TYPE="ext3" PARTUUID="8aac691c-01">/dev/sda1</device>
<device DEVNO="0x0802" TIME="1487991415.63466" LABEL="j-my-dev" UUID="b153f326-cb4e-491b-9b38-f9750dcf5165" LOGUUID="b153f326-cb4e-491b-9b38-f9750dcf5165" TYPE="jbd" PARTUUID="8aac691c-02">/dev/sda2</device>
<device DEVNO="0x0803" TIME="1487991512.507280" UUID="a04c0b69-07d5-40e1-8c80-6914118f6df4" TYPE="swap" PARTUUID="8aac691c-03">/dev/sda3</device>
이전 프로그램을 실행해도 dpkg-reconfigure
여전히 동일한 오류가 발생합니다.
upgrade-grub
나는 또한 호출되는 오류를 정확히 찾아낼 수 있었습니다 dpkg-reconfigure
. 혼자 실행:
#update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.9.0-1-amd64
Found initrd image: /boot/initrd.img-4.9.0-1-amd64
device-mapper: reload ioctl on osprober-linux-sda2 failed: Device or resource busy
Command failed
done
추적해 보면 upgrade-grub
이런 일이 발생하고 있는 것이 분명하며 /etc/grub.d/30_os-prober
스크립트를 읽어 보면 문제의 명령은 입니다 os-prober
.
실행해 보세요:
#os-prober
device-mapper: reload ioctl on osprober-linux-sda2 failed: Device or resource busy
Command failed
오류는 다음을 os-prober
호출할 때 발생합니다.
#/usr/bin/linux-boot-prober /dev/sda2
device-mapper: reload ioctl on osprober-linux-sda2 failed: Device or resource busy
Command failed
나도 그것을 보면서 30_os-prober
그것을 알아차렸다 GRUB_OS_PROBER_SKIP_LIST
.
if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" ] && [ "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then
echo "Skipped ${LONGNAME} on ${DEVICE} by user request." >&2
continue
fi
빠른 Google 검색을 통해 다음 기사가 공개되었습니다.grub2가 특정 파티션을 무시하도록 허용, 그 결과 다음을 입력하게 되었습니다 /etc/default/grub
.
GRUB_OS_PROBER_SKIP_LIST="b153f326-cb4e-491b-9b38-f9750dcf5165@/dev/sda2"
그러나 오류는 계속 발생하며 30_os-prober
스크립트를 디버그 모드로 전환하면 처리를 담당하는 코드 블록이 GRUB_OS_PROBER_SKIP_LIST
실행되지 않음을 알 수 있습니다. 예를 들어 if
위에 표시된 줄 에도 도달하지 않습니다 .
내 GRUB 버전은 입니다 2.02~beta3-5
. 어떻게 해야 합니까?
업데이트: @GaD3R의 요청에 따라 libmapper-dev는 1.02.1입니다.
답변1
분명히 사용되지 않기 때문에 GRUB_OS_PROBER_SKIP_LIST
(버그?) 운영 체제의 모든 파티션을 검색하지 않도록 GRUB/os-prober를 구성해야 했습니다.
/etc/default/grub
따라서 다음 줄 에 추가됩니다 .
GRUB_DISABLE_OS_PROBER=true
이제 명령이 제대로 dpkg-reconfigure linux-image-4.9.0-1-amd64
작동합니다 update-grub
.
문제의 서버도 4.9.0-1-amd64
커널을 사용하여 성공적으로 재부팅되었습니다.
모든 디버깅 및 해결 후에 관련 문제를 발견했습니다. 여기, 또한 os-prober
대안으로 완전한 제거를 옹호했습니다. 이 솔루션은 스크립트를 호출하기 전에 바이너리가 존재하는지 확인하기 때문에 작동합니다.
os-prober
다중 OS 그럽만 필요한 것 같은데 내 경우는 그렇지 않습니다.
@Ferenc Wágner의 댓글에 이어역사적 문제os-prober
을 사용하고 Linux 전용 VM의 맥락에서 os-prober를 제거해도 해가 없다는 의견을 공유하면서 실제로 VM에서 제거했습니다 .
답변2
device-mapper: reload ioctl on osprober-linux-sda1 failed: Device or resource busy
미러 때문에 이 오류가 발생합니다 zfs
.
/etc/grub.d/30_os-prober
os-prober
매칭 장치에 따른 출력:
OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
장비 점검 장소 loop
:
for OS in ${OSPROBED} ; do
& 장치를 반환하는 대신 오류가 os-prober
발생 하므로 체크인에는 아무런 영향이 없습니다 .ioctl
$OS
$GRUB_OS_PROBER_SKIP_LIST
/etc/grub.d/30_os-prober
/etc/default/grub
해결 방법은 다음 형식으로 장치를 추가하는 것입니다 UUID@device_path
.
GRUB_OS_PROBER_SKIP_LIST="1234567899273705219@/dev/sda1 1234567899273705219@/dev/sdb1"
& 편집하다 /usr/bin/os-prober
:
--- /usr/bin/os-prober 2018-10-15 17:46:19.420933449 +0100
+++ /usr/bin/os-prober.bak 2018-10-15 16:44:49.927531809 +0100
@@ -167,12 +167,6 @@ for partition in $(partitions); do
continue
fi
- # Skip user defined devices in /etc/default/grub
- if echo $GRUB_OS_PROBER_SKIP_LIST | grep -qw $partition; then
- debug "$partition: probing disabled by user"
- continue
- fi
-
# do btrfs processing here; both mounted and unmounted will
# be handled by 50mounted-tests so we can do a subvol only once.
type=$(blkid -o value -s TYPE $mapped || true)
- Windows에서 테스트됨 /아키텍처Linux듀얼 부팅 시스템.
앞으로:
[stuart@manjaro ~]$ sudo update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux-hardened
Found initrd image: /boot/intel-ucode.img /boot/amd-ucode.img /boot/initramfs-linux-hardened.img
Found initrd fallback image: /boot/initramfs-linux-hardened-fallback.img
Found linux image: /boot/vmlinuz-4.14-rt-x86_64
Found initrd image: /boot/intel-ucode.img /boot/amd-ucode.img /boot/initramfs-4.14-rt-x86_64.img
Found initrd fallback image: /boot/initramfs-4.14-rt-x86_64-fallback.img
device-mapper: reload ioctl on osprober-linux-sda1 failed: Device or resource busy
Command failed.
device-mapper: reload ioctl on osprober-linux-sdb1 failed: Device or resource busy
Command failed.
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
###### - Grub-btrfs: Auto-detect Start - ######
# found 0 snapshot(s)
# No snapshot found
# make sure you have at least one snapshot
# or please file a bug report at "https://github.com/Antynea/grub-btrfs"
###### - Grub-btrfs: Auto-detect End - ######
Found memtest86+ image: /boot/memtest86+/memtest.bin
/usr/bin/grub-probe: warning: unknown device type nvme0n1.
done
뒤쪽에:
[stuart@manjaro ~]$ sudo update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux-hardened
Found initrd image: /boot/intel-ucode.img /boot/amd-ucode.img /boot/initramfs-linux-hardened.img
Found initrd fallback image: /boot/initramfs-linux-hardened-fallback.img
Found linux image: /boot/vmlinuz-4.14-rt-x86_64
Found initrd image: /boot/intel-ucode.img /boot/amd-ucode.img /boot/initramfs-4.14-rt-x86_64.img
Found initrd fallback image: /boot/initramfs-4.14-rt-x86_64-fallback.img
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
###### - Grub-btrfs: Auto-detect Start - ######
# found 0 snapshot(s)
# No snapshot found
# make sure you have at least one snapshot
# or please file a bug report at "https://github.com/Antynea/grub-btrfs"
###### - Grub-btrfs: Auto-detect End - ######
Found memtest86+ image: /boot/memtest86+/memtest.bin
/usr/bin/grub-probe: warning: unknown device type nvme0n1.
done