虚拟硬盘VHD的程式化挂载方式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

微软推出的虚拟硬盘vhd同vmdk,qcow2等一样,是一种磁盘镜像格式。磁盘镜像一般多用于虚拟化计算,但微软支持将Win7/Win8/Win2012等直接安装进vhd文件中,并且不通过任何虚拟机,让bootmgr直接引导vhd文件启动系统,就好像这个vhd是真的硬盘一样。

除了方便封装操作系统之外,也有不少工具和方法可以在不同的操作系统下挂载vhd,就好像vhd文件就是移动硬盘一样。因此,vhd也可以是一个不错的数据载体。我将我的程序、数据等归类放到不同的vhd虚拟磁盘中,需要用时可以像移动硬盘那样挂载,需要带走时,复制vhd文件就可以了。

### 使用场景1: Linux

在 Linux下,可以通过QEMU来创建和管理vhd文件。我可以使用 qemu-img 来创建和维护 vhd 文件,通过 qemu-nbd 来挂载 vhd 文件。当然,对 vhdx 格式的管理也不在话下。通过 qemu 可以很方便地管理和维护许多格式的磁盘镜像,而且这些操作都可以通过脚本来完成。事实上,在 Linux 下,对虚拟磁盘的管理要比在 Windows 下强大得多,vhd格式在这里就不起眼了,比如,QEMU 推荐使用的格式是 qcow2。

在 Linux 下,可以编写 shell 脚本来完成虚拟磁盘的挂载等管理工作,并且可以控制这些脚本的执行时机。

另外,如果一个vhd文件是固定大小的,不使用其它工具,仅使用 Linux 的 mount 命令也可以挂载 vhd:

mount [-t <fstype>] -o loop,offset=... <vhd file> <mount point>

offset是第一个分区的偏移量,我的vhd文件都是1M对齐分区的,因此offset是1M。

### 使用场景2: Win7/Win8/Win2012...

在 Win8 下,在资源管理器中点击vhd文件就可以挂载,但在 Win7 上,就要自己写脚本或注册表或是借助第三方工具才能实现这样的操作了。不过,他们都可以在 计算机管理/存储/磁盘管理 这个管理界面上,完成 vhd 的创建、挂载等操作。

但是,虽然 Win7/Win8等可以直接从 vhd 中原生启动,但是他们可不会自动加载我们后来所管理的那些 vhd。而且,问题的重点是,我们需要一种可编程的方式来对 vhd 文件进行管理,而不只是通过图形界面来操作。

Windows所带的 diskpart 似乎可以完成这个工作,比如:

C:\>diskpart
create vdisk file="D:\test.vhd" maximum=2048 type=fixed  ::创建一个固定大小为2G的vhd
select vdisk file="D:\test.vhd"
attach vdisk  ::加载
create partition primary offset=2048 align=4  ::创建分区
active
assign letter=T
format quick fs=ntfs label="TEST"
exit

然而,上面是通过命令行进行交互的,如果是程式化的方式呢?比如,我们需要在开机的时候自动加载几个 vhd 文件,就要以写脚本的方式来做了。

我们可以将一些 diskpart 的指令先写到一个文本文件中,然后调用 diskpart /s <指令文件>,这样,diskpart 就会读取所输入的文件并逐行执行。比如,我们需要在开机时加载若干个vhd文件并指定挂载路径,可以先将相应的diskpart输入指令写到一个文本文件中,假设是C:\diskpart.input.txt,然后,写一个批处理:

@echo off
set LOG=C:\diskpart.log
echo Execute diskpart script on %DATE% %TIME% > %LOG%
diskpart /s C:\diskpart.input.txt 1>>%LOG%

有时需要在运行时才确定要执行的 diskpart 指令,我们可以通过脚本动态生成指令文件:

@echo off
set X=%TEMP%\diskpart.input
1>%X% (echo select vdisk file="..."echo attach vdiskecho select partition 1echo assign letter=...echo exit
)
diskpart /s %X%
del %X%

上面的“1>%X%”是输出重定向。1是标准输出,因此这段程序是将标准输出写入到%X%这个文件中,之后调用diskpart /s 来执行这个文件。

也可以不使用临时文件来调用diskpart,记得 Linux 下的管道操作吧?tar ... | gzip ...,通过管道,前面命令的输出会作为后面命令的输入。我们可以使用管道操作来调用diskpart,比如:

echo select vdisk file="..." | diskpart

但问题是,一行echo输出给diskpart后,diskpart执行完就退出了,和后面的指令连接不起来。所以,我们需要将一批指令组合在一起,然后一起输出给diskpart:

@echo off
(echo select vdisk file="..."echo attach vdiskecho online disk noerrecho select partition 1echo assign letter=Xecho exit
) | diskpart
可以通过组策略来控制这些脚本的执行,或是通过 windows 的计划任务来管理它们。


### 使用场景3:WinXP/Win2003

在 WinXP/Win2003,系统本身没有提供操作 vhd 的机制,不得不借助于第三方工具来实现。

对 vhd 的创建、分区等操作,交互方式的可以通过 DiskGenius 等工具来完成。通过程式来控制的,可使用 QEMU for windows 的 qemu-img。

对 vhd 的挂载操作则比较困难,你可以安装或提取 Virtual PC 中的 VHDMount,它应该可以满足这方面的要求,不过我没实际操作过。

如果 vhd 文件是固定大小(相对于动态扩展)的,那么还有一些其它方法来挂载 vhd,比如通过 imdisk 或 winvblock 来挂载。

imdisk 是一个很小巧的工具,可以创建内存盘,可以挂载很多种硬盘镜像,可惜没有好的图形界面。你可以在这儿下载 imdisk: http://www.ltr-data.se/opencode.html/

imdisk -a -f <vhd file> -m <挂载路径> -v 1

上面的参数 -v 1 表示挂载第一个分区。

如果你知道 vhd 中第一个分区的偏移量,那么也可以指定这个偏移量来挂载。比如我的vhd文件都是按1M对齐来分区的,所以我可以这样挂载: imdisk -a -f <vhd file> -b 1m -m <挂载路径>

如果你的系统中装了winvblock 的话,也可以使用它自带的一个小工具来挂载固定大小的vhd:

winvblk -cmd attach -u <vhd file> -m <挂载盘符>


转载于:https://my.oschina.net/chenzhiqiang/blog/201934

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cs231n课堂内容记录-Lecture 5 卷积神经网络介绍

Lecture 5 CNN 课堂笔记参见&#xff1a;https://zhuanlan.zhihu.com/p/22038289?referintelligentunit 不错的总结笔记&#xff1a;https://blog.csdn.net/sugar_girl/article/details/79108709 1.卷积核步长公式&#xff1a;&#xff08;N-F2*padding&#xff09;/stride1ne…

Linux MISC 驱动实验

目录MISC 设备驱动简介硬件原理图分析实验程序编写修改设备树beep 驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试misc 的意思是混合、杂项的&#xff0c;因此MISC 驱动也叫做杂项驱动&#xff0c;也就是当我们板子上的某些外设无法进行分类的时候就可以使用MI…

PHP的session阻塞问题

2019独角兽企业重金招聘Python工程师标准>>> 通过phpinfo()可以看到php支持的session存储方式有&#xff1a; 可以看出session的存储方式有文件、用户自定义、memcache存储方式 在文件的存储方式用存在session阻塞的问题&#xff0c;该种阻塞存在于同一个浏览器执行…

Linux INPUT 子系统实验

目录input 子系统input 子系统简input 驱动编写流程input_event 结构体硬件原理图分析实验程序编写修改设备树文件按键input 驱动程序编写编写测试APP运行测试编译驱动程序和测试APP运行测试Linux 自带按键驱动程序的使用自带按键驱动程序源码简析自带按键驱动程序的使用按键、…

django项目中settings.py文件中路径设置问题

2019独角兽企业重金招聘Python工程师标准>>> 首先&#xff0c;__file__表示当前模块的名字。 将下列代码写入os.path.py文件中&#xff0c;存放在桌面上 """ import os print __file__ """ win R 开启一个 CMD&#xff0c;使用pytho…

Linux LCD 驱动实验

目录Linux 下LCD 驱动简析1 Framebuffer 设备LCD 驱动简析硬件原理图分析LCD 驱动程序编写运行测试LCD 屏幕基本测试设置LCD 作为终端控制台LCD 背光调节从LCD自动关闭解决方法LCD 是很常用的一个外设&#xff0c;在裸机篇中我们讲解了如何编写LCD 裸机驱动&#xff0c;在Linux…

一个老兵的linux学习和面试经验分享

特别说明&#xff1a;本文为约9个月前老男孩linux培训内部师兄给师弟的经验分享&#xff0c;经过该同学同意&#xff0c;特此分享给所有博友。学习和面试经验分享大家好&#xff0c;非常高兴能在这里给大家分享学习和面试的经验&#xff0c;同时也非常感谢老男孩老师给我这次机…

Linux RTC 驱动实验

目录Linux 内核RTC 驱动简介I.MX6U 内部RTC 驱动分析RTC 时间查看与设置RTC 也就是实时时钟&#xff0c;用于记录当前系统时间&#xff0c;对于Linux 系统而言时间是非常重要的&#xff0c;就和我们使用Windows 电脑或手机查看时间一样&#xff0c;我们在使用Linux 设备的时候也…

opencv及相机相关6

下午调试了下&#xff0c;现在可以实现在arm板上打开相机并实时显示&#xff0c;但是人脸检测暂时还没有实现&#xff0c;猜想是因为opencv的原因。明天接着调试。今天整明白一件事&#xff0c;首先在linux系统下&#xff0c;g编译器当cpp文件较少时&#xff0c;编译程序时需要…

Linux I2C 驱动实验

目录Linux I2C 驱动框架简介I2C 总线驱动I2C 设备驱动I2C 设备和驱动匹配过程I.MX6U 的I2C 适配器驱动分析I2C 设备驱动编写流程I2C 设备信息描述I2C 设备数据收发处理流程硬件原理图分析实验程序编写修改设备树AP3216C 驱动编写编写测试APP运行测试编译驱动程序和测试APP运行测…

NXP(I.MX6uLL)DDR3实验——DDR3重要时间参数、时钟配置与原理图简析

目录DDR3 内存时间参数传输速率tRCD 参数CL 参数AL 参数tRC 参数tRAS 参数I.MX6U MMDC内存控制器简介MMDC内存控制器简介MMDC内存控制器信号引脚MMDC内存控制器时钟源ALPHA开发板核心板DDR3L原理图DDR3 内存时间参数 大家在购买DDR3 内存的时候通常会重点观察几个常用的时间参…

[elk]elasticsearch dsl语句

例子1 统计1&#xff0c;有唱歌兴趣的 2&#xff0c;按年龄分组 3&#xff0c;求每组平均年龄 4,按平均年龄降序排序 sql转为dsl例子 # 每种型号车的颜色数 > 1的 SELECT model,COUNT(DISTINCT color) color_count FROM cars GROUP BY model HAVING color_count > 1 ORDE…

NXP(I.MX6uLL)DDR3实验——DDR3初始化、校准、超频测试

DDR3L 初始化与测试ddr_stress_tester简介(DDR压力测试工具)DDR3L驱动配置DDR3L校准DDR3L超频测试DDR3L驱动总结ddr_stress_tester简介(DDR压力测试工具) NXP 提供了一个非常好用的DDR 初始化工具&#xff0c;叫做ddr_stress_tester。此工具已经放到了开发板光盘中&#xff0c…

RGBLCD显示实验————复习到这

目录LCD 和eLCDIF 简介LCD 简介eLCDIF 接口硬件原理分析实验程序编写编译下载验证编写Makefile 和链接脚本编译下载LCD 液晶屏是常用到的外设&#xff0c;通过LCD 可以显示绚丽的图形、界面等&#xff0c;提高人机交互的效率。I.MX6U 提供了一个eLCDIF 接口用于连接RGB 接口的液…

unity 里调试native code

因项目需要&#xff0c;需要调试dll工程代码。 把生成的debug dll和pdb拷贝进unity的plugins工程&#xff0c;遇到 断点无法进入&#xff0c;修改下调试信息格式&#xff0c;OK。 转载于:https://www.cnblogs.com/marcher/p/10191521.html

将自己写的windows服务加入到windows集群中

最近发现windows集群能进行很多自定义&#xff0c;比如在集群中加入自己编写的服务。 能自定义的可不少&#xff0c;截个图&#xff1a; 本次演示中&#xff0c;只想用“通用服务”这个类型。 先列下步骤编写一个记录时间的Windows服务&#xff0c;这个服务会每隔1秒钟写入本地…

RTC实时时钟实验(低功耗、纽扣电池供电)

目录I.MX6U RTC 简介硬件原理分析实验程序编写修改文件MCIMX6Y2.h编写实验程序编译下载验证编写Makefile 和链接脚本编译下载实时时钟是很常用的一个外设&#xff0c;通过实时时钟我们就可以知道年、月、日和时间等信息。因此在需要记录时间的场合就需要实时时钟&#xff0c;可…

Python(21)_input用户交互

name input("请输入你的名字&#xff1a;") age input("请输入你的年龄&#xff1a;") print("我的名字是&#xff1a;"name" 年龄是&#xff1a;"age) #print(name) #print(age) 这是在本地调试的结果。因为程序是在远程服务器上执…

多点电容触摸屏实验

目录多点电容触摸简介硬件原理分析实验程序编写编译下载验证编写Makefile 和链接脚本编译下载随着智能手机的发展&#xff0c;电容触摸屏也得到了飞速的发展。相比电阻触摸屏&#xff0c;电容触摸屏有很多的优势&#xff0c;比如支持多点触控、不需要按压&#xff0c;只需要轻轻…

博客园自动添加版权说明,自动添加文章链接

功能&#xff1a; 1.给每一篇文章开头加上版权说明&#xff1b; 2.自动获取当前文章地址&#xff1b; 3.做了装饰。 将以下代码放在页首Html代码内即可&#xff1a; <script type"text/javascript"> var setMyBlog {setCopyright: function() {//设置版权信息…