zoukankan      html  css  js  c++  java
  • linux下挂载VHD等虚拟磁盘文件

    1、RAW格式虚拟磁盘

    linux下可以直接挂载raw格式的虚拟磁盘镜像文件。

    例如,这里先用dd命令创建一个文件,然后将其格式化为ext4格式(只有一个分区),然后挂载到/mnt目录。
    下面的raw.img磁盘镜像文件就一个分区,所以没有使用offset=来指定偏移。如果有多个分区,则可以通过指定偏移来挂载。具体的可以查阅mount命令的相关参数信息。

    > dd if=/dev/zero of=raw.img bs=1M count=512
    记录了512+0 的读入
    记录了512+0 的写出
    536870912 bytes (537 MB, 512 MiB) copied, 0.207045 s, 2.6 GB/s
    
    /home/o [o@o-pc] [10:29]
    > mkfs.ext4 -q raw.img 
    
    /home/o [o@o-pc] [10:30]
    > sudo mount -o loop raw.img /mnt
    
    /home/o [o@o-pc] [10:30]
    > df -h
    文件系统        容量  已用  可用 已用% 挂载点
    tmpfs           3.9G   79M  3.8G    2% /dev/shm
    /dev/sda4        30G  6.6G   24G   22% /
    tmpfs           3.9G  136K  3.9G    1% /tmp
    /dev/sda2        69G   26G   41G   39% /home
    tmpfs           794M   36K  794M    1% /run/user/1000
    /dev/loop0      488M  780K  452M    1% /mnt

    2、VHD/VHDX磁盘文件挂载

    linux不能直接支持挂载VHD磁盘镜像文件。可以通过vmware的vmware-mount等工具来挂载。vmware没有直接提供这个工具,但在vmware playervmware workstation中都有提供。但这里不打算使用这种方式。

    这里使用qemu-nbd来挂载磁盘镜像文件。

    a)安装qemu

    首先要安装一下qemu-kvm,我这里使用的是Fedora 25,安装命令如下

    sudo dnf install qemu-kvm 

    如果你是用的debian/ubuntu等,可以使用sudo apt-get install qemu-kvm进行安装。
    archlinux可以使用sudo pacman -S qemu进行安装。

    b)加载nbd驱动

    NBD(Network Block Device)是网络块设备的缩写。这个模块可以将一个远程主机的磁盘空间(与挂载nfs有区别),当作一个本地块设备来使用。
    NBD是一个内核模块,大部分Linux发行版都已经包含它,这里不需要再安装了。

    使用modprobe来加载nbd驱动

    /media/o/data [o@o-pc] [11:04]
    > sudo modprobe nbd max_part=8

    加载完成后,可以使用modinfo命令来查看模块信息

    /media/o/data [o@o-pc] [11:05]
    > modinfo nbd
    filename:       /lib/modules/4.9.6-200.fc25.x86_64/kernel/drivers/block/nbd.ko.xz
    license:        GPL
    description:    Network Block Device
    depends:        
    intree:         Y
    vermagic:       4.9.6-200.fc25.x86_64 SMP mod_unload 
    signat:         PKCS#7
    signer:         
    sig_key:        
    sig_hashalgo:   md4
    parm:           nbds_max:number of network block devices to initialize (default: 16) (int)
    parm:           max_part:number of partitions per device (default: 0) (int)

    上面的信息说,初始化网络块设备的数目为16,说明其在/dev/下创建16个nbd设备。

    /media/o/data [o@o-pc] [11:05]
    > ls /dev/nbd*
    /dev/nbd0  /dev/nbd0p1  /dev/nbd1  /dev/nbd10  /dev/nbd11  /dev/nbd12  /dev/nbd13  /dev/nbd14  /dev/nbd15  /dev/nbd2  /dev/nbd3  /dev/nbd4  /dev/nbd5  /dev/nbd6  /dev/nbd7  /dev/nbd8  /dev/nbd9

    c)将vhdx文件连接到nbd设备

    这里使用qemu-nbd来进行连接(使用-c参数为连接,使用-d参数断开连接)

    /media/o/data [o@o-pc] [11:05]
    > sudo qemu-nbd -c /dev/nbd0 VS2017RC-offline.vhdx 

    连接上之后使用fdisk查看一下设备信息。

    /media/o/data [o@o-pc] [11:05]
    > sudo fdisk -l /dev/nbd0
    Disk /dev/nbd0:100 GiB,107374182400 字节,209715200 个扇区
    单元:扇区 / 1 * 512 = 512 字节
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0xa373e501
    设备        启动  起点       末尾      扇区   大小 Id 类型
    /dev/nbd0p1      2048 209711103 209709056  100G  7 HPFS/NTFS/exFAT

    实际上磁盘只有一个分区,分区格式为exFAT,磁盘大小为动态增长。

    d)挂载分区

    直接使用mount命令挂载nbd0p1即可

    /media/o/data [o@o-pc] [11:36]
    > sudo mount -t exfat -o rw  /dev/nbd0p1 /mnt
    [sudo] o 的密码:
    FUSE exfat 1.0.1
    
    /media/o/data [o@o-pc] [12:05]
    > ls /mnt/
    '$RECYCLE.BIN'  'System Volume Information'  vs2017rc  安装说明.txt

    安装exFAT支持

    因为分区是exFAT格式的,不能直接挂载。
    先安装一下fuse-exfatexfat-utils
    具体的安装过程简要的说一下
    先下载两个rpm源码包。

    wget http://download1.rpmfusion.org/free/el/updates/6/SRPMS/exfat-utils-1.0.1-2.el6.src.rpm
    wget http://download1.rpmfusion.org/free/el/updates/6/SRPMS/exfat-utils-1.0.1-2.el6.src.rpm

    然后安装fuse-develrpmbuild,并解压src.rpm包。

    sudo dnf install fuse-devel rpmbuild
    sudo dnf install scons    # 构建exfat-utils需要
    rpm -ivh exfat-utils-1.0.1-2.el6.src.rpm exfat-utils-1.0.1-2.el6.src.rpm

    解压完成之后可以在当前用户的home目录下看到rpmbuild目录,进入该目录下的SPECS目录。
    然后使用rpmbuild构建rpm包。

    rpmbuild -ba exfat-utils.spec
    rpmbuild -ba fuse-exfat.spec

    构建完成之后进入rpmbuild/RPMS/x86_64目录(这里x86_64与你的系统构架有关),安装生成的rpm包。

    /home/o/rpmbuild/RPMS/x86_64 [o@o-pc] [12:04]
    > sudo rpm -ivh exfat-utils-1.0.1-2.fc25.x86_64.rpm fuse-exfat-1.0.1-1.fc25.x86_64.rpm 
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:fuse-exfat-1.0.1-1.fc25          ################################# [ 50%]
       2:exfat-utils-1.0.1-2.fc25         ################################# [100%]

    ubuntu上可以直接使用apt来安装sudo apt install exfat-utils exfat-fuse

    3、其它虚拟磁盘文件的挂载

    其它的就不再说了,与上面的VHD挂载是一样的,前提是要是支持的磁盘映像格式才行。

    http://www.cnblogs.com/oloroso/p/6385398.html

  • 相关阅读:
    gevent实现基于epoll和协程的服务器
    用greenlet实现协程消费者生产者
    More is better(MST)(求无向图中最大集合元素个数)
    小希的迷宫(MST单棵树判断法则)
    畅通工程再续(MST)
    畅通工程再续
    畅通工程
    还是畅通工程(MST)
    Minimum Inversion Number
    Who Gets the Most Candies?(线段树 + 反素数 )
  • 原文地址:https://www.cnblogs.com/findumars/p/7123997.html
Copyright © 2011-2022 走看看