如何查找哪些映像属于哪个/ dev / loop?


9

我经常使用映像驱动器,这意味着先对相关驱动器进行dd复制,然后再处理映像而不是驱动器本身。

对于大多数工作,我使用kpartx将驱动器的分区映射到/ dev / mapper /下的设备。我想知道的是,是否有一种方法可以找到哪个映射属于哪个图像。

考虑一下:

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

现在,假设我忘记了哪个图像去了哪个映射。有没有办法让kpartx-或内核,或其他任何内容-告诉我哪个映像在哪里?

编辑另外,如果在kpartx添加映射的同时不小心rm了映像文件,如何删除映射?kpartx希望显示实际图像。

Answers:


13

losetup (通常用于设置它们的命令)将告诉您:

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

请注意,在较旧的版本中,您可能不愿意使用use -a代替--list,并且此输出将以其他格式(现已弃用)输出。

该信息来自/sys

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

另一个可能更可移植的选择是从udisk获取它:

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

losetup也可以使用该-d选项为您愉快地删除它们。只需将循环设备作为参数即可。它不在乎备份文件/设备。


losttup -d / dev / loop0:“循环:无法删除设备/ dev / loop0:设备或资源正忙”。但是,它没有以任何方式安装或使用。为什么是这样?
bos 2014年

@bos是否将其映射到/ dev / mapper下?这可能算作正在使用。清除设备映射器映射。(如果kpartx没有办法做到这一点,你可以使用dmsetup)
derobert

0

我还要添加以下内容。您可以使用kpartx探查设备的映射位置。例如:

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

当您忘记文件映射的位置时,这将很有帮助。当然,loop0p1和loop0p2映射在目录/ dev / mapper下。


如果kpartx明确列出了循环设备所映射的目录,那就太好了。
Xofo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.