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挂载是一样的,前提是要是支持的磁盘映像格式才行。

linux下挂载VHD等虚拟磁盘文件的更多相关文章

  1. Linux下挂载NTFS格式的U盘或硬盘

    我们知道在Linux下挂载fat32的U盘非常容易,使用mount /dev/drive_name /mnt/指定目录这样就可以挂载了,但是如果U盘或者硬盘的格式是NTFS的话,那么Linux是不能识 ...

  2. linux下挂载U盘

    转:http://www.cnblogs.com/yeahgis/archive/2012/04/05/2432779.html linux下挂载U盘 一.Linux挂载U盘: 1.插入u盘到计算机, ...

  3. VMware,win7与linux centos6.4文件互传,linux下挂载windows共享文件夹,vmware tools安装方法

    本方法是以win7,VMware9.0.1 ,centos6.4为基础实验的. 对于linux的初级使用阶段,都会Windows中使用linux虚拟机VMWare或者其它的.在Windows与linu ...

  4. Azure上如何在Linux下挂载数据磁盘

    [原文首次发表于51cto http://cloudapps.blog.51cto.com/3136598/1653672] 在Azure上创建了虚拟机之后,我们在一些情况下会需要添加更多的数据磁盘来 ...

  5. Linux下挂载iso文件和配置yum本地源

    Linux的版本: [root@pbn ~]# head -n 1 /etc/issueRed Hat Enterprise Linux Server release 6.1 (Santiago) 1 ...

  6. linux下挂载NTFS分区错误修复

    今天在linux下打开win的NTFS硬盘总是提示出错了,而且是全部的NTFS盘都出错,其中sda1错误显示如下: Error mounting /dev/sda1 at /media/wangbo/ ...

  7. Linux下挂载windows的共享文件夹

    环境说明: 由于领导要求:现需要将某Linux服务器下的一个文件移动到某windows服务器下(服务器均在机房托管,要远程操作) 由于操作为一次性,则决定在windows下建立一个共享文件夹,linu ...

  8. linux下挂载U盘【转】

    转自:http://www.cnblogs.com/yeahgis/archive/2012/04/05/2432779.html 一.Linux挂载U盘:1.插入u盘到计算机,如果目前只插入了一个u ...

  9. linux下挂载iso镜像文件(转)

    挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式: mount [-t vfstype] [-o optio ...

随机推荐

  1. Petri网

    Petri网是一种适合于系统描述和分析的数学模型,主要描述异步和并发关系.(或者Petri网是对离散并行系统的数学表示,适用于描述异步的,并发的计算机系统模型.) Petri网模型自然,直观,简单易懂 ...

  2. Java Run-Time Data Areas

    前言 本文主要介绍JVM的运行时数据区 来自Oracle文档 Java Virtual Machine Specification -- Chapter 2. The Structure of the ...

  3. STM32学习笔记之EXTI(外部中断)

    參考资料:STM32数据手冊.网络资料 =========================================切割线==================================== ...

  4. c#中的 数组

    数组即是一组相同类型组合在一起,使用一个通用的名称,通过分配的下标访问的数据集合中的元素. 数组是具有相同类型的一组数据.当访问数组中的数据时,可以通过下标来指明.c#中数组元素可以为任何数据类型,数 ...

  5. 检索(retrieval && search )-单目标-多目标跟踪-MTMC Tracking和 ReID

    跨摄像头多目标跟踪(Multi-Target Multi-Camera Tracking, MTMC Tracking) 跨摄像头多目标跟踪(Multi-Target Multi-Camera Tra ...

  6. Linux中如何查看文件夹的大小

    直接查看当前文件夹的大小: du –sh 只看文件夹的名字里包含某字符串的子文件夹的大小: du –h –d 1 | grep "BACKEND" 我的linux系统被阉割的比较厉 ...

  7. 揭秘uc浏览器四

    请问大家用过uc浏览器,他收藏一个网页是怎么操作的? 是不是这样,按菜单键——弹出添加网页,收藏网页等等的菜单操作,这个菜单操作很人性化了,并且在前面的篇幅已经说过了,这里不做太多的赘述了. 我这里只 ...

  8. POJ 2280 Amphiphilic Carbon Molecules 极角排序 + 扫描线

    从TLE的暴力枚举 到 13313MS的扫描线  再到 1297MS的简化后的扫描线,简直感觉要爽翻啦.然后满怀欣喜的去HDU交了一下,直接又回到了TLE.....泪流满面 虽说HDU的时限是2000 ...

  9. C#遍历可变化的集合

    如果用foreach,会造成被遍历的集合更改后带来异常问题. 方法一:用for循环可有效的解决这个问题. ;i<List.Count;i++) { if(条件是真) { List.Remove( ...

  10. 使用 GNU Libtool 创建库

    这篇文档向大家介绍 GNU Libtool 的用途及基本使用方法,同时描述如何结合 GNU Autoconf 和 Automake 来使用 Libtool. 3 评论: 吴 小虎, 程序员, 天用唯勤 ...