Como descobrir quais imagens pertencem a qual / dev / loop?

9

Trabalho muito com unidades de imagem, o que significa fazer uma cópia em dd da unidade em questão e depois trabalhar na imagem em vez da própria unidade.

Para a maior parte do trabalho, uso o kpartx para mapear as partições da unidade para um dispositivo em / dev / mapper /. O que eu quero saber aqui é se existe uma maneira de descobrir qual mapeamento pertence a qual imagem.

Considere isto:

root@vyvyan:/tmp# kpartx -a -v Image1 
add map loop1p1 (254:4): 0 10240 linear /dev/loop1 2048
add map loop1p2 (254:5): 0 10240 linear /dev/loop1 12288
add map loop1p3 (254:6): 0 52848 linear /dev/loop1 22528
root@vyvyan:/tmp# kpartx -a -v Image2
add map loop2p1 (254:7): 0 33508 linear /dev/loop2 2048
add map loop2p2 (254:8): 0 39820 linear /dev/loop2 35556

Agora, digamos que eu esqueço qual imagem foi para qual mapeamento. Existe uma maneira de deixar o kpartx - ou o kernel, ou qualquer outra coisa - me dizer qual imagem vai para onde?

EDITAR Além disso, se eu acidentalmente remover o arquivo de imagem enquanto o kpartx adicionou os mapeamentos, como você os remove? O kpartx deseja que a imagem real esteja presente.

bos
fonte

Respostas:

13

losetup (o comando normalmente usado para configurá-los) informará:

$ /sbin/losetup --list
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /var/tmp/jigdo/debian-7.6.0-amd64-CD-1.iso

Observe que nas versões mais antigas você pode usar o uso em -avez de --list, e isso gera um formato diferente e agora obsoleto.

A informação vem de /sys:

$ cat /sys/class/block/loop0/loop/backing_file 
/var/tmp/jigdo/debian-7.6.0-amd64-CD-1.iso

Outra opção, possivelmente mais portátil, é obtê-lo a partir de udisks:

$ udisksctl info -b /dev/loop0
/org/freedesktop/UDisks2/block_devices/loop0:
⋮
  org.freedesktop.UDisks2.Loop:
    Autoclear:          false
    BackingFile:        /var/tmp/jigdo/debian-7.6.0-amd64-CD-1.iso
    SetupByUID:         1000
⋮

losetuptambém os removerá para você, usando a -dopção Isso requer apenas o dispositivo de loop como parâmetro; ele não se importa com o arquivo / dispositivo de backup.

derobert
fonte
losetup -d / dev / loop0: "loop: não é possível excluir o dispositivo / dev / loop0: dispositivo ou recurso ocupado". No entanto, não é montado ou usado de forma alguma. Por que é isso?
bos
@bos, você o mapeou em / dev / mapper? Provavelmente isso conta como em uso. Limpe os mapeamentos do dispositivo-mapeador. (se o kpartx não tiver uma maneira de fazer isso, você poderá usar o dmsetup)
derobert
0

Eu também adicionaria o seguinte. Você pode investigar onde os dispositivos são mapeados com o kpartx. Por exemplo:

%> sudo kpartx -lv /dev/loop0
loop0p1 : 0 122880 /dev/loop0 8192
loop0p2 : 0 8257536 /dev/loop0 131072

Isso é útil quando você esquece onde os arquivos são mapeados. É claro que o loop0p1 e o loop0p2 são mapeados no diretório / dev / mapper.

Xofo
fonte
Seria bom se o kpartx listasse explicitamente o diretório em que os dispositivos de loop estão mapeados.
XJ