• 镜像文件挂载


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

    一挂载*.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用这个格式

  • 相关阅读:
    .Net 平台下的互联网架构新思考
    图形化机构树静态页面
    互联网应用架构谈
    解决android调用IIS Express中的WCF服务时,出现错误400问题
    远程连接sql server 数据库的方法
    WPF样式——多条件触发器
    Ubuntu 16.04 安装 RabbitMQ
    session共享个人小结
    Nginx负载均衡配置
    MySQL数据库设置主从同步
  • 原文地址:https://www.cnblogs.com/xia-dong/p/13600001.html
Copyright © 2020-2023  润新知