前面提到了如何从磁盘映像中挂载或提取指定分区,现在我们再看看如何从含有 LVM 分区的映像中挂载或提取指定的逻辑卷(LV)。由于 LVM 分区内部有自己的盘区(PE)分配方法,因此逻辑卷在映像中并不一定是物理连续的,不能通过找到其偏移地址直接挂载。不过只要本地系统安装了 LVM 支持,就可以使用 LVM 自带的实用工具完成硬盘映像中逻辑卷的挂载。
首先查看一下本地系统已经挂载过的物理卷(PV)、卷组(VG)和逻辑卷。我们看到,系统已经安装并激活了 VolGroup01 卷组。事实上 VolGroup01 中的 LogVol00 是本地系统的根分区,LogVol01 是交换分区。
[root@centos CentOS]# pvscan PV /dev/sda2 VG VolGroup01 lvm2 [136.00 GB / 0 free] Total: 1 [136.00 GB] / in use: 1 [136.00 GB] / in no VG: 0 [0 ][root@centos CentOS]# vgscan Reading all physical volumes. This may take a while... Found volume group "VolGroup01" using metadata type lvm2[root@centos CentOS]# lvscan ACTIVE \'/dev/VolGroup01/LogVol00\' [134.06 GB] inherit ACTIVE \'/dev/VolGroup01/LogVol01\' [1.94 GB] inherit
实验使用的 centos5-2-gnome.img 是一个安装了 CentOS 并通过 LVM 管理磁盘的映像文件。使用 fdisk 命令查看其分区结构,其中 centos5-2-gnome.img2 是 LVM 分区,fdisk 不能提供 LVM 的详细信息。
[root@centos CentOS]# fdisk -l -u centos5-2-gnome.imglast_lba(): I don\'t know how to handle files with mode 81a4You must set cylinders.You can do this from the extra functions menu. Disk centos5-2-gnome.img: 0 MB, 0 bytes255 heads, 63 sectors/track, 0 cylinders, total 0 sectorsUnits = sectors of 1 * 512 = 512 bytes Device Boot Start End Blocks Id Systemcentos5-2-gnome.img1 * 63 208844 104391 83 Linuxcentos5-2-gnome.img2 208845 8385929 4088542+ 8e Linux LVM
使用 Linux 的 loop 设备控制命令――losetup:首先用 -f 参数查找一个空闲的 loop 节点;然后通过 -o 参数指定 LVM 分区在映像中的偏移量(参考 fdisk 的输出),将其挂载在空闲的 loop 节点上;最后使用 -a 参数确认挂载成功。
[root@centos CentOS]# losetup -f/dev/loop4[root@centos CentOS]# losetup -o $((208845*512)) /dev/loop4 centos5-2-gnome.img[root@centos CentOS]# losetup -a.../dev/loop4: [fd00]:26706086 (centos5-2-gnome.img), offset 106928640
再一次查看系统中存在的 LVM 设施。我们看到,映像中的 VolGroup00 卷组已被扫描到,其中有 LogVol00、LogVol01 两个未激活的分区。
[root@centos CentOS]# pvscan PV /dev/loop4 VG VolGroup00 lvm2 [3.88 GB / 0 free] PV /dev/sda2 VG VolGroup01 lvm2 [136.00 GB / 0 free] Total: 2 [139.88 GB] / in use: 2 [139.88 GB] / in no VG: 0 [0 ][root@centos CentOS]# vgscan Reading all physical volumes. This may take a while... Found volume group "VolGroup00" using metadata type lvm2 Found volume group "VolGroup01" using metadata type lvm2[root@centos CentOS]# lvscan inactive \'/dev/VolGroup00/LogVol00\' [2.91 GB] inherit inactive \'/dev/VolGroup00/LogVol01\' [992.00 MB] inherit ACTIVE \'/dev/VolGroup01/LogVol00\' [134.06 GB] inherit ACTIVE \'/dev/VolGroup01/LogVol01\' [1.94 GB] inherit
这个例子中,映像中的卷组与本地已挂载的卷组名称不同,不会出现歧义。但如果映像中的卷组恰与本地已挂载的卷组重名,则可以使用 vgrename 命令修改映像中的卷组名称。
[root@centos CentOS]# vgrename --help vgrename: Rename a volume group vgrename [-A|--autobackup y|n] [-d|--debug] [-h|--help] [-t|--test] [-v|--verbose] [--version] OldVolumeGroupPath NewVolumeGroupPath | OldVolumeGroupName NewVolumeGroupName
使用 vgchange 命令激活 VolGroup00 卷组,再次查看逻辑卷的状态,LogVol00、LogVol01 已经可用。
[root@centos CentOS]# vgchange -ay VolGroup00 2 logical volume(s) in volume group "VolGroup00" now active[root@centos CentOS]# lvscan ACTIVE \'/dev/VolGroup00/LogVol00\' [2.91 GB] inherit ACTIVE \'/dev/VolGroup00/LogVol01\' [992.00 MB] inherit ACTIVE \'/dev/VolGroup01/LogVol00\' [134.06 GB] inherit ACTIVE \'/dev/VolGroup01/LogVol01\' [1.94 GB] inherit
现在便可以使用 lvscan 输出的逻辑卷设备文件名来挂载对应的文件系统了。
[root@centos CentOS]# mount /dev/VolGroup00/LogVol00 ./part/[root@centos CentOS]# ls ./part/bin boot dev etc home lib lost+found media misc mntnet opt proc root sbin selinux srv sys tmp usr var[root@centos CentOS]# umount ./part/
如果要提取其中的分区,也可以直接对逻辑卷设备文件或 /dev/mapper/ 下对应的设备文件操作。
[root@centos CentOS]# dd if=/dev/VolGroup00/LogVol00 of=LogVol00.img6094848+0 records in6094848+0 records out3120562176 bytes (3.1 GB) copied, 113.93 seconds, 27.4 MB/s
试挂载提取出来的分区。
[root@centos CentOS]# mount -o loop LogVol00.img ./part/[root@centos CentOS]# ls ./part/bin boot dev etc home lib lost+found media misc mntnet opt proc root sbin selinux srv sys tmp usr var[root@centos CentOS]# umount ./part/
卸载文件系统之后,别忘了卸载卷组和 loop 节点。
[root@centos CentOS]# vgchange -an VolGroup00 0 logical volume(s) in volume group "VolGroup00" now active[root@centos CentOS]# losetup -d /dev/loop4
建议继续学习:
- Centos挂载新硬盘开机自动挂载 (阅读:7721)
- 将远程共享文件夹挂载到linux本地目录 (阅读:3609)
- 存储基础知识之——磁盘阵列原理及操作实战 (阅读:3632)
- linux磁盘管理学习笔记(下):linux分区、挂载 (阅读:3090)
- 从磁盘映像中挂载或提取指定分区 (阅读:2841)
- LVM介绍 (阅读:2806)
- linux 挂载光驱 (阅读:2410)
- linux下挂载U盘过程 (阅读:2241)
- Linux内核文件系统挂载分析 (阅读:1949)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习