我有一个dd
“ed”磁盘映像文件。
我可以使用类似的工具kpartx
从该磁盘映像文件创建设备映射器设备。
但是分区程序(例如)gparted
并fdisk
没有列出我的映射设备!
有什么方法可以gparted
(或等效程序 - 图形或控制台)列出我的映射设备及其组成分区以及有关这些分区的详细信息?
附言:这些工具是否缺少某些功能,或者从根本上来说不可能提供这些功能?
答案1
这是可能的,但我不确定是否有意义。
分区工具只关心整个磁盘设备,因为它们直接从相关磁盘扇区读取分区表。它们不需要每个分区设备都存在。这意味着用它制作的基本循环设备就losetup
足够了,如果工具看不到它,您可以手动运行fdisk /dev/loop0
或做其他事情。
(如果一个全磁盘设备在/dev/mapper/
,让这些工具看到它并不难,尽管它通常需要编辑几行源代码......运行fdisk /dev/mapper/bleh
通常更容易。)
还请注意,最近的内核支持losetup --partscan
消除了使用设备映射器的需要。
答案2
只需创建临时硬链接运行后kpartx -a ...
:
sudo ln /dev/loop0 /dev/mapper/loop0
然后照常运行 gparted(它将正常运行/dev/mapper/loop0p*
):
sudo gparted /dev/mapper/loop0
当不再需要链接时,请不要忘记删除链接。
答案3
3.5 年后,我对此有了另一个解决方案:)
如果您不担心使用 kpartx,并且我正确地建议您的目标是操作以普通文件形式表示的磁盘映像上的分区,那么这里有一个没有 kpartx 和符号链接的替代工作流程(这就是为什么它作为单独的答案发布的原因):
sudo losetup --find --show ./somedrive.img
为整个文件附加一个循环设备
./somedrive.img
;--find
是要求losetup
自动寻找空闲设备;--show
是打印已使用的设备。例如,考虑所选设备是/dev/loop5
。sudo partx --update /dev/loop5
告诉 Linux 内核重新扫描 中的分区
/dev/loop5
。如果成功,它将不会产生任何输出,因此请检查一下ls -al /dev/loop5*
会出现什么。做任何你需要的事情,比如
sudo gparted /dev/loop5
此时您应该可以正常操作了
/dev/loop5p*
。sudo partx --delete /dev/loop5
释放分区映射。
sudo losetup --detach /dev/loop5
最后,释放循环装置。
附言如果您是版本 v2.21 或更高版本软件包的骄傲拥有者™ util-linux
,您可以一次性请求循环设备附件和分区重新扫描:sudo losetup --find --show --partscan ./somedrive.img
并且根本不会遇到类似 gparted 的实用程序的问题。