¿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.

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.


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.


Sería bueno si kpartx enumerara explícitamente el directorio en el que están mapeados los dispositivos de bucle.
Xofo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.