¿Cómo encontrar qué imágenes pertenecen a qué / dev / loop?

9

Trabajo mucho con unidades con imágenes, lo que significa hacer una copia en dd de la unidad en cuestión y luego trabajar en la imagen en lugar de la unidad en sí.

Para la mayoría del trabajo, uso kpartx para asignar las particiones de la unidad a un dispositivo en / dev / mapper /. Lo que me pregunto aquí es si hay una manera de encontrar qué mapeo pertenece a qué imagen.

Considera esto:

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

Ahora, digamos que olvido qué imagen fue a qué mapeo. ¿Hay alguna manera de dejar que kpartx, o el núcleo, o cualquier otra cosa, me diga qué imagen va a dónde?

EDITAR Además, si accidentalmente rm el archivo de imagen mientras kpartx ha agregado las asignaciones, ¿cómo se eliminan las asignaciones? kpartx quiere que la imagen real esté presente.

bos
fuente

Respuestas:

13

losetup (el comando que normalmente se usa para configurarlos) le dirá:

$ /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

Tenga en cuenta que con las versiones anteriores puede usar el uso en -alugar de --list, y esto genera un formato diferente y ahora obsoleto.

La información proviene de /sys:

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

Otra opción, posiblemente más portátil, es obtenerla de los udiscos:

$ 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
⋮

losetuptambién los eliminará con gusto, utilizando la -dopción Eso solo requiere el dispositivo de bucle como parámetro; no le importa el archivo / dispositivo de respaldo.

derobert
fuente
losetup -d / dev / loop0: "loop: no se puede eliminar el dispositivo / dev / loop0: dispositivo o recurso ocupado". Sin embargo, no está montado o usado de ninguna manera. ¿Por qué es esto?
bos
@bos ¿lo tienes mapeado en / dev / mapper? Eso probablemente cuenta como en uso. Borre las asignaciones del mapeador de dispositivos. (si kpartx no tiene una manera de hacerlo, puede usar dmsetup)
derobert
0

También agregaría lo siguiente. Puede sondear dónde se asignan los dispositivos con kpartx. Por ejemplo:

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

Esto es útil cuando olvida dónde se asignan los archivos. Por supuesto, loop0p1 y loop0p2 se asignan en el directorio / dev / mapper.

Xofo
fuente
Sería bueno si kpartx enumerara explícitamente el directorio en el que están mapeados los dispositivos de bucle.
Xofo