스크립트의 kpartx 관련 문제

스크립트의 kpartx 관련 문제

rpi-image-creator 스크립트를 실행하려고 합니다(참조:https://github.com/ImmobilienScout24/rpi-image-creator/blob/master/rpi-image-creator), kpartx를 사용하는 데 문제가 있었습니다. "_open_image" 함수에서 문제가 발생하는 것 같습니다. 코드는 다음과 같습니다.

function _open_image {
   echo "Loop-back mounting" temp/*.img
   kpartx="$(kpartx -av temp/*.img)" || die "Could not setup loop-back access to $RASPBIAN_ARCHIVE_FILE:$NL$kpartx"
   read img_boot_dev img_root_dev <<<$(grep -o 'loop.p.' <<<"$kpartx")
   test "$img_boot_dev" -a "$img_root_dev" || die "Could not extract boot and root loop device from kpartx output:$NL$kpartx"
   img_boot_dev=/dev/mapper/$img_boot_dev
   img_root_dev=/dev/mapper/$img_root_dev
   mkdir -p mnt/img_root
   mount -t ext4 $img_root_dev mnt/img_root || die "Could not mount $img_root_dev mnt/img_root"
   mkdir -p mnt/img_root/boot || die "Could not mkdir mnt/img_root/boot"
   mount -t vfat $img_boot_dev mnt/img_root/boot || die "Could not mount $img_boot_dev mnt/img_root/boot"
   cp -a "$(type -p qemu-arm-static)" mnt/img_root/usr/bin/ || die "Could not copy qemu-arm-static"
   echo "Raspbian Image Details:"
   df -h mnt/img_root/boot mnt/img_root | sed -e "s#$(pwd)/##"
}

스크립트를 실행하면(내 경우에는 --chroot 사용) 다음 오류가 발생합니다.

    mount: special device /dev/mapper/loop0p2 does not exist
    ERROR: Could not mount /dev/mapper/loop0p2 mnt/img_root

/dev/mapper의 내용을 나열하는 mount 명령 앞에 모니터 줄을 추가했는데 실제로는 'loop0p1'과 'loop0p2'가 존재하지 않는 것으로 나타났습니다. 이는 kpartx에 대한 이전 호출에 문제가 있음이 틀림없다는 것을 의미합니다. 그러나 동시에 변수에는 루프 장치의 올바른 이름이 할당된 것으로 보입니다.

이상하게도 스크립트를 호출하기 전에 "kpartx -a temp/*.img"를 수동으로 실행하면 작동하는 것 같습니다. 위의 오류로 인해 스크립트가 종료된 후 루프 장치가 있어야 할 위치에 갑자기 나타납니다.

이 스크립트에 오류가 없다고 가정하면 내 시스템에서 뭔가 이상한 일이 벌어지고 있는 것 같습니다. 무엇이 잘못되었고 어떻게 해결하나요?

(커널 3.16.0-4-amd64, kpartx 버전 0.5.0-6+deb8u1, bash 4.3.30(1)-release 및 빈 .bashrc를 사용하여 Debian Jessie에서 실행)

답변1

kpartx를 사용하여 생성된 맵에서 파티션을 마운트하려고 할 때 백업 스크립트에서도 비슷한 문제에 직면했습니다. sync(실패) 그리고 (성공)을 시도한 후 sleep 0.5다시 살펴보았습니다(데비안)kpartx 맨페이지- 스위치를 제공합니다 -s. 이는 다음을 수행합니다.

-s     Sync mode. Don't return until the partitions are created

이제 kpartx -avs /dev/hostVolumegroup/logicalVolumeSnapshot파티션을 실행하고 마운트한 후에는 완벽하게 작동하며 해결 방법이 필요하지 않습니다.

관련 정보