Comment trouver quelles images appartiennent à quelle boucle / dev /?

9

Je travaille beaucoup avec des lecteurs imagés, ce qui signifie que je fais une copie DD du lecteur en question, puis je travaille sur l'image au lieu du lecteur lui-même.

Pour la plupart des travaux, j'utilise kpartx pour mapper les partitions du lecteur sur un périphérique sous / dev / mapper /. Ce que je me demande ici, c'est s'il existe un moyen de trouver laquelle de la cartographie appartient à quelle image.

Considère ceci:

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

Maintenant, disons que j'oublie quelle image est allée à quel mappage. Existe-t-il un moyen de laisser kpartx - ou le noyau, ou autre chose - me dire quelle image va où?

EDIT Aussi, si je rm accidentellement le fichier image alors que kpartx a ajouté les mappages, comment supprimez-vous les mappages? kpartx souhaite que l'image réelle soit présente.

bos
la source

Réponses:

13

losetup (la commande normalement utilisée pour les configurer) vous dira:

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

Notez qu'avec les versions plus anciennes, vous pouvez vouloir utiliser use -aau lieu de --list, et cela sort dans un format différent et maintenant obsolète.

Les informations proviennent de /sys:

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

Une autre option, peut-être plus portable, consiste à l'obtenir à partir des 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
⋮

losetupsera également heureux de les supprimer pour vous, en utilisant l' -doption. Cela nécessite simplement le périphérique de boucle comme paramètre; il ne se soucie pas du fichier / périphérique de sauvegarde.

derobert
la source
losetup -d / dev / loop0: "boucle: impossible de supprimer le périphérique / dev / loop0: périphérique ou ressource occupé". Pourtant, il n'est monté ni utilisé d'aucune façon. Pourquoi est-ce?
bos
@bos l'avez-vous mappé sous / dev / mapper? Cela compte probablement comme utilisé. Effacez les mappages de mappeur de périphériques. (si kpartx n'a pas de moyen de le faire, vous pouvez utiliser dmsetup)
derobert
0

J'ajouterais également ce qui suit. Vous pouvez rechercher où les périphériques sont mappés avec kpartx. Par exemple:

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

Cela est utile lorsque vous oubliez où les fichiers sont mappés. Bien sûr, loop0p1 et loop0p2 sont mappés sous le répertoire / dev / mapper.

Xofo
la source
Ce serait bien si kpartx listait explicitement le répertoire sous lequel les périphériques de boucle sont mappés.
Xofo