我有一个文件hdd.img
是硬盘的原始图像。硬盘有一个 BIOS/DOS 分区表,其第二个分区被设置为用作 LVM 创建逻辑卷的单个物理卷。
我的目标是访问由这些逻辑卷表示的分区/文件系统。
hdd.img
我通过以下命令设置环回块设备映射:
$ sudo losetup --partscan -f hdd.img
这导致我在环回设备上看到该映像中包含的两个分区(它是loop17
)
$ lsblk | grep 'loop17'
loop17 7:17 0 30G 0 loop
├─loop17p1 259:4 0 1G 0 loop
└─loop17p2 259:5 0 29G 0 loop
现在的问题是。如何通知系统扫描 /dev/loop17p2 来查找我真正想要访问的逻辑卷
更新
安装软件包kpartx
并执行以下操作:
$ sudo losetup -f hdd.img
$ sudo kpartx -a /dev/loop17
确实生成了到 上包含的卷的 lvm 映射/dev/loop17p2
。虽然这解决了我的迫切需求,但仍然很高兴知道为什么在已经创建了包含逻辑卷的块设备vgscan
后不起作用?losetup --partscan -f hdd.img
/dev/loop17p2
答案1
使用lvscan
。vgscan
是扫描卷组...
答案2
该命令vgscan
有一个命令行选项--cache
,必须用于将扫描结果放入缓存中,从而允许后续vgchange -ay <vg>
调用来生成映射
简而言之这项工作:
$ sudo losetup --partscan -f hdd.img
$ sudo vgscan --scan
$ sudo vgchange -ay <vg>
这vg
是卷组(vgscan)已报告的卷组之一。
然而这会不是工作:
$ sudo losetup --partscan -f hdd.img
$ sudo vgscan
$ sudo vgchange -ay <vg>
因为第二个命令不会将其扫描结果放入--cache
.奇怪的是,我对这面--cache
旗帜的看法是认为它意味着使用缓存的值而不是执行实际扫描。