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

微软推出的虚拟硬盘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

虚拟硬盘VHD的程式化挂载方式相关推荐

  1. 指定计算机上虚拟磁盘位置,管理虚拟硬盘 (VHD)

    管理虚拟硬盘 (VHD) 10/12/2017 本文内容 适用于: Windows 10.Windows 8.1.Windows Server(半年频道).Windows Server 2016.Wi ...

  2. 自动挂载服务器vhd,VHD虚拟硬盘创建方法以及自动挂载方式

    在目前的磁盘系统下,对于大量小文件存储和管理,是一件非常头疼的事情,比如网站.设计资料.素材库,通常情况下,10g的文件都会有几十万个文件,这严重拖慢系统读取写入的速度,而且在转移硬盘拷贝时,速度让人 ...

  3. Linux怎么删除虚拟硬盘,2017.05.10 qemu-nbd 全自动挂载/卸载 虚拟硬盘中所有可用分区 的 脚本...

    #!/bin/sh # 通过 qemu-nbd 实现 vhd 的挂载 ,事先需要安装 qemu-utils , name:vhd5.sh # 需要事先 sudo apt-get install qem ...

  4. vhd虚拟硬盘作用_如何从VHD(虚拟硬盘)引导和安装Windows 8 Consumer Preview的指南

    vhd虚拟硬盘作用 So Windows 8 Consumer Preview is out today. You probably read the Windows 8 Consumer Previ ...

  5. Vm挂载虚拟硬盘(傻瓜式教程)

    Vm挂载虚拟硬盘(傻瓜式教程) 第一步:添加虚拟磁盘 打开vm,单机选择红帽的系统 编辑虚拟机设置 点击下面的添加 选择硬盘然后下一步 如果没有特殊的磁盘格式要求就默认推荐就好了 使用物理硬盘:需要一 ...

  6. 虚拟磁盘类型_一起来了解一下Window10系统中虚拟硬盘的相关操作

    大家好,我是波仔欢迎大家又来和我一起分享电脑知识,我们今天来分享一下虚拟硬盘部分的一些相关的操作. 虚拟硬盘 VHD格式的虚拟硬盘最开始应用在微软的Virtual PC和Virtual Server中 ...

  7. 硬盘引导服务器,Windows 7实战之为本机引导部署虚拟硬盘

    [IT168 特别策划]6000名IT精英齐聚一堂,与来自微软产品核心研发团队及各个领域数百位顶级专家面对面交流,Tech.Ed 2009盛典召开在即!IT168带您一起体验丰富多彩的活动和内容安排, ...

  8. 指定计算机上的虚拟硬盘,初始化新加的虚拟硬盘

    初始化新加的虚拟硬盘 (2015-01-06 10:04:58) 标签: parallels 初始化新虚拟硬盘 在Parallels Desktop中,将新的空白虚拟硬盘添加到虚拟机配置后,对于安装在 ...

  9. 【VirtualBox】VirtualBox使用现有的虚拟盘文件(如VHD)创建虚拟机时,报错:打开虚拟硬盘失败,“UUID already exist”的解决方法

    ###0.问题描述 使用现有的虚拟盘文件(如VHD)创建虚拟机时,报错:打开虚拟硬盘失败,"UUID already exists"的错误. ###1.参考博客 https://w ...

最新文章

  1. 三维点云对应关系聚合算法的性能评价
  2. python 读取音频文件(mp3,wav)时间的两种方法
  3. MongoDB的介绍和使用场景
  4. optee中TA的堆的分配
  5. FTP服务器搭建下的主动模式和被动模式
  6. Deltix Round, Spring 2021 (open for everyone, rated, Div. 1 + Div. 2)
  7. 机试题:地图定位、拍照并显示、录制视频并播放
  8. POJ1209 UVA158 Calendar题解
  9. oracle删除数据库中的所有数据的拼接语句
  10. Redis应用实践:小红书海量Redis存储之道
  11. Python人工智能入门(修订版)
  12. mysql中哪一个储存逻辑型_《VisualFoxPro》2018秋华东年季学期在线作业(一)二三...
  13. 4部网页配色电子书库之第3部——网页配色方案速查表
  14. 小甲鱼python教程视频怎么样-为什么我看完小甲鱼的python视频还是不会写呢?
  15. 计算机音乐谱大全好汉歌,吉他曲谱好汉歌_《好汉歌》的吉他乐谱
  16. 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-21期...
  17. 乐学python_乐学Python-中国大学mooc-试题题目及答案
  18. 拼多多:item_search-根据关键词取商品列表接口,拼多多关键词搜索API接口,拼多多上货API接口,拼多多API接口
  19. 网页3D编辑器Stone案例:房地产数字沙盘
  20. 【硬件运维●倚天剑】IPMITOOL解决服务器底层维护难题

热门文章

  1. 第96:SVM简介与简单应用
  2. 爬取网页的通用代码框架
  3. mysql_表_操作
  4. [转]Unity-移动设备可用的压缩解压缩源码
  5. Swift-setValuesForKeysWithDictionary
  6. yo angualr-fullstatck 项目打包部署
  7. flex中dispatchEvent的用法(自定义事件) .
  8. 用PHP获取土豆网视频FLV地址
  9. WAP开发笔记(1)-.net移动页面中html控件不能直接显示的解决
  10. [摘抄]MySQL数据库系统的常规管理介绍