镜像文件挂载

场景:需要拷贝或者改动镜像文件的内容,而不想启动虚拟机

一挂载*.qcow2格式文件,qcow2是qemu-kvm推荐的镜像文件格式,是稀疏文件,可以随着文件内容增多而增大。
1.检查kernel对NBD(Network Block Device)的支持
[root@test vm]$grep NBD /boot/config-4.18.0-193.el8.x86_64
CONFIG_BLK_DEV_NBD=m
*y和m的区别:
=y的时候,模块会被编译到内核,启动时候自动加载
=m的时候,模块会被编译,但是不是编译到内核,启动时也不会自动加载,需要手动加载

2.加载nbd模块
[root@test vm]modprobe nbd
[root@test vm]lsmod |grep nbd
nbd 49152 0

3.将镜像文件映射为网络设备文件
[root@test vm]$qemu-nbd -c /dev/nbd0 centos-7.4.1708.qcow2
[root@test vm]$ls /dev/nbd0*
/dev/nbd0 /dev/nbd0p1 /dev/nbd0p2

4.挂载nbd分区
[root@test vm]$mount /dev/nbd0p2 /media
mount: /media: unknown filesystem type 'LVM2_member' #有报错,如果有lvm分区不支持直接挂载

对于有lvm分区的qcow2文件:
[root@test vm]$lvscan
ACTIVE '/dev/rhel/swap' [4.00 GiB] inherit
ACTIVE '/dev/rhel/home' [391.54 GiB] inherit
ACTIVE '/dev/rhel/root' [50.00 GiB] inherit
ACTIVE '/dev/centos/swap' [5.00 GiB] inherit
ACTIVE '/dev/centos/root' [<44.00 GiB] inherit
[root@test vm]$mount /dev/centos/root /media #挂载成功

5.卸载
[root@4S /]$umount /media
[root@4S /]$qemu-nbd -d /dev/nbd0
/dev/nbd0 disconnected
[root@4S /]$ls /dev/ndb*
ls: cannot access '/dev/ndb*': No such file or directory #卸载成功

 

 

二.挂载*.iso文件
mount -t iso9660 -o loop test.iso /media

三.挂载*.img文件
1.fdisk -lu rhel6u2.img

Disk rhel6u2.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 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 identifier: 0x00048b34

Device Boot Start End Blocks Id System
rhel6u2.img1 * 2048 1026047 512000 83 Linux
Partition 1 does not end on cylinder boundary.
rhel6u2.img2 1026048 104857599 51915776 8e Linux LVM
Partition 2 has different physical/logical endings:
phys=(1023, 254, 63) logical=(6527, 21, 22)

通常img1是boot分区,img2是root分区,从1026048扇区开始分区,因此得出offset=1026048*512=525336576

2.挂载
mount -o loop,offset=525336576 rhel6u2.img /media/
mount: /media: unknown filesystem type 'LVM2_member',同样有报错
对于有lvm分区的img文件:
#losetup /dev/loop0 rhel6u2.img -o 525336576 #losetup作用是设置循环设备,循环设备可以把文件变成块设备,-d是卸除设备,-o是平移,-e是加密

#pvscan
PV /dev/loop0 VG VolGroup lvm2 [49.51 GiB / 0 free]
Total: 1 [49.51 GiB] / in use: 1 [49.51 GiB] / in no VG: 0 [0 ]
#vgchange -ay VolGroup #将VolGroup卷组设置成活动状态
2 logical volume(s) in volume group "VolGroup" now active
#lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
lv_root VolGroup -wi-a--- 45.57g
lv_swap VolGroup -wi-a--- 3.94g
#mount /dev/VolGroup/lv_root /media/
卸载:
#umount /media/
#vgchange -an VolGroup
0 logical volume(s) in volume group "VolGroup" now active
losetup -d /dev/loop0

四.解压打包vmlinuz
解压cpio -ivcdu  < vmlinuz-1.0.1 
打包cd ../vmlinuz_tmp; find ./ |cpio -o -H newc |gzip -9 > vmlinuz-1.0.2.tar.gz

cpio 相关参数:
-i : --extract ,进入copy-in 模式,也就是解压
-o : --create,进入copy-out 模式,也就是打包
-v : verbose,列出处理的文件
-c : 使用老式的ASCII 归档格式,copy-in模式是自动检测归档格式,copy-out默认是bin格式
-d : --make-directories,在需要的地方创建目录
-u : 替换所有文件,不在询问旧文件是否替已经存在的换新文件
-H : --format,归档格式,其中有bin,odc,newc,crc,tar等格式,odc是老式POSIX.1上跨平台格式,newc是新SVR4跨平台格式,支持大于65536i节点的文件系统,一般ramdisk用这个格式

 

posted on 2020-09-02 09:22  骑着蜗牛追太阳  阅读(843)  评论(0编辑  收藏  举报

导航