我有一个用于 xen 磁盘的逻辑卷:
Disk /dev/d0_vg/backup: 10.7 GB, 10737418240 bytes
1 heads, 1 sectors/track, 20971520 cylinders, total 20971520 sectors
Units = cylinders of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00001b22
Device Boot Start End Blocks Id System
/dev/d0_vg/backup1 * 64 208839 104388 83 Linux
/dev/d0_vg/backup2 208846 19406517 9598836 83 Linux
/dev/d0_vg/backup3 19406521 20964808 779144 82 Linux swap / Solaris
我如何指定正确的偏移量来将备份2(根文件系统)挂载到某处?
我尝试按照这篇文章计算起始位置:
https://www.novell.com/coolsolutions/tip/19710.html
208846*512=106929152
mount -o loop,offset=106929152 /dev/d0_vg/backup2 /mnt/
我总是收到"mount: you must specify the filesystem type"
错误,所以它没有尝试从应该读取的地方读取。有人知道这里的问题是什么吗?
答案1
如果我没看错的话,您有一个 Linux 虚拟机管理程序 (Xen dom0),其中有 Linux LVM 卷,用作 Xen 客户机 (domU) 的虚拟磁盘。您想直接从虚拟机管理程序访问该 LVM 中的数据,绕过 Xen 客户机。
我不再使用 Xen,但我认为该过程与我对 KVM 客户机所做的操作类似:
关闭客户 domU。(从两个不同位置访问文件系统会导致数据损坏)
在虚拟机管理程序运行时kpartx
,它将扫描 LVM 以查找分区表,并为找到的每个分区创建设备条目(我假设有一个卷组客人以及 LVM客端名称-磁盘名称这是你的 domU 的虚拟硬盘)
[root@dom0 ]# kpartx -a /dev/Guests/guestname-diskname
如果您的 Xen 客户机中有三个分区,这将产生 3 个新的设备条目:/dev/Guests/guestname-diskname[1-3]
然后,您应该能够使用以下命令轻松挂载带有文件系统的分区:
[root@dom0 ]# mount -t ext3 /dev/Guests/guestname-diskname2 /mnt
如果您也在 domU 内部使用了 LVM,情况会变得稍微复杂一些;然后分区的类型8e Linux LVM
和格式将与物理卷相同,您还不能简单地挂载这些分区,因此需要使用 LVM 技巧。与挂载命令不同,步骤如下:
希望您可以检测到 domU 中存在的卷组:
[root@dom0 ]# vgscan
Found volume group "Guests" using metadata type lvm2
Found volume group "VG-guestname" using metadata type lvm2 <== NEW!
接下来需要启用卷组“VG-客人姓名”:
[root@dom0 ]# vgchange -a y guestname
并且lvscan
应该显示在您的 domU 中创建的逻辑卷,并且设备映射器条目通常也现在创建,允许您执行以下操作:
[root@dom0 ]# mount -t ext3 /dev/VG-guestname/guest-lvname /mnt
据我所知,这在 Xen 中是不可能的,但可以在 KVM 中发生,这种不方便的情况是,虚拟机管理程序中使用的卷组名称与客户机中分配的名称相同。
答案2
没办法,您的坐骑可能不具备使用这个棘手的回送坐骑所需的能力。
如果你正在挂载某个东西,mount 命令首先调用losetup
,最后挂载这个losetup
设备。它通常是/dev/loop0
(或更大)。
使用 losetup 命令,您可以挂载文件或文件的一部分,就像它是普通分区一样。它实际上与 windowsers 部落的守护进程工具相同。这次我们使用这个 losetup 将 的一部分映射/dev/d0_vg
到新的块设备,即/dev/loop0
。
您可以分两个步骤完成此操作:
losetup /dev/loop0 /dev/d0_vg --offset=$[208846*512]
mount /dev/loop0 /mnt
执行losetup命令后,你可以用命令检查是否找到了真正的文件系统file -szL /dev/loop0
。
卸载后,您必须使用命令删除 loop0 设备losetup -d
。