zl程序教程

您现在的位置是:首页 >  后端

当前栏目

KVM 虚拟机镜像文件挂载

虚拟机 挂载 kvm 镜像文件
2023-09-14 09:11:30 时间

raw磁盘镜像的挂载

一、offset计算法

原理:找出分区开始的位置,使用mount命令的offset参数 偏移到镜像内容真正开始的位置

宿主机:192.168.0.104
客户机:192.168.0.108    # /boot 标准分区,/LVM 分区,
  镜像:/home/raw/kvm108.raw
  需求:在104机器上面挂载108镜像到 /mnt/raw/目录

1、查看镜像文件,并计算出offset偏移量 

#查看镜像文件信息
fdisk -lu /home/raw/kvm108.raw
#显示内容
Disk /home/raw/kvm108.raw: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00067e2a

               Device Boot      Start         End      Blocks   Id  System
/home/raw/kvm108.raw1   *        2048     2099199     1048576   83  Linux
/home/raw/kvm108.raw2         2099200    20971519     9436160   8e  Linux LVM


#根据上述信息分析
kvm108.raw有两个分区,我们要挂载的是 LVM分区

#offset如何计算
offset=Start*Sector


#计算值
echo $[2099200*512]      #结果1074790400

2、使用mount命令挂载loop设备 

mount -o loop,offset=1074790400 /home/raw/kvm108.raw /mnt/raw/

#如果分区是LVM,将提示下面信息,无法挂载成功
mount: unknown filesystem type 'LVM2_member'

3、LVM分区挂载方法

#查询目录空闲的loop设备
losetup -f    #losetup -a 查询所有loop设备的关联情况

#结果
/dev/loop0

#关联loop0设备到 kvm108镜像文件
losetup -o 1074790400 /dev/loop0 /home/raw/kvm108.raw

#格式化显示物理卷的概要信息
pvs

#结果
PV         VG     Fmt  Attr PSize   PFree
/dev/loop0 vg108  lvm2 a--   <9.00g    0 
/dev/sda2  centos lvm2 a--  <19.00g    0 

#注意:这里的VG名称一定不能相同,虚拟机如果是默认安装,VG名称可能出现都是centos,这时要修改一下VG
本例已事先到108虚拟机上面改好vg,链接https://blog.csdn.net/mshxuyi/article/details/100740563

#激活vg108卷组状态
vgchange -ay vg108

#结果
2 logical volume(s) in volume group "vg108" now active

#扫描所有逻辑卷
lvscan

#结果
ACTIVE            '/dev/centos/swap' [2.00 GiB] inherit
ACTIVE            '/dev/centos/root' [<17.00 GiB] inherit
ACTIVE            '/dev/vg108/swap' [1.00 GiB] inherit
ACTIVE            '/dev/vg108/root' [<8.00 GiB] inherit

#挂载
mount /dev/vg108/root /mnt/raw/

#显示挂载点
ls /mnt/raw/

#结果
total 12
lrwxrwxrwx.  1 root root    7 Aug 13 23:28 bin -> usr/bin
drwxr-xr-x.  2 root root    6 Aug 13 23:28 boot
drwxr-xr-x.  2 root root    6 Aug 13 23:28 dev
drwxr-xr-x. 74 root root 8192 Aug 17  2019 etc
drwxr-xr-x.  2 root root    6 Apr 11  2018 home
lrwxrwxrwx.  1 root root    7 Aug 13 23:28 lib -> usr/lib
lrwxrwxrwx.  1 root root    9 Aug 13 23:28 lib64 -> usr/lib64
drwxr-xr-x.  2 root root    6 Apr 11  2018 media
drwxr-xr-x.  2 root root    6 Apr 11  2018 mnt
drwxr-xr-x.  2 root root    6 Apr 11  2018 opt
drwxr-xr-x.  2 root root    6 Aug 13 23:28 proc
dr-xr-x---.  2 root root  200 Aug 15  2019 root
drwxr-xr-x.  2 root root    6 Aug 13 23:28 run
lrwxrwxrwx.  1 root root    8 Aug 13 23:28 sbin -> usr/sbin
drwxr-xr-x.  2 root root    6 Apr 11  2018 srv


#取消挂载
umount /mnt/raw/

#激活取消
vgchange -an vg108

#结果
0 logical volume(s) in volume group "vg108" now active

#取消关联loop设备
losetup -d /dev/loop0



二、losetup + kpartx 映射分区法

宿主机:192.168.0.104
虚拟机:192.168.0.107  #标准分区格式  /boot,  /,  /swap 3个分区
  镜像:/home/raw/kvm107.raw   #在104
  需求:在104机器上面挂载107镜像到 /mnt/raw/目录
#查询目录空闲的loop设备
losetup -f    #losetup -a 查询所有loop设备的关联情况

#结果
/dev/loop0

#关联loop设备到镜像文件
losetup /dev/loop0 /home/raw/kvm107.raw


#映射分区
kpartx -av /dev/loop0   #-a 添加映射关系,-v 显示映射关系,映射成功的在 /dev/mapper/下

#结果
add map loop0p1 (253:2): 0 409600 linear /dev/loop0 2048        #/boot/分区
add map loop0p2 (253:3): 0 18462720 linear /dev/loop0 411648    #/根分区
add map loop0p3 (253:4): 0 2097152 linear /dev/loop0 18874368   #/swap分区

#查看映射
ll /dev/mapper/

#结果
total 0
lrwxrwxrwx 1 root root       7 Aug 17 10:28 centos-root -> ../dm-0
lrwxrwxrwx 1 root root       7 Aug 17 10:28 centos-swap -> ../dm-1
crw------- 1 root root 10, 236 Aug 17 10:28 control
lrwxrwxrwx 1 root root       7 Aug 18 11:29 loop0p1 -> ../dm-2
lrwxrwxrwx 1 root root       7 Aug 18 11:29 loop0p2 -> ../dm-3
lrwxrwxrwx 1 root root       7 Aug 18 11:29 loop0p3 -> ../dm-4

#挂载根分区
mount /dev/mapper/loop0p2 /mnt/raw/

#查看挂载点
ls /mnt/raw/

#结果
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  
opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#取消挂载
umount /mnt/raw/

#关闭映射
kpartx -dv /loop/loop0p2