Loop-Device

如何找到哪些圖像屬於哪個 /dev/loop?

  • July 12, 2016

我經常使用映像驅動器,這意味著對有問題的驅動器進行 dd-copy,然後處理映像而不是驅動器本身。

對於大多數工作,我使用 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 希望出現實際圖像。

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選項為您刪除它們。那隻需要循環設備作為參數;它不關心支持文件/設備。

引用自:https://unix.stackexchange.com/questions/172382