天天看點

KVM 虛拟機鏡像檔案挂載

raw磁盤鏡像的挂載

一、offset計算法

原理:找出分區開始的位置,使用mount指令的offset參數 偏移到鏡像内容真正開始的位置

主控端:192.168.0.104
客戶機:192.168.0.108    # /boot 标準分區,/LVM 分區,
  鏡像:/home/raw/kvm108.raw
  需求:在104機器上面挂載108鏡像到 /mnt/raw/目錄      
#檢視鏡像檔案資訊
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      
mount -o loop,offset=1074790400 /home/raw/kvm108.raw /mnt/raw/

#如果分區是LVM,将提示下面資訊,無法挂載成功
mount: unknown filesystem type 'LVM2_member'      
#查詢目錄空閑的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,

#激活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      

繼續閱讀