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

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

我经常使用映像驱动器,这意味着对有问题的驱动器进行 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 希望显示实际图像。

答案1

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

另一种可能更便携的选择是从 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

losetup我们也会很乐意使用该-d选项为您删除它们。这只需要循环设备作为参数;它不关心支持文件/设备。

答案2

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

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

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

相关内容