标签归档:虚拟磁盘

Ubuntu VMware虚拟机磁盘压缩

Linux虚拟机里打开终端(Term)输入
sudo /usr/bin/vmware-toolbox-cmd disk list 查看磁盘挂载点,然后执行
sudo /usr/bin/vmware-toolbox-cmd disk shrink / (磁盘挂载点),不清楚的用户可以直接执行
sudo /usr/bin/vmware-toolbox-cmd disk shrinkonly 压缩所有的磁盘,然后会弹出一个
“正在压缩磁盘 D:\Virtual Machines\Ubuntu\Ubuntu.vmdk的对话框,压缩需要很长时间。

在命令行中输入vmware-toolbox启动该功能
首先应确保客户机已经安装VMware Tools工具软件,安装:$ sudo apt-get install open-vm-toolbox

在图形模式下:$ sudo vmware-toolbox (以管理员身份运行才能使用shrink功能)

在命令模式下:$ sudo vmware-toolbox-cmd disk shrink /

如果虚拟机有多个硬盘,sudo vmware-toolbox-cmd disk shrink 后面的参数作为选择硬盘的。具体可参见 $ vmware-toolbox-cmd help disk

问题:安装了open-vm-toolbox后,出现了vmware的文件共享功能不能用,其他功能没检查。

原因:网上查阅相关资料,知道是因为原本安装的vmware tools与open-vm-toolbox冲突了。

解决:使用完open-vm-toolbox后,将其卸载,apt-get remove open-vm-toolbox。并重安装vmware-tools。

Windows 7设置由VHD启动系统

VHD Native Boot作为Windows 7和Windows Server 2008 R2新增重要功能之一,它支持系统直接从VHD启动。

1. 说明

系统要求:Windows 7 Enterprise 或 Ultimate版,其它版本不支;Windows Server 2008 R2 除 Foundation Edition版本不支持外,其它版本都支持

磁盘要求:系统必须有两个分区,System分区必须有Windows 7 Boot environment Files和BCD存储。如果VHD文件类型为动态扩展,必须确保磁盘有足够的磁盘空间。最多支持挂接 512 个VHD文件。

另外,从VHD启动的系统,不支持系统休眠和Over SMB 共享;保存VHD文件的分区不支持Bit-locker加密,VHD文件的父分区不支持Volume Snaphot功能;VHD不能配置为动态磁盘,也不支持建立软件Raid。相比物理硬盘,VHD没有CACHE,所以在写数据时,VHD硬盘相比物理硬盘有些差异,但读性能基本上和物理硬盘相近。

2. 必备工具

(1) bcdboot - bcd 启动文件创建和修复工具。

bcdboot.exe 命令行工具用于将关键启动文件复制到系统分区以及创建新的系统 BCD 存储。

bcdboot <source> [/l <locale>] [/s <volume-letter>] [/v] [/m [{OS Loader ID}]]

source——指定 windows 系统根目录的位置。

/l    ——指定在初始化 BCD 存储时使用的可选区域设置参数。默认值为“简体中文”。

/s   ——指定一个可选的卷号参数,该参数用于指定要将启动环境文件复制到的目标系统分区。默认值为固件标识的系统分区。

/v   ——启用详细模式。

/m   ——如果提供了操作系统加载器 GUID,则此选项可以将给定的加载器对象与系统模板合并起来,以产生可启动条目。否则,只合并全局对象。

(2) Bcdedit

Bcdedit.exe 命令行工具用于修改启动配置数据存储。启动配置数据存储包含启动配置参数并控制操作系统的启动方式。

(3) diskpart

磁盘分区管理工具。在本例中,它用来在命令行状态产生VHD文件,分区,格式化等

(4) imagex

WIM映像管理工具,它包含在微软AIK工具包中。本例中,用它来释放安装映像Install.WIM文件到VHD文件。

(5) Windows Deployment Services部署服务

3. 部署

用VHD启动计算机,有以下两种场景,一是将VHD部署在已有OS的计算机上,二是裸机的部署。两者的最大区别是对裸机,由于硬盘上没有OS,也就没有Windows 7的启动文件和MBR,所以必须首先产生一个系统分区,并使用Bcdboot将Windows 7启动文件写入这个分区;同时也必须产生一个主分区,用来存放VHD文件。对于在已有OS的计算机上部署,主要是要产生VHD文件,并将Windows 7或Windows 2008 R2映像释放到VHD硬盘,并使用BCDEDIT工具增加启动项目。

由于VHD文件有动态,固定,差异这三种类型,为了保证性能,推荐使用固定尺寸大小的VHD文件。

在已有OS的计算机上部署

实验环境:使用Microsoft Virtual Server 2005 SP1产生一台虚拟机Windows 7并安装好WINDOWS 7 7600操作系统和AIK工具包,这台虚拟机有两块虚拟硬盘,一块c:,已安装好Windows 7;另一块e:,用来产生VHD文件;光驱为D:

启动计算机,进行如下操作(注意以下操作均以管理员BILL.xu进行操作)

(1) 以管理员身份进入命令提示符状态,运行DISKPART

(2) 依次输入以下命令:

Create vdisk file=e:\win2007.vhd maximum=10000 type=fixed(在e盘产生名为win2007.vhd,大小为10000MB,类型为固定尺寸的VHD硬盘),等待一段时间完成。

Select vdisk file=e:\win2007.vhd(选择e:\win2007.vhd磁盘文件)

Attach vdisk(连接到虚拟磁盘文件)

Create Partition Primary(产生主分区)

Assign Letter R(分配盘符为R)

Format Quick Fs=ntfs(以NTFS文件系统快速格式磁盘),此时在我的电脑会多出一块盘符为R的硬盘。

(3) 打开虚拟服务器管理网站,编辑虚拟机Windows 7设置,在光驱中加载windows 7安装光盘ISO文件。

(4) 以管理员身份运行AIK工具包中的Deployment Tools Command Prompt,运行以下命令

imagex /info d:\sources\install.wim(显示安装映像文件的信息,主要是查找映像文件中各个版本的image index号)

imagex /apply d:\sources\install.wim 5 r:\(将安装映像中image index=5映像释放到r:盘,即释放到VHD文件上,image index=5这旗舰版),等待完成。

(5) 回到第二步的窗口,输入以下命令

detach vdisk(分离虚拟磁盘文件)

exit(退出DISKPART命令)

(6) 在命令提示符状态下,输入以下命令

bcdedit /copy {current} /d "Starting From VHD"(编辑BCD数据库,将{current}复制为副本,注释为Starting From VHD。执行后会返回新项目的GUID)。在本操作中返回的GUID为 {91efbc47-7796-11de-8788-b469c8eae731}

bcdedit /set {91efbc47-7796-11de-8788-b469c8eae731} device vhd=[e:]\win2007.vhd(编辑BCD数据库,修改guid为{91efbc47-7796-11de-8788-b469c8eae731}的device值修改为[e:]\win2007.vhd,注意[])

bcdedit /set {91efbc47-7796-11de-8788-b469c8eae731} osdevice vhd=[e:]\win2007.vhd

bcdedit /set {91efbc47-7796-11de-8788-b469c8eae731} detecthal on(允许启动时硬件抽像层检测)完成后,将e:\win2007.vhd备份到其它位置,备用。

(7)重新启动计算机,选择“Starting From VHD”,出现安装界面,安装操作系统,完成。

在裸机上的部署

实验环境:使用Microsoft Virtual Server 2005 SP1产生一台虚拟机Win7VHD,一块硬盘c:,光驱为D:。

(1) 打开虚拟服务器管理网站,编辑虚拟机Win7VHD设置,在光驱中加载WINPE的ISO文件。WINPE光盘的ISO文件可以在装好AIK的文件夹下找到。

(2) 用WINPE光盘启动计算机,选择命令提示符

(3) 依次输入以下命令

create partition primary size=200

format quick fs=ntfs

assign letter=s

active

产生个尺寸大小为200M的文件,以NTFS格式化,并指定盘符为S,激活这个分区

create partition primary

format quick fs=ntfs

assign letter=c

exit

将其它的空间产生一个主分区,以NTFS格式化这个分区,分配盘符为C。

(4) 将我们上例中第6步产生的备份的文件复制到c盘

(5) 在命令提示符状态使用Diskpart,连接虚拟磁盘文件win2007.vhd

Diskpart

select vdisk file=c:\win2007.vhd

attach vdisk

exit

(6) cd f:\windows\system32  (F:为虚拟磁盘文件加载后产生的盘符)

bcdboot f:\windows /s s: 将系统文件复制到系统盘(即前面产生200M的系统分区)

(7) 以硬盘启动计算机,完成安装。

使用Qemu-img管理虚拟机磁盘镜像(创建虚拟机,虚拟机快照)

一台虚拟机的核心就是一个磁盘镜像,这个镜像可以理解成虚拟机的磁盘,里面有虚拟机的操作系统和驱动等重要文件。本文主要介绍创建虚拟机的一般过程。

创建虚拟机镜像

 

要在一台host上跑起一个虚拟机一般需要两个步骤:

第一步:创建虚拟机镜像

qemu-img create -f raw /images/vm1.raw 8G

qmeu-img创建的镜像是一个稀疏文件,也就是说刚创建出来的文件并没有8G,它会随着数据的增多慢慢增加,直到8G

 

第二步:启动虚拟机

kvm /imges/vm1.raw

运行结果: 因为镜像里面没有任何内容,所以提示找不到可引导设备。

点击查看原图

 

使用qemu-img管理镜像



 

qemu-img基本命令


 

上节介绍了使用qemu-img创建镜像,这一节将会介绍qemu-img在镜像管理上的强大功能。

qemu-img有很多命令,包括下面常用的,当然qemu-img -h你懂得。

info

查看镜像的信息

create

创建镜像

check

检查镜像

convert

转化镜像的格式,(raw,qcow ……)

snapshot

管理镜像的快照

rebase

在已有的镜像的基础上创建新的镜像

resize

增加或减小镜像大小

 创建镜像


 

qemu-img create -f <fmt> -o <options> <fname> <size>

 举例:

qemu-img create -f raw -o size=4G /images/vm2.raw

 

hzgatt@hzgatt:~/images$ ll total 0-rw-r--r-- 1 hzgatt hzgatt 4.0G  6月 29 14:11 vm2.rawhzgatt@hzgatt:~/images$ ll -s total 00 -rw-r--r-- 1 hzgatt hzgatt 4.0G  6月 29 14:11 vm2.raw

 

hzgatt@hzgatt:~/images$ qemu-img info vm2.raw 
image: vm2.rawfile format: raw
virtual size: 4.0G (4294967296 bytes)
disk size: 0

 

虽然ls中看到文件的大小是4G,但是实际上磁盘大小是0。这就是稀疏文件

 

 

转化


将一个镜像文件转化为另外一种格式,qemu-img支持的格式可以看qemu-img -h最后一行。

Supported formats: vvfat vpc vmdk vdi sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd dmg tftp ftps ftp https http cow cloop bochs blkverify blkdebug

 

转化命令:

qemu-img convert -c -f fmt -O out_fmt -o options fname out_fname

 

-c:采用压缩,只有qcow和qcow2才支持

-f:源镜像的格式,它会自动检测,所以省略之

-O 目标镜像的格式

-o 其他选先

fname:源文件

out_fname:转化后的文件

看例子:

hzgatt@hzgatt:~/images$ qemu-img convert -c -O qcow2 vm2.raw vm2.qcow2

 

hzgatt@hzgatt:~/images$ ll -s total 136K
   0 -rw-r--r-- 1 hzgatt hzgatt 5.0G  6月 29 13:55 vm1.raw
136K -rw-r--r-- 1 hzgatt hzgatt 193K  6月 29 14:22 vm2.qcow2
   0 -rw-r--r-- 1 hzgatt hzgatt 4.0G  6月 29 14:11 vm2.raw
hzgatt@hzgatt:~/images$ qemu-img info vm2.qcow2 
image: vm2.qcow2file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 136K
cluster_size: 65536

 

如果想看要转化的格式支持的-o选项有哪些,可以在命令末尾加上 -o ?

 

增加减少镜像大小


注意:只有raw格式的镜像才可以改变大小

hzgatt@hzgatt:~/images$ qemu-img resize vm2.raw +2GB

 

快照


查看快照

qemu-img snapshot -l /images/vm2.qcow2

注意:只有qcow2才支持快照

打快照

qemu-img snapshot -c booting vm2.qcow2

 

举例:

hzgatt@hzgatt:~/images$ qemu-img snapshot -c booting vm2.qcow2 hzgatt@hzgatt:~/images$ qemu-img snapshot -l vm2.qcow2 
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK1         booting                   0 2012-06-29 14:35:04   00:00:00.000

 

从快照恢复:

qemu-img snapshot -a 1 /images/vm2.qcow2

然后从kvm启动这个虚拟机,会发现虚拟机又在打快照时的状态了

 

删除快照:

qemu-img snapshot -d 2 /images/vm2.qcow

 

 

使用派生镜像(qcow2)


    当创建的虚拟机越来越多,并且你发现好多虚拟机都是同一个操作系统,它们的区别就是安装的软件不大一样,那么你肯定会希望把他们公共的部分提取出来,只保存那些与公共部分不同的东西,这样镜像大小下去了,空间变多了,管理也方便了。派生镜像就是用来干这事的!

首先看一个原始镜像

hzgatt@hzgatt:~/images$ qemu-img info vm3_base.raw 
image: vm3_base.rawfile format: raw
virtual size: 2.0G (2147483648 bytes)
disk size: 2.0G

现在我们新建一个镜像,但是派生自它

hzgatt@hzgatt:~/images$ qemu-img create -f qcow2 vm3_5.qcow2 -o backing_file=vm3_base.raw 5G Formatting 'vm3_5.qcow2', fmt=qcow2 size=5368709120 backing_file='vm3_base.raw' encryption=off cluster_size=65536

 

hzgatt@hzgatt:~/images$ ll-rw-r--r-- 1 hzgatt hzgatt 193K  6月 29 15:00 vm3_5.qcow2-rw-r--r-- 1 hzgatt hzgatt 2.0G  6月 29 14:51 vm3_base.raw 

 

 

 ^_^,这个镜像才136K,够省了吧。DRY永远的真理啊!

现在我们在vm3_5.qcow2上打了很多安全补丁,然后发现我又想在vm3_5.qcow2上派生新的虚拟机,o(∩∩)o...哈哈,这下怎么办呢?

hzgatt@hzgatt:~/images$ qemu-img convert -O raw vm3_5.qcow2 vm3_base2.raw

 

hzgatt@hzgatt:~/images$ qemu-img info vm3_base2.raw 
image: vm3_base2.rawfile format: raw
virtual size: 5.0G (5368709120 bytes)
disk size: 592M

 

这个转化将会将vm3_5和base合并,生成新的vm3_base2.raw,然后你就可以继续无穷无尽的派生之旅了!

 

VHD虚拟磁盘格式结构

VHD(Microsoft Virtual Hard Disk)是一种虚拟磁盘的实现方式,即通过文件来模拟物理磁盘的方式来存储数据。如同正常的物理磁盘一样,可以分区,格式化等。
VHD最早由Connectix公司定义,之后Connectix公司被Microsoft 收购。
VHD格式用于Microoft Virtual PC 、Microsoft Windows Server 2008 R2和Microsoft Windows 7,包括hypervisor为基础的虚拟化技术- Hyper-V。
VHD也用于xen虚拟化,目前也是xen上虚拟磁盘的默认标准。

 

Hard disk footer fields

Size (bytes)

Cookie

8

Features

4

File Format Version

4

Data Offset

8

Time Stamp

4

Creator Application

4

Creator Version

4

Creator Host OS

4

Original Size

8

Current Size

8

Disk Geometry

4

Disk Type

4

Checksum

4

Unique Id

16

Saved State

1

Reserved

427