Problemas com o kpartx em um script

1

Estou tentando executar o script rpi-image-creator (consulte link ) e encontrar algum problema com o uso do kpartx. O problema parece ocorrer na função '_open_image'. Aqui está o código:

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)/##"
}

Executando o script (no meu caso com --chroot) eu obtenho o seguinte erro:

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

Eu adicionei uma linha de monitoração logo antes do comando mount, listando o conteúdo de / dev / mapper, e isso realmente mostra que 'loop0p1' e 'loop0p2' não existem, implicando que algo deve ter dado errado ao chamar kpartx anteriormente. Ao mesmo tempo, no entanto, as variáveis parecem receber os nomes corretos dos dispositivos de loop.

Por estranho que pareça, executar o 'kpartx -a temp / *. img' manualmente antes de chamar o script parece funcionar. E depois que o script sai com o erro acima, os dispositivos de loop de repente existem onde deveriam estar.

Supondo que o script não tenha um bug, acho que deve haver algo estranho acontecendo no meu sistema. O que está errado e como faço para corrigir isso?

(Rodando isto em um Debian Jessie com kernel 3.16.0-4-amd64, kpartx versão 0.5.0-6 + deb8u1, bash 4.3.30 (1) -release com um vazio .bashrc)

    
por Malte 17.06.2015 / 15:40

1 resposta

2

Eu também tive um problema semelhante em um script de backup quando tentei montar uma partição a partir de um mapeamento criado usando o kpartx. Depois de tentar sync (falhou) e sleep 0.5 (trabalhei) eu tive outra olhada no (debian) kpartx manpage que oferece o -s -switch. Isso faz:

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

agora, executando kpartx -avs /dev/hostVolumegroup/logicalVolumeSnapshot e montando uma partição depois funciona perfeitamente e não preciso de soluções alternativas.

    
por 16.09.2015 / 14:53