一种基于虚拟机的高效磁盘I_O特征分析方法_沈玉良

一种基于虚拟机的高效磁盘I_O特征分析方法_沈玉良
一种基于虚拟机的高效磁盘I_O特征分析方法_沈玉良

ISSN 1000-9825, CODEN RUXUEW E-mail: jos@https://www.360docs.net/doc/de6832692.html,

Journal of Software, Vol.21, No.4, April 2010, pp.849?862 https://www.360docs.net/doc/de6832692.html, doi: 10.3724/SP.J.1001.2010.03492 Tel/Fax: +86-10-62562563

? by Institute of Software, the Chinese Academy of Sciences. All rights reserved.

?

一种基于虚拟机的高效磁盘I/O特征分析方法

沈玉良1,2+, 许鲁1

1(中国科学院计算技术研究所,北京 100190)

2(中国科学院研究生院,北京 100049)

Efficient Disk I/O Characteristics Analysis Method Based on Virtual Machine Technology

SHEN Yu-Liang1,2+, XU Lu1

1(Institute of Computing Technology, The Chinese Academy of Sciences, Beijing 100190, China)

2(Graduate University, The Chinese Academy of Sciences, Beijing 100049, China)

+ Corresponding author: E-mail:shenyuliang@https://www.360docs.net/doc/de6832692.html,, https://www.360docs.net/doc/de6832692.html,

Shen YL, Xu L. Efficient disk I/O characteristics analysis method based on virtual machine technology.

Journal of Software, 2010,21(4):849?862. https://www.360docs.net/doc/de6832692.html,/1000-9825/3492.htm

Abstract: Disk I/O may be the bottleneck in computer systems because of the mechanism characters in disk

system. In order to tune the system performance effectively, the collection of the disk I/O workload characteristics

will be the essential step for the performance optimization. Compared with other I/O characteristics collection

methods, this paper presents an on-line I/O characteristics analysis method based on Xen 3.0 virtual machine system.

In virtual machine environments, this method can be transparent to the unmodified operating system. With this

method, several essential I/O characteristics metrics can be collected, such as disk I/O block size, I/O latency, I/O

arrival interval, I/O spatial locality statistics, I/O time locality statistics and the I/O operation hotspot distribution.

Through the testing and analysis, this method is found to have little system overhead and impact on the application

system I/O performance. In addition, the I/O characteristics analysis results are demonstrated on the large file copy

workload and the Filebench benchmark workload generated by the filemicro and varmail personalities.

Key words: virtual machine; disk I/O characterization; performance optimization; on-line I/O analysis; file

system

摘要: 由于磁盘系统的机械运动本质,磁盘系统I/O往往会成为计算机系统的性能瓶颈.为了有效地提高系统性

能,收集和分析应用系统的磁盘I/O特征信息将成为性能优化工作的重要基础.与以往I/O特征分析方法不同,给出

了一种基于Xen 3.0虚拟机系统的磁盘I/O特征在线分析方法.在虚拟机环境下,该磁盘I/O特征采集方法可以透明

地应用于任意无须修改的操作系统.该方法可以高效地在线采集多种基本I/O特征数据,其中包括:磁盘I/O块大小、

I/O延迟、I/O时间间隔、I/O空间局部性、时间局部性以及磁盘I/O操作热点分布.通过测试和分析,该在线I/O分

析方法有着较小的系统开销,并且对应用系统I/O性能的影响很小.此外,还给出了在大文件拷贝、基于Filebench的

filemirco和varmail等工作负载下的I/O特征分析结果.

? Supported by the National High-Tech Research and Development Plan of China under Grant No.2007AA01Z184 (国家高技术研究

发展计划(863)); the National Basic Research Program of China under Grant No.2004CB318205 (国家重点基础研究发展计划(973))

Received 2008-03-07; Revised 2008-07-02; Accepted 2008-10-09; Published online 2009-06-05

850 Journal of Software软件学报 V ol.21, No.4, April 2010

关键词: 虚拟机;磁盘I/O特征;性能优化;在线I/O分析;文件系统

中图法分类号: TP316文献标识码: A

目前,与CPU、内存技术的快速发展相比,存储系统性能增长速度相对较慢,并且成为计算机系统的主要性能瓶颈之一.因此,应用系统整体性能的表现越发地依赖于存储系统的I/O性能.而且不同的存储系统配置有可能直接影响应用系统的性能,比如通过优化文件系统的Layout可以提高系统读取性能[1].那么,研究和分析应用系统的磁盘I/O访问特征就成为存储系统优化的重要基础.

当然,我们可以从应用本身到物理设备的多个层次获取应用的I/O行为特征.然而无论在应用程序中,还是在操作系统驱动程序中收集应用系统的I/O行为,我们都需要应用程序提供商或操作系统提供相关的支持.因此,这些磁盘I/O特征分析方式都只适用于特定的应用或操作系统.同时,以往很多磁盘I/O特性数据收集和分析方法主要是在用户操作系统中插入I/O操作跟踪程序,或者在系统平台加入I/O分析硬件设备.目前,许多商业操作系统没有提供相应的I/O操作跟踪工具,并且,相应的硬件I/O分析设备又相当少见.从应用环境来看,在操作系统中加入I/O操作跟踪程序的方法往往只适合于开发测试系统.在生产环境中,企业用户通常会担心由I/O操作跟踪程序可能引入的安全和稳定性问题.

近年来,虚拟机技术成为系统研究和应用的热点.目前,虚拟机技术在开发调试、服务器整合、高可用技术以及系统容灾等方面有着广泛的应用前景.在虚拟机环境中,虚拟机系统使用软件技术来模拟磁盘I/O访问接口.因此,我们可以在虚拟机软件中提供I/O操作分析程序.这样,它就可以独立于用户操作系统运行,而且适用于各种用户操作系统和应用环境.值得一提的是,应用系统提供商通常不会提供数据I/O的特征信息.这是因为,即便是同一应用系统,不同的用户使用方式和系统设置也可能会导致其I/O访问特征发生变化.另外,不同版本的应用系统往往需要不同版本的I/O特征分析程序.由此我们可以看出,基于虚拟机系统的磁盘I/O特征分析将会具有应用系统无关性和广泛的适应性等优势.

存储系统的优化工作需要的往往不是I/O操作Trace,而是磁盘I/O行为的特征数据,比如I/O块的尺寸分布、时间局部性信息、空间局部性信息以及I/O延迟分布等信息.这些特征量往往是系统优化和存储系统参数调整的重要依据.如果能够在线获取磁盘I/O的特征信息,那么不仅可以方便系统管理员的优化工作,而且可以为自动调整系统参数提供支持.因此,本文将着重研究基于虚拟机系统的高效磁盘I/O特征在线分析方法.

针对上述情况,本文设计和实现了基于开源虚拟机Xen的在线磁盘I/O特性分析方法.该方法可以有效地在线统计磁盘I/O块大小分布、I/O操作间隔分布情况、I/O延迟、I/O操作热点分布以及I/O访问的空间/时间局部性等信息.

本文第1节介绍Xen虚拟机系统中设备I/O访问的系统结构.第2节描述基于虚拟机的磁盘I/O特性分析方法的设计和实现.第3节给出针对本I/O特征分析方法的测试结果.随后,利用本文的分析方法,我们针对大文件拷贝、Filebench测试程序进行测试实验,而且依据磁盘I/O特征分析结果给出相关分析评价.第4节介绍相关研究工作.第5节给出结论和未来的工作方向.

1 虚拟机系统Xen的系统结构

本文以Xen 3.0.5作为分析虚拟机磁盘访问模式和分析磁盘I/O特征数据的系统实验平台.在Xen中,用户操作系统对磁盘等I/O设备访问的系统结构如图1所示.在Xen虚拟机系统中,Dom0负责虚拟化管理和I/O设备模拟等工作.同时,用户应用程序和操作系统运行在HVM(hardware virtual machine) Domain之内.用户操作系统通过其磁盘和网络设备驱动程序访问虚拟的磁盘和网络设备.这时,Xen的Hypervisor可以截获HVM Domain 对相关I/O端口和内存映射的I/O区域的访问.然后,Xen虚拟机软件利用事件传递通道将访问请求发送给Dom0中的I/O设备模拟程序.在I/O设备模拟程序中,系统可以模拟磁盘IDE(integrated drive electronics)接口或SCSI(small computer system interface)接口.I/O设备模拟程序会根据I/O访问请求内容访问本地磁盘设备上或者网络存储设备上的数据.最后,I/O设备模拟程序会把I/O请求的处理结果返回给HVM Domain.在Dom0中实

沈玉良 等:一种基于虚拟机的高效磁盘I/O 特征分析方法

851

现I/O 设备模拟机制的好处主要在于系统可以重复利用Dom0内核的设备驱动程序.从而不必像VMware ESX Server 那样,在虚拟机软件中实现多种I/O 设备的驱动程序.值得注意的是,Dom0中的磁盘设备虚拟化过程独立于用户操作系统,并且在用户空间实现.因此,我们选择在Dom0中的I/O 设备模拟程序中实现本文的磁盘I/O 特征分析机制.

HVM domain Dom0

Xen

hypervisor

Hardware platform

Fig.1 Architecture of I/O device emulation in Xen virtual machine system

图1 Xen 虚拟机系统中的I/O 设备模拟结构图

需要说明的是,虚拟机系统的I/O 虚拟化操作不可避免地增加了用户操作系统的磁盘I/O 访问路径和响应时间.比如:在物理平台上,用户操作系统通过I/O 端口可以直接访问硬件平台.而在Xen 系统中,用户操作系统对I/O 端口的访问会首先被Xen 虚拟机软件所截获.随后,相关的I/O 请求被转发给Dom0.然后,Dom0系统中的设备模拟程序处理该I/O 请求.最后,Xen 系统再把Dom0的处理结果返回给用户操作系统.由此可见,引入虚拟机软件后,磁盘I/O 操作的虚拟化开销是影响磁盘I/O 性能的主要因素.磁盘I/O 的虚拟化开销是虚拟机软件整体虚拟化开销的主要组成部分.此外,如果同一平台上多个虚拟机系统的磁盘I/O 请求落在相同的物理设备上,有可能导致更多更复杂的磁盘寻址操作产生.这样就会进一步增加磁盘I/O 响应时间并降低磁盘I/O 操作性能.

然而,虚拟机软件和硬件平台为用户操作系统提供了CPU 和内存的虚拟化支持,同时还进行了系统I/O 设备和总线的模拟.因此,用户操作系统本身无法检测和判断到其运行在虚拟机系统还是物理硬件平台之上.据此我们可以看出,虚拟机软件的引入对于用户操作系统磁盘I/O 性能的主要影响体现在增加了磁盘I/O 访问路径和相应时间上.

为了有效减小磁盘I/O 虚拟化的影响以及提高虚拟机系统的磁盘I/O 性能,我们可以在软、硬件两方面采用相关技术.在硬件方面,我们可以采用带有I/O 虚拟化支持的物理平台、高性能的SCSI 磁盘、RAID(redundant array of inexpensive disks)磁盘阵列技术或者更理想地采用SAN(storage area network)存储域网络进行数据集中存储.在软件技术方面,我们也有许多优化技术可以用来提高虚拟机系统的磁盘I/O 性能.比如在虚拟机软件内增加以内存或本地磁盘为介质的数据缓存机制,这样可以有效缩短磁盘I/O 响应时间和磁盘I/O 访问路径.同时,我们还可以通过分析和调整磁盘数据的分布来缩短虚拟机系统的磁盘寻址距离和时间.

对于各种软件方面的存储优化技术,我们都需要获取虚拟机系统的磁盘I/O 信息,尤其是典型的磁盘I/O 特征信息.随后,本文将着重介绍基于虚拟机系统的磁盘I/O 特征信息的在线获取方法.

2 磁盘I /O 特征数据的采集方法

如前一节所述,在Xen 中,HVM Domain 内的用户操作系统使用和访问虚拟的磁盘设备.此时,HVM Domain 看到的是标准的IDE 或SCSI 接口.用户操作系统可以像使用物理设备一样,通过标准的磁盘I/O 指令访问虚拟磁盘设备.Dom0中的I/O 设备模拟程序会截获来自HVM Domain 的磁盘设备I/O 访问请求.随后,I/O 设备模拟程序会进行相应的I/O 虚拟化处理.我们将在I/O 设备模拟程序中插入磁盘I/O 特征测量程序,并用其来获取磁盘I/O 特征数据.

852 Journal of Software软件学报 V ol.21, No.4, April 2010

2.1 磁盘I/O特征数据量

磁盘I/O特征数据的主要应用之一就是给系统性能优化提供依据.在此类应用中,往往并不需要精确记录每个磁盘I/O请求的相关信息,而是需要分析系统工作负载的磁盘I/O行为特性,如磁盘I/O数据块大小的分布情况、读写分布情况等.由于各I/O特征量的统计结果数据规模相对较小,我们就可以将I/O特征数据的统计结果以在线的方式呈现给用户.

为了便于统计磁盘I/O行为特征,我们把磁盘看成由扇区(sector)组成的一维数组.这样,每个I/O读写请求就是对数组中连续多个扇区的访问.

2.1.1 磁盘I/O读写分布

磁盘I/O的读写操作比例是最常见的I/O特征量,并且是优化存储系统性能的重要依据.读操作和写操作往往在同一个存储系统中有着不同的系统代价和优化方案.因此,我们会记录读写操作计数,并且分别记录读写操作的块大小、I/O延迟、I/O时间间隔、空间局部性信息、并发I/O数量以及I/O操作热点等信息.

2.1.2 磁盘I/O块大小

磁盘I/O的块大小分布是重要的磁盘I/O特征量之一.这是因为磁盘I/O块大小分布会影响存储系统的优化策略.比如,应用系统负载的I/O块大小往往决定磁盘RAID系统条带大小的优化设置[2].

为了有效记录磁盘I/O块大小的分布,我们创建了一个包含N block个元素的整数数组.每个数组元素负责记录磁盘I/O块大小落在一定范围内的磁盘I/O计数.每个数组元素所代表的范围是M个扇区.也就是说,数组的第i个元素负责记录磁盘I/O块大小在(i?1)×M和i×M个扇区之间的磁盘I/O操作计数.需要说明的是,数组的第N block个元素表示磁盘I/O块大小比(N block?1)×M个扇区大的磁盘I/O计数.系统管理员可以根据需要设置N block和M的大小.我们采用N block的默认设置为512,M的默认设置为8.

2.1.3 磁盘I/O延迟

磁盘I/O延迟是关系到存储系统性能的重要指标.I/O延迟的大小不仅取决于应用系统的I/O数量,而且可以反映出存储系统的忙闲程度.比如:在一个同时服务于其他应用系统的存储系统上,我们将会得到较长的I/O 延迟时间.

为了准确记录磁盘I/O延迟时间,我们以CPU周期数来记录每次I/O的起始和结束时间.那么,我们用每次I/O的结束时间减去其起始时间,就可以得到该次I/O请求的延迟时间.为了有效地在线统计磁盘I/O延迟,我们创建包含N latence个元素的整数数组.数组元素分别代表同等大小的连续时间区域.数组第i个值负责记录延迟时间刚好落在第i个时间区域内的I/O访问计数.

2.1.4 磁盘I/O时间间隔

磁盘I/O的时间间隔可以体现出应用系统I/O访问请求的频繁程度.我们同样以CPU周期数作为记录时间的基本单位.为了有效地在线统计磁盘I/O时间间隔,我们创建了包含N interval个元素的整数数组.每个数组元素代表同等大小的连续时间区域.数组第i个值负责记录磁盘I/O时间间隔刚好落在第i个时间区域内的I/O访问计数.

2.1.5 磁盘I/O的空间局部性信息

磁盘I/O的空间局部性特征是进行存储系统性能优化的重要依据之一.比如,数据访问的预读机制就是利用了磁盘I/O的空间局部性原理.我们把两次I/O请求的空间距离定义为前一次磁盘I/O请求的结束逻辑地址和后一次磁盘I/O请求的起始逻辑地址之差.我们把各磁盘I/O请求的空间距离记录在包含N space个元素的空间距离数组中.每个数组元素负责记录对应空间距离的I/O操作计数.由此可以看出,对于顺序访问的两个磁盘I/O请求之间的空间距离为1.空间距离为?BLOCK_SIZE+1,表示某I/O流中有连续的两个磁盘I/O请求访问同一起始数据块.

然而,磁盘I/O负载在多数情况下并不是单独的一个I/O顺序流.通常情况下,对磁盘的访问会是多个I/O流交叉在一起.为了在多个I/O流交织的情况下体现出各磁盘I/O流的空间局部性信息,我们定义了由L个逻辑块地址组成的数组,分别记录了L个最近访问过的结束逻辑块地址.当一个I/O请求到达时,我们首先在这L个结

沈玉良 等:一种基于虚拟机的高效磁盘I/O 特征分析方法

853

束逻辑块地址中线性查找与该I/O 请求起始地址最接近的逻辑地址.然后,计算该I/O 请求与此最接近的逻辑地址之间的空间距离,并根据结果增加空间距离数组中对应元素的访问计数.最后,我们把找到的结束逻辑地址更新为此次I/O 请求的结束逻辑地址.我们采用L 的默认值为16.这样,本磁盘I/O 空间局部性分析程序的时间复杂度为O (L ).

当少于L 条的顺序I/O 流交织在一起时,上述方法可以有效地显示出其空间局部性特征.这样,本方法就可以适用于应用系统中存在多条磁盘I/O 流的情况,并可以较好地展示磁盘I/O 的空间局部性特征. 2.1.6 磁盘I/O 的时间局部性信息

磁盘I/O 的时间局部性也是存储系统性能优化的重要指标.数据缓存系统的实现就是依赖于数据I/O 访问的时间局部性特性.数据缓存系统将刚访问过的I/O 数据暂存在高速设备中,以期其在短期内会被多次访问,从而提高系统性能.数据缓存是各种存储设备的重要性能优化机制.因此,磁盘I/O 访问的时间局部性特征信息将是系统管理员优化系统性能的重要依据.

经过简单分析我们看到,直接记录每个sector 访问时间的方法在空间上几乎是无法接受的.比如:假定每次I/O 的访问时间以32位来表示,则对于1TB 数据,我们在最坏情况下就至少需要8GB 的内存空间.为此,我们设计了一种节省内存空间的时间局部性特征获取方法,如图2所示.

Fig.2 Main data structure of time locality analysis for disk I/O

图2 磁盘I/O 时间局部性分析的数据结构示意图

正如图2所示,我们采用一个包含n 个元素的I/O block tree 指针数组来存储磁盘I/O 的近期访问情况.为了有效地保留磁盘I/O 访问信息,我们采用一个平衡二元查找树(I/O block tree)来记录一个大小为TIME _ INTERVAL 的时间段内的磁盘I/O 访问信息.这样,我们就可以用n 个I/O block tree 保留最近n 个TIME _ INTERVAL 时间段的磁盘I/O 信息.我们以一个大小为Bitmap _size 的I/O 块位图(I/O block bitmap)来记录一个I/O 块是否被访问.位图的某二进制位为1表示一个大小为Block _size 个扇区的数据块被访问过,否则表示未被访问过.这样,一个位图就可以表示一个大小为Bitmap _sectors 个扇区的连续对齐磁盘区域的访问情况,其中, Bitmap _sectors 的大小为Bitmap _size ×Block _size 个扇区.我们以该位图中所表示的数据块的最小扇区号作为该位图的标记(tag).在一个TIME _INTERVAL 内的所有位图信息以TAG 为关键字被组织成一个平衡二元查找树.如下面的算法1是磁盘I/O 请求到达时,本磁盘I/O 特征分析程序利用I/O block tree 来收集磁盘I/O 时间局部性信息的主要算法.其中值得说明的是,Block_size =1<

本I/O 时间局部性分析程序在最坏情况下的时间复杂度为O (k ×n ×log P ),其中,P 为整个磁盘空间内包含Bitmap _sectors 的个数,n 为磁盘I/O 请求访问数据块的数量,k 为I/O block tree 指针数组的大小.

算法1.

输入:I/O block tree 的指针数组io _tree ,当前I/O block tree 的索引值current , 磁盘I/O 请求访问的起始数据块uint 64_t sector _number ,

012

n n ?

854 Journal of Software 软件学报 V ol.21, No.4, April 2010

数据块数量uint 64_t sector _size

Procedure update _time _info (struct io _block _tree *io _tree ,uint 32_t current , uint 64_t sector _number ,uint 64_t sector _size )

bit _in _bitmap =sector _number >>Block _shift ; //表示在Bitmap 中磁盘I/O 请求访问的起始块号 bits _size =sector _size >>Block _shift ; //表示在Bitmap 中磁盘I/O 请求访问的二进制位的数量

if (sector _number %Bitmap _sectors +sector _size >Bitmap _sectors )

oversize =1; //表示该磁盘I/O 请求访问的数据块跨BITMAP 边界 else oversize =

0; //表示该磁盘I/O 请求访问的数据块在一个BITMAP 内

found =find _bitmap (io _tree [current ],sector _number );

//在current 指向的I/O block tree 中查找对应的BITMAP

if (found ==

NULL){ //没有找到

为current 查找树分配新的BITMAP,由found 保存; insert _bitmap (io _tree [current ],found ,sector _number ); //把新分配的BITMAP 插入到current 查找树 }

if (oversize

==1){ //在current 查找树中查找被访问的后一个BITMAP

found _next =find _bitmap (io _tree [current ],sector _number +Bitmap _sectors ); if (found _next

==NULL){ //没有找到对应的BITMAP

为current 查找树分配新的BITMAP,由found _next 保存;

insert _bitmap (io _tree [current ],found _next ,sector _number +Bitmap _sectors ); //把新分配的BITMAP 插入到current 查找树 } }

i =0;d =0; //初始化序列号i 和时间距离d while (i <=bits _size ){

if ((oversize ==1) && (bit _in _bitmap +i >Bitmap _size ))

found =found _next ;

//设置bit _in _bitmap +i 数据块在current 中的访问状态为1,并返回原值 origin =set _bit (found ,(bit _in _bitmap +i )%Bitmap _size );

if (origin

==

1){ //该数据块在current 中被访问过 continue; //继续下一个数据块

沈玉良等:一种基于虚拟机的高效磁盘I/O特征分析方法855

else {

next=current;

//next保留下一个需要查找的I/O block tree

do {

next=(next+1)%Array_size;

在next指向的I/O block tree中查找对应于bit_in_bitmap+i的二进制位;

若该二进制位的值为1,则get=1,否则get=0;

} while ((get==0) && (next!=current));

if (next==current){

//表示在所有保留的I/O block tree中都没有该数据块被访问过的信息

d=Array_size;

break; //直接设置d为最大值

}

}

tmp=distance(current,next,Array_size);

//计算找到数据块的I/O block tree和current之间的距离

d=d>tmp?d:tmp; //记录并保存最大的时间距离

}

io_count[d]++; //记录此次磁盘I/O的时间局部信息

End

此外,我们还设置了以TIME_INTERVAL为时间周期的定时处理函数.我们把I/O block tree指针数组看作一个循环数组来保存I/O信息.定时处理函数首先将current索引值减1,然后,清空current指向的I/O block tree,用来保存未来一个TIME_INTERVAL内的磁盘I/O访问信息.

在磁盘I/O的时间局部性信息采集中,我们没有区分磁盘I/O的读写操作.这主要是因为磁盘I/O读写操作之间往往也会出现时间局部性特征,比如,某个应用刚刚写过的数据块往往有可能在短期内被读取.

2.1.7 活跃磁盘I/O

我们把应用程序已经提交但没有完成的I/O请求称为活跃磁盘I/O.活跃磁盘I/O的数量在一定程度上反映了应用程序的并发度.例如:当应用程序采用异步I/O方式或者多线程的编程模型实现时,系统负载就可能同时产生较多的活跃I/O.为了有效记录活跃I/O数量信息,我们分别针对读操作和写操作设置了active_queue数组,并用其来记录系统内出现的活跃I/O数量.

2.1.8 磁盘I/O的热点探测

我们把磁盘看作一个由扇区组成的连续数组.然而,实际应用系统的磁盘I/O操作数并不会平均分布在整个扇区数组上.那么,探测和发现磁盘I/O热点可能为系统管理员或者应用系统开发人员的存储系统优化工作提供有效帮助.

由于系统磁盘空间往往会大于数百GB,若我们以单个扇区为单位记录磁盘I/O操作热点,就很有可能造成不必要的内存空间浪费.为了有效探测磁盘I/O的热点区域并节约磁盘I/O特征分析程序的内存空间,我们把整个磁盘空间映射到包含HOTSPOT_LEVEL个元素的整数数组.每个元素负责记录落在大小为HOTSPOT_UNIT 个连续扇区内的I/O访问次数.用户可以根据需要设置HOTSPOT_LEVEL或HOTSPOT_UNIT的大小.我们采用的默认设置是HOTSPOT_LEVEL为1 024或者HOTSPOT_UNIT为8 192.这样,一般情况下,磁盘I/O热点分析程序运行时的时间复杂度为O(1).

856 Journal of Software软件学报 V ol.21, No.4, April 2010

2.2 磁盘I/O特征采集程序的运行

本I/O特征分析程序可以在管理员的指令下在任意时刻启动或停止.而且,在统计磁盘I/O计数、磁盘I/O 块大小、磁盘I/O时间间隔、磁盘I/O活跃数量、I/O延迟时间等信息时,本程序的时间复杂度为O(1).同时,在分析磁盘I/O空间/时间局部性信息以及I/O操作热点分布时,本程序的时间复杂度也较低.而且,本程序占有内存空间也较小.因此,本程序可以适合于在线磁盘I/O特征的分析.

本程序主要由磁盘I/O请求到达、磁盘I/O请求完成、监控停止时以及周期性运行的4个处理函数组成.在磁盘I/O请求到达时,我们首先判断该请求的读写特性,然后分别进行相关的信息统计.其中包括磁盘I/O计数、磁盘I/O块大小、磁盘I/O空间局部信息、磁盘I/O时间间隔、磁盘I/O活跃数量以及磁盘I/O的起始时间等信息.在磁盘I/O请求完成时,我们主要统计磁盘I/O延迟时间以及更新活跃磁盘I/O数量等信息.在磁盘I/O 监控停止时,我们会输出全部磁盘I/O特征信息,并清空相关统计信息的数据结构.此外,我们还建立了周期性的处理函数来定期地更新磁盘I/O的时间局部性信息以及输出磁盘I/O特征信息.

对于特殊的磁盘I/O特征分析需求,本文的I/O特征分析程序也能够同时生成详细的磁盘I/O指令的Trace.借助该磁盘I/O指令Trace,系统管理员可以进行更加深入的磁盘I/O特征分析.

3 测试结果与评价

我们首先通过IOMeter测试和评价了本文磁盘I/O特征分析程序的运行效率及其对应用系统的I/O性能的影响.随后,以大文件拷贝、Filebench测试程序作为应用负载,我们展示了应用本文磁盘I/O特征分析方法得到的测试结果,并且进行了相应的分析和讨论.

由于本文的磁盘I/O特征分析方法和测试都是基于虚拟机系统进行的,因此,我们将对虚拟机系统进行简要的说明.与非虚拟机系统不同,虚拟机系统具有一层介于物理平台和客户操作系统之间的虚拟机核心软件(virtual machine monitor,简称VMM).虚拟机软件负责管理对物理平台的访问,以使得物理平台资源能够被多个客户操作系统所共享使用.目前,虚拟机软件在企业服务器整合、软件调试和测试、模拟传统平台、系统容灾等方面的应用取得了重要发展.虚拟机系统的主要优点包括:

? 资源效率.资源效率通常是选用虚拟机技术的常见原因之一.充分利用空闲资源正是虚拟机技术的主要应用目标之一.它可以使我们在更少的物理资源上完成相同的任务,减少能耗和资源浪费现象的发生.

? 计算系统的易配置.虚拟计算系统的配置管理可以变得十分简化,几乎一切都可以通过鼠标点击完成.

比如,我们可以轻易地通过管理接口给虚拟机系统增、减逻辑资源.虚拟机系统的逻辑资源也可以通过系统模板进行大批量的部署和管理.

? 快照.快照是逻辑磁盘的虚拟复制.我们可以通过快照使系统快速回到创建快照时的即时状态.这样,我们可以在必要的时候方便地让虚拟机系统回到以往的运行状态下.

? 远程复制.在高可用系统和远程容灾系统中,经常需要用到远程复制技术.这要求我们在不影响生产系统正常运行的情况下,将生产系统的信息完整复制到远程的站点.虚拟存储和虚拟机技术可以有效地保证我们在不影响生产系统运行的情况下,方便地实现远程复制.

? 资源使用的统计报告.通过虚拟机软件,我们可以准确而详细地获取用户操作系统的资源访问情况.任何关于CPU、内存、磁盘和网络的访问信息,我们都能够以独立于用户操作系统的方式获取.

与此同时,虚拟机系统仍有一些不足之处:

? 性能损失.由于虚拟机系统进行了物理资源的隔离和虚拟化处理,这样就不可避免地带来虚拟化的性能开销.因此,对于某些特别关注性能的应用,目前可能并不适合运行在虚拟机系统之上.

? 管理和维护的复杂性.管理和维护的复杂性通常是虚拟机技术应用所面临的另外一个问题.大量的逻辑资源聚合在少量的物理资源之上,就不可避免地增加了系统的复杂性和宕机的风险.同时,由于虚拟机软件的存在,使得我们在系统的部署方面增加了一层复杂性.

沈玉良 等:一种基于虚拟机的高效磁盘I/O 特征分析方法 857

? 硬件故障风险.由于多个用户系统运行在同一个物理平台上,因此,整个物理平台的工作负载显著增加.这样就会增加物理平台出现故障的风险.

值得注意的是,正如本文第1节所述,虚拟机系统的磁盘I/O 和物理平台上的磁盘I/O 的主要差别在于由虚拟化操作引入的性能损失.我们可以认为虚拟机系统的磁盘I/O 行为和物理平台上的磁盘I/O 行为基本一致,因此,采用本文的磁盘I/O 特征分析方法取得的结果,如磁盘I/O 计数、读写分布、I/O 空间局部性、时间局部性以及磁盘I/O 操作热点分布等I/O 特征信息,都可以较为真实地反映实际系统行为,并对系统性能优化有着重要的参考意义. 3.1 测试环境

本文采用的性能测试硬件平台是Intel 965P 平台,Core2 1.86GHz CPU,1G DDR2 667MHz 内存,希捷120G 硬盘和Marvell 88E8053网卡.软件系统采用Xen 3.0.5虚拟机软件,服务域采用Fedora Core 5操作系统,用户域采用Fedora Core 4操作系统或Windows XP Professional 操作系统. 3.2 性能结果与评价

3.2.1 磁盘I/O 特征分析程序的性能测试与分析

基于IOMeter(2006.10.31版),本文针对Xen 3.0.5虚拟机下的Fedora Core 4客户操作系统进行了磁盘I/O 特征分析程序的性能测试和比较.在本次测试中,我们通过IOMeter 标准测试程序,生成了磁盘顺序读、磁盘顺序写、读写各50%的磁盘随机读写3种不同类型的I/O 工作负载.IOMeter 测试程序通过其运行在客户操作系统中的dynamometer 测试引擎来生成I/O 工作负载,同时测量和记录磁盘I/O 操作的性能.其测试结果包括每秒钟磁盘I/O 操作数、磁盘I/O 带宽以及I/O 操作的平均延迟时间.其中,无特征分析程序的测试是我们在相同的物理平台上直接运行标准的Xen 3.0.5虚拟机软件,即没有插入我们的I/O 特征分析程序.如图3所示,我们分别对比测试了在有无I/O 特征分析程序的两种条件下,客户操作系统磁盘I/O 整体性能的损失情况.

在图3中,我们假定在无磁盘I/O 特征分析程序的情况下,系统磁盘I/O 的性能为100.这样我们可以看到,在各种磁盘I/O 操作负载下,开启在线I/O 特征分析程序对应用系统的磁盘读写性能的影响至多为4%.经测试,在运行单个磁盘I/O 特征分析程序实例时,Xen 的服务域CPU 占用率增加最多3%,

内存空间增加少于8MB.由此我们可以看出,本I/O 特征分析程序具有较小的系统开销,对应用系统磁盘I/O 性能的影响也较小.因此,本I/O 特征分析程序可以适用于在线磁盘I/O 特征信息的采集和分析. 3.2.2 大文件拷贝的磁盘I/O 特征分析

相关研究工作表明,文件系统的大部分磁盘空间通常被大文件所占用[3].这时,大文件拷贝操作的性能将可能对系统的整体性能产生较大影响.因此,我们采用本文的磁盘I/O 特征分析方法对不同系统下的大文件拷贝操作进行了对比测试.我们分别在Fedora Core 4和Windows XP Pro 下,对470MB 的大文件拷贝操作进行了对比测试.在Fedora Core 4下,我们采用Ext3文件系统,文件块大小为4KB.在Window XP Pro 下,我们采用NTFS 文件系统,文件块大小也为4KB.具体的磁盘I/O 特征分析结果如图4所示.

由图4我们可以看出,在相同的工作负载情况下,两个操作系统的磁盘I/O 行为有着很多差异.Windows XP Pro 系统的最大磁盘写操作块为64KB,而Fedora Core 4系统的最大磁盘写操作块大小为1MB.而且,两者的绝大多数写操作都是发送最大块的写请求.正是由于两者写操作块大小的这种差别,Windows XP Pro 中的写操作

120I O P S N (S e q R )

10080604020

B a n d w i d t h (S e q R )

L a t e n c y (S e q R )B a n d w i d t h (R n d R W )

I O P S N (S e q W )

B a n d w i d t h (S e q W )

L a t e n c y (S e q W )

L a t e n c y (R n d R W )

I O P S N (R n d R W )

No I/O collection With I/O collection

Fig.3 Performance comparison of

disk I/O characteristics

图3 磁盘I/O 特征分析程序的性能比较

858 Journal of Software 软件学报 V ol.21, No.4, April 2010

数量比Fedora Core 4中的写操作数量多出一个数量级.即:Windows XP Pro 的磁盘写操作数为7 420,而Fedora Core 4的磁盘写操作数仅为745.基于同样原因,在图4(b)中我们可以看到,Windows XP Pro 的I/O 延迟时间要普遍少于Fedora Core 4系统.同时,在图4(c)中我们可以注意到,两者相同之处是大部分文件系统写操作的磁盘空间分配都是连续的.

(a) Distribution of disk I/O block size (b) Distribution of disk I/O latency (a) 磁盘I/O 块大小的分布情况 (b) 磁盘I/O 延迟时间的分布情况

(c) Distribution of disk I/O seek distance

(c) 磁盘I/O 的空间寻址距离的分布情况

Fig.4 I/O characteristics of large file copy workload

图4 大文件拷贝的I/O 特征分析结果

3.2.3 Filebench 的磁盘I/O 特征分析

Filebench 是由SUN 公司开发的开源文件系统性能测试程序.根据描述应用程序进程和线程的工作负载模型文件,Filebench 可以方便地模拟出多种复杂应用程序的文件系统访问行为.Filebench 的开发者对多种应用程序的工作Trace 进行了分析,并建立了相应的工作负载模型.每个工作负载模型包括一个或多个文件I/O 工作流,以及多个工作流之间的同步关系.文件I/O 工作流的描述包括THINK 时间和文件的创建、读写、删除、追加等操作,以及每个操作的I/O 尺寸、操作比率、I/O 模式等描述信息.我们只需指定所需的工作负载,Filebench 就可以模拟出相应应用程序的文件操作行为.

我们采用Filebench 1.1.0程序中自带的应用程序工作负载模型进行了应用系统模拟,其中,filemicro 工作负

I/O block length

5004003002001000

W r i t e I /Q c o u n t

Write I/Q count

Write I/Q count

8000600040002000

512

1024

2048

65536

4096

8192

16384

32768

131072

262144

524288

1048576

2097152

512

1024

2048

65536

4096

8192

16384

32768

131072

262144

524288

1048576

2097152

File copy on Fedora Core 4 Ext3 file system

File copy on Windows XP Pro NTFS file system

W r i t e I /Q c o u n t

10008006004002000

I /Q c o u n t

Write I/Q count Read I/Q count

6000

40002000

Latency time (ms)

Large file copy on Fedora Core 4 Ext3 file system

Large file copy on Windows XP Pro NTFS file system

I /Q c o u n t

0 50 100 150 200Write I/Q count Read I/Q count

0 50 100 150 200

160012008004000

W r i t e I /Q c o u n t

8000600040002000

I/O seek distance (sectors)

File copy on Fedora Core 4 Ext3 file system

W r i t e I /Q c o u n t

Write I/Q count

Read I/Q count

Write I/Q count Read I/Q count

4816>512

3264128256512

3264128256

沈玉良 等:一种基于虚拟机的高效磁盘I/O 特征分析方法

859

载模型定义了一系列典型文件操作,比如创建大规模目录树及文件、复制大规模目录树及文件、单线程顺序读写大文件、多线程随机读写大文件、多线程顺序读写大文件等等.另外,Varmail 工作负载模型模拟了在NFS 文件服务器上电子邮件服务的文件读写行为,其中包括多线程的文件读取、追加以及目录删除等操作.在Fedora Core 4客户操作系统下,我们采用varmail 和filemicro 工作模型,分别对大小为4GB 的Ext3和Ext2文件系统进行了对比测试,并试图观察文件系统的磁盘I/O 行为.其磁盘写操作分布情况如图5所示.

Fig.5 Distribution of disk write operations

图5 磁盘写操作分布情况

根据图5我们可以发现,在Ext3文件系统下的磁盘写操作热点在磁盘分区的前36MB 区域,然而在Ext2文件系统中却没有此现象.由于两个文件系统的主要区别在于维护文件系统一致性的日志机制,也就是说,Ext3文件系统增加了维护文件系统元数据一致性的Journal 日志文件机制,因此我们可以猜想在Ext3文件系统中的Journal 日志文件位于磁盘分区的前36MB 区域.经过对Linux 2.6内核中Ext3文件系统的源代码以及mkfs 1.37源代码的分析我们发现,Ext3文件系统的Journal 日志文件的大小为8 192个文件块,即32MB,并且该文件的起始地址小于4MB,由此我们可以看出,在Ext3文件系统上,Journal 日志文件所在区域确实是在磁盘分区的前36MB 区域.

为了进一步分析和判断日志文件的写操作频繁程度,我们利用I/O 操作热点分析程序进行了测试.经过细化I/O 操作热点分布程序的探测粒度,我们得到的测试结果是:在Filemicro 工作负载下,日志文件写命中5 099次,占写操作总数(15 204次)的33.54%;在varmail 工作负载下,日志文件的写操作命中5 172次,占写操作总数 (44 747次)的11.56%.

由此可以看出,在典型工作负载下,Ext3文件系统的日志文件区域的写操作频率明显高于其他磁盘区域.因此,提高文件系统中日志文件区域的写操作性能将会有助于提高文件系统的整体性能.以往关于文件系统日志的研究结果同时也印证了上述的分析结论[4].

与此同时,在典型工作负载下,磁盘I/O 操作的时间局部性特征也是我们所关心的重要的磁盘I/O 特征信息.

3500300025002000150010005000

W r i t e I /Q c o u n t

7000600050004000300020001000

Disk space 0~4 096MB

Filebench-Varmail workload on Ext2 file system W r i t e I /Q c o u n t

Write I/Q count

Filebench-Varmail workload on Ext3 file system Filebench-Filemicro workload on Ext3 file system Filebench-Filemicro workload on Ext2 file system 10000900080007000600050004000300020001000

W r i t e I /Q c o u n t

16001400120010008006004002000

0 1000 2000 3000 4000

0 1000 2000 3000 4000

0 1000 2000 3000 4000

0 1000 2000 3000 4000

Write I/Q count

Write I/Q count

Write I/Q count

W r i t e I /Q c o u n t

Disk space 0~4 096MB

860 Journal of Software 软件学报 V ol.21, No.4, April 2010

为此,我们在Ext3文件系统上分别采用filemicro 和varmail 工作负载进行了相关测试.其中,时间间隔TIME _ INTERVAL 采用的是0.2s.通过测试我们知道,系统在filemicro 工作负载下的总读写I/O 操作数为322 521,其中,在3.2s 内重复访问数据块的I/O 操作数为100 040,占总I/O 数量的31%.系统在varmail 工作负载下,总读写I/O 操作数为191 148,其中在3.2s 内重复访问数据块的I/O 操作数为75 645,占总I/O 数量的39.6%.如图6所示,在filemicro 工作负载下,系统重复访问数据块的I/O 数量逐渐递减,并且在0.4s 内重复访问数据块的I/O 数量占91.7%.同样,在varmail 工作负载下也呈现I/O 数量逐渐递减的趋势,并在0.6s 内重复访问数据块的I/O 数量占85.3%.这些结果都恰好印证了数据I/O 访问的时间局部性原理.同时,这些在线获取的时间局部性特征信息对磁盘数据缓存的设置有着实际参考意义.

Fig.6 Time locality analysis results of disk I/O operations

图6 磁盘I/O 操作时间局部性的分析结果

4 相关研究工作

虚拟机技术一直是计算机系统研究的热点.与非虚拟机系统不同的是,虚拟机系统一般具有一层介于物理平台和用户操作系统之间的虚拟机软件.虚拟机软件负责管理对物理平台的访问,以使得物理平台能够被多个用户虚拟系统所共享使用.在虚拟机软件中,我们可以方便地监控应用系统的磁盘I/O 行为,而且不必依赖于某种特定的操作系统.Xen 是最初由Cambridge 大学Computer Laboratory 发起的开源虚拟机项目.它的开发得到了Intel,HP,IBM 等公司的支持.Xen 是支持同时运行多个虚拟系统的高性能VMM [5].它支持x86_32, x86_64,IA64等多种平台,并支持Intel VT [6]和AMD SVM(secure virtual machine)技术.目前,以Xen 为代表的高性能虚拟机软件,如VMware ESX Server [7],Microsoft Virtual Serve 等,越来越受到业界的关注,并逐步应用到企业生产环境中.同时,国内关于虚拟机技术和应用的研究也十分活跃[8].虚拟化的开销一直是虚拟机技术应用的关键.目前,磁盘I/O 的虚拟化开销是虚拟机整体虚拟化开销的主要来源之一[9].因此,研究和分析虚拟机系统的磁盘I/O 特征,将会给优化虚拟机系统的整体性能提供重要帮助.

近些年来,关于存储I/O 特性的研究一直是计算机系统研究的热点问题.然而,大部分研究都是基于I/O 操作Trace 来进行工作负载的分析.基于I/O 操作Trace 的分析工作往往是在线采集原始数据,然后以离线的方式来分析I/O 访问特征信息.然而,基于虚拟机的I/O 特性分析方法能够以在线的方式进行应用系统的磁盘I/O 特性分析.另外,在许多存储系统的有关工作中,如利用IOMeter 来模拟应用系统工作负载,我们需要的往往是工作负载的各种磁盘I/O 特征,而不是具体的I/O 操作Trace.

近来,关于在工作负载在线分析的研究工作成为I/O 特征研究领域的重要组成部分.比如,IBM 的Moilanen

Time (s)

I/Q count

I/Q count

3500300025002000150010005000

I /Q c o u n t

Filebench-Varmail workload on Ext3 file system

Filebench-Filemicro workload on Ext3 file system 900008000070000600005000040000300002000010000

I /Q c o u n t

3.0~3.2

2.8~

3.02.6~2.82.4~2.6

2.2~2.4

2.0~2.4

1.8~

2.0

1.6~1.8

1.4~1.6

1.2~1.4

1.0~1.2

0.8~1.0

0.6~0.8

0.4~0.6

0.2~0.4

0.0~0.2

3.0~3.2

2.8~

3.0

2.6~2.8

2.4~2.6

2.2~2.4

2.0~2.4

1.8~

2.0

1.6~1.8

1.4~1.6

1.2~1.4

1.0~1.2

0.8~1.0

0.6~0.8

0.4~0.6

0.2~0.4

0.0~0.2

沈玉良等:一种基于虚拟机的高效磁盘I/O特征分析方法861

在Linux系统中,在线跟踪平均I/O块大小、读写比例以及平均寻址距离等信息[10],然后根据跟踪结果利用遗传算法生成当前工作负载的fingerprinting,并用以自动调节文件系统的参数.Falk提交的Linux内核块设备补丁程序实现了在线统计I/O块大小、I/O完成时间等功能[11].Pablo物理I/O工具通过在Linux内核中加入补丁程序来获取I/O请求块大小、I/O请求延迟等信息,然后生成相应的直方图[12].在IBM的System Z中,Linux资源分析工具能够在线跟踪I/O块大小、I/O延迟以及I/O队列中I/O数量[13].与本文相比,我们提供了更加丰富的I/O 统计信息.更为重要的是,本文基于虚拟机的在线I/O特征分析方法独立于用户操作系统,可以方便地应用于多种系统环境.VMware公司的Ahmad以直方图的方式在VMware ESX Server上研究了在线磁盘I/O特征分析方法[14].与之相比,我们分别在Xen虚拟机系统的IDE和SCSI接口中实现了I/O特征分析程序.而且,本文的I/O 特征分析程序提供了更多、更重要的I/O特征统计信息,如磁盘I/O的时间局部性信息以及磁盘I/O操作的热点分布.这些信息是进一步研究磁盘数据缓存等优化技术的重要依据.

此外,磁盘性能评测程序也可以获取一部分磁盘I/O的特征信息.比如,IOMeter通过在用户操作系统上生成块级别I/O操作的工作负载来测量和记录磁盘系统的性能.另外,IOzone是在文件系统级别的存储性能测试工具.此外,还有Bonnie++标准测试程序包含一系列的文件级别或块级别的测试用例,并用以比较不同存储系统的性能.类似的磁盘性能评测程序还有很多,它们都是通过在用户操作系统上生成相关的工作负载来测量磁盘系统的性能指标,如磁盘带宽、每秒I/O数量、平均延迟时间等.这些磁盘性能评测程序的目的在于测试和比较磁盘系统性能,因此其工作负载往往都是自身生成的标准工作负载.它们并不能用于获取各种应用负载的磁盘I/O 特征信息.

值得一提的是,许多操作系统都会带有相关的磁盘性能监控程序,比如Linux系统中的iostat命令,它可以有效监控I/O设备的运行状况和系统时间,从而获取磁盘设备的每秒读写数据量.Windows系统中的FileMon可以实时地监控文件系统行为,如每次文件的创建、读写、删除等操作.DiskMon可以有效监控Windows系统中的磁盘I/O信息,如磁盘I/O起始位置和长度等信息.在虚拟机系统中运行此类程序也可以获取和本文类似的用户系统磁盘I/O信息.但是,这些程序都针对某一种操作系统而开发,不能广泛适用于各种操作系统.而且,由于这些评测程序需要运行在用户操作系统之中,它们势必会占用用户系统的计算资源和存储资源.

5 结束语

磁盘I/O性能一直以来都是计算机系统的性能瓶颈.随着电子技术的不断发展,CPU和内存的性能迅速提高,其与磁盘性能之间的性能差距逐渐加大.因此,存储系统性能分析和优化技术一直是计算机系统研究的重点.本文介绍的基于Xen虚拟机的在线磁盘I/O特征分析方法可以有效地统计磁盘I/O读写比例、I/O块大小、I/O时间间隔、活跃I/O数量、I/O延迟、I/O空间/时间局部性信息以及磁盘I/O操作热点分布等多种I/O特征量.通过测试我们看到,本文的I/O特征分析方法具有较小的系统开销和应用系统性能影响,适于进行在线I/O 特征分析.随后,本文还给出了面向典型应用负载的磁盘I/O特征测试结果和分析评价.

我们可以看到,基于虚拟机的在线磁盘I/O分析机制是一种灵活而高效的磁盘I/O特征分析工具.其在线分析的特点能够有效地帮助存储系统动态调节性能参数.在我们正在进行的基于磁盘的网络数据缓存机制研究中,我们将基于本磁盘I/O特征分析方法对数据缓存的尺寸、数据替换策略、缓存块大小等参数做出优化调整.此外,在企业计算环境中多数虚拟机系统都采用网络存储设备进行数据存储.因此,我们将采用基于虚拟机的在线I/O分析方法来研究多台虚拟机系统的共同I/O行为特征.此研究将对优化网络存储系统性能有着重要帮助.

致谢在此,我们向对本文的工作给予支持和建议的同行,尤其是中国科学院计算技术研究所存储分中心的同学和老师表示感谢.

862 Journal of Software软件学报 V ol.21, No.4, April 2010

References:

[1] Roselli D, Anderson TE. Characteristics of file system workloads. Technical Report, CSD-98-1029, Berkeley: University of

California, 1998.

[2] Liu J, Yang XJ, Tang YH, Wang YX. The optimal strip unit size of heterogeneous disk array. Chinese Journal of Computers,

2004,27(6):819?827 (in Chinese with English abstract). https://www.360docs.net/doc/de6832692.html,/qwjs/view.asp?id=1612

[3] Agrawal N, Bolosky WJ, Douceur JR, Lorch JR. A five-year study of file-system metadata. In: Proc. of the 5th Conf. on File and

Storage Technologies (FAST 2007). San Jose: USENIX, 2007. 31?45. https://www.360docs.net/doc/de6832692.html,/event/fast07/

[4] Prabhakaran V, Arpaci-Dusseau AC, Arpaci-Dusseau RH. Analysis and evolution of journaling file systems. In: Proc. of the

USENIX 2005 Annual Technical Conf. Anaheim: USENIX, 2005. 105?120. https://www.360docs.net/doc/de6832692.html,/publications/library/ proceedings/usenix05/

[5] Pratt I, Fraser K, Hand S, Limpach C, Warfield A. Xen 3.0 and the art of virtualization. In: Proc. of the Linux Symp., Vol.2. Ottawa,

2005. 65?77. https://www.360docs.net/doc/de6832692.html,/2005/

[6] Uhlig R, Neiger G, Rodgers D, Santoni AL, Martins FCM, Anderson AV, Bennett SM, Kagi A, Leung FH, Smith L. Intel

virtualization technology. IEEE Computer, 2005,38(5):48?56.

[7] Waldspurger CA. Memory resource management in VMware ESX server. In: Proc. of the 5th Symp. on Operating Systems Design

and Implementation (OSDI 2002). Boston: USENIX, 2002. 181?194. https://www.360docs.net/doc/de6832692.html,/events/osdi02/

[8] Huai JP, Li Q, Hu CM. Research and design on hypervisor based virtual computing environment. Journal of Software, 2007,18(8):

2016?2026 (in Chinese with English abstract). https://www.360docs.net/doc/de6832692.html,/1000-9825/18/2016.htm

[9] Clark B, Deshane T, Dow E, Evanchik S, Finlayson M, Herne J, Matthews JN. Xen and the art of repeated research. In: Proc. of the

USENIX 2004 Annual Technical Conf.: Free and Open Source Software (FREENIX) Track. Boston: USENIX, 2004. 135?144.

https://www.360docs.net/doc/de6832692.html,/events/usenix04/cfp/freenix.html

[10] Moilanen J. I/O workload fingerprinting in the genetic-library. In: Proc. of the Linux Symp., Vol.2. Ottawa, 2006. 165?172.

https://www.360docs.net/doc/de6832692.html,/2006/linuxsymposium_procv2.pdf

[11] Falk E. Introduce block I/O performance histograms. 2006. https://www.360docs.net/doc/de6832692.html,/Articles/209770/

[12] Reed DA, Aydt RA, Madhyastha TM, Noe RJ, Shields KA, Schwartz BW. An overview of the Pablo performance analysis

environment. 1992. https://www.360docs.net/doc/de6832692.html,/viewdoc/summary?doi=10.1.1.37.2102

[13] Parziale L, Belardi M, Held M, Ma LY, Peckover L, Reed K. Linux on IBM system z: Performance measurement and Tuning. 2008.

https://www.360docs.net/doc/de6832692.html,/redbooks/pdfs/sg246926.pdf

[14] Ahmad I. Easy and efficient disk I/O workload characterization in VMware ESX server. In: Proc. of the 2007 IEEE Int’l Symp. on

Workload Characterization (IISWC 2007). Boston: IEEE, 2007. 149?158. https://www.360docs.net/doc/de6832692.html,/iiswc2007/

附中文参考文献:

[2] 刘军,杨学军,唐玉华,王勇献.异构盘阵中最优Strip Unit Size选择技术.计算机学报,2004,27(6):819?827. https://www.360docs.net/doc/de6832692.html,/qwjs/

view.asp?id=1612

[8] 怀进鹏,李沁,胡春明.基于虚拟机的虚拟计算环境研究与设计.软件学报,2007,18(8):2016?2026. https://www.360docs.net/doc/de6832692.html,/1000-9825/

18/2016.htm

沈玉良(1977-),男,黑龙江哈尔滨人,博士生,主要研究领域为虚拟机系统,网络存储.

许鲁(1962-),男,博士,研究员,博士生导师,CCF高级会员,主要研究领域为计算机网络存储系统.

实战Linux下VMware虚拟机根目录空间扩充

实战Linux下VMware虚拟机根目录空间扩充 分类:Linux 2011-02-14 16:59 532人阅读评论(0) 收藏举报 今天上午接到通知说服务器挂了,经过检查发现原因是Linux的虚拟机根分区已经使用100%,以至于服务不能正常进行。 经过小小的研究,顺利解决问题,把服务器的空间由4G扩成12G。现将执行全过程总结如下,以供分享。 首先,介绍下大体的解决思路,要想扩充,硬件上要有准备,说白了也就是要有一块新的空间来供我们使用。对于实体机我们需要准备一块新的硬盘,而对于VMWare 虚拟机,我们只需要使用vmware自带的软件扩充下磁盘大小。 扩充磁盘,只意味着硬件条件得到满足。接下来就需要对新的磁盘空格进行合理的操作,来扩充我们需要的分区。 值得注意的是,这里我们基于LVM来操作的。如果您的环境不是LVM的,可以考虑改成LVM的,否则后文无需再读。具体执行过程将细细道来。 第一步、使用VMware工具扩容分配的硬盘空间 1、vmware 提供一个命令行工具,在Windows下为vmware-vdiskmanager.exe 位于vmware 的安装目录下,比如C:/Program Files/VMware/VMware Workstation/vmware-vdiskmanager.exe. 在Linux下有直接的vmware-vdiskmanager指令。 进行的操作:在windows 下运行CMD , 转到vmware 的安装目录,可执行vmware-vdiskmanager.exe;在Linux下,直接敲入vmware-vdiskmanager ,可执行该指令扩充使用的指令: vmware-vdiskmanager -x 16Gb myNewlinux.vmdk 说明:要扩容的系统这时不能在运行,参数"-x" 表示要扩展虚拟机硬盘空间,紧随其后的数字是要扩展到的大小,而非增加量(本例为扩展到16GB ,这是一个磁盘总量,包含了原先的磁盘容量) 。最后是指定要操作的虚拟机磁盘的具体文件,要是路径名中有空格,必须以双引号括起来。按回车键开始执行,执行完毕,退出命令提示符窗口,重启VMware ,会发现虚拟机硬盘空间已变成16GB 了。

如何给VMware虚拟机添加新硬盘

如何给VMware虚拟机添加新硬盘 最近需要在虚拟机里面实际操作些东西,需要至少两个盘,一个系统盘,一个普通盘,结果发现安装完虚拟机后默认只有一个C盘,本来还想打算采用工具无损分区从C盘分出来一些,后来发现不行,太麻烦不说,而且不符合虚拟机的自由玩精神,后来发现原来可以从虚拟机里面自行添加,这里简单介绍下: 环境介绍:VMware8.0,装的系统是XP SP3。 先把已经可以运行XP系统的虚拟机关闭,点击编辑(Edit vitual machine settings): 打开后的界面如下 可以看到我已经多添加一个盘了,现在再添加一个,点击下面的Add按钮,添加一个盘符:

选择第一项:Hard Disk,然后点击Next:如图: 选择第一项,并点击Next,如图:

还是选默认的第一项,并点击Next,如图:

这里大小40G是默认的不用担心占用你的硬盘,应为是虚拟的,当实际存储文件有多大时才会相应在你硬盘上显示出这个虚拟硬盘文件有多大,这里选择第二项,并点击Next,如图: 这里的名字是在你实际硬盘上显示的文件名,作为虚拟硬盘使用,名字是默认的,不用管,存储位置在你的虚拟系统文件夹下,也可以点击后面的Browse 来自定义存储位置。点击Finish完成设置,这不算完,呵呵,看下我们在硬盘上的显示大小: 这里清楚的显示,此刻这个40G的虚拟硬盘实际占用空间才5M,好了,启动虚拟机:一路点yes后进入系统如图:

奇怪?不是添加了吗?怎么还是原来的两个,新添加的那个哪里去了,不用担心,这是因为添加了,但还没有格式化,所以没显示出来,在虚拟机里,右键我的电脑—管理—磁盘管理,会弹出如下界面: 点击下一步:

虚拟机中如何扩展一个虚拟磁盘的大小(图解)

虚拟机中如何扩展一个虚拟磁盘的大小(图解) 2009-12-07 00:14:59| 分类:PC | 标签:|字号大中小订阅 问题的提出: 非常多的虚拟机使用者开始没有能预估到在虚拟机上安装系统后最后需要多少空间,使用了一段时间后发现虚拟机的磁盘空间不够了。怎么去解决呢? 方法一、 在虚拟机配置处增加一个硬盘。 点击Edit virtual machine settings

点击下一步,增加一块硬盘

接下来就是按照提示操作就可以了。 这个方法不是最好的。增加了一个硬盘,对虚拟机的性能并没有什么太大的影响。 方法二: 使用VMware自身带的工具进行扩展硬盘 1、首先找到VMware的安装路径,从vm的快捷方式的属性去寻找安装路径

在安装文件夹下我们可以看到这个命令:vmware-vdiskmanager.exe

这个命令必须在命令行下运行。 进入命令行状态。 C:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager.exe VMware Virtual Disk Manager - build 19175.

Usage: vmware-vdiskmanager.exe OPTIONS diskName | drive-letter: Offline disk manipulation utility Options: -c : create disk; need to specify other create options 建立一个新的磁盘 -d : defragment the specified virtual disk 磁盘碎片整理 -k : shrink the specified virtual disk 压缩一个指定的磁盘 -n : rename the specified virtual disk; need to specify destination disk-name 重新命名磁盘的名称 -p : prepare the mounted virtual disk specified by the drive-letter for shrinking -q : do not log messages -r : convert the specified disk; need to specify destination disk-type 转换磁盘类型 -x : expand the disk to the specified capacity 扩展磁盘的容量 Additional options for create and convert: -a : (for use with -c only) adapter type (ide, buslogic o r lsilogic) -s : capacity of the virtual disk -t : disk type id Disk types: 0 : single growable virtual disk 1 : growable virtual disk split in 2Gb files 2 : preallocated virtual disk 3 : preallocated virtual disk split in 2Gb files The capacity can be specified in sectors, Kb, Mb or Gb. The acceptable ranges: ide adapter : [100.0Mb, 950.0Gb] scsi adapter: [100.0Mb, 950.0Gb] ex 1: vmware-vdiskmanager.exe -c -s 850Mb -a ide -t 0 myIdeDisk.vmdk ex 2: vmware-vdiskmanager.exe -d myDisk.vmdk ex 3: vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 0 destinationDisk.vm dk 示例: ex 4: vmware-vdiskmanager.exe -x 36Gb myDisk.vmdk 把myDisk.vmdk的容量扩展到36G

(图解)为虚拟机重新调整磁盘容量(Resize VMDK)

(图解)为虚拟机重新调整磁盘容量(Resize VMDK) 1、关闭虚拟机后右击虚拟机选择“Edit Settings”(4.x版本的ESXi/ESX可以不用关机调整); 2、在“Hardware”页标签选择要更改容量的虚拟磁盘VMDK,输入想要调整的容量大小,如下图(只能增加不能减少): 3、完成这里的添加只是第一步,还需要进入到虚拟机的系统里面去调整,具体而言,针对Windows 操作系统非系统盘可以用Diskpart工具来调整容量;同时,也可以利用GParted之类的东距来调整容量; Windows DISKPART调整磁盘容量 1、点击开始运行输入diskmgmt.msc; 2、系统显示如下图所示,调整后的空白空间显示在里面: 3、然后进入到命令行界面输入DISKPART命令来调整: diskpart->list volume->select Volume 0->extand->exit

4、再次输入diskmgmt.msc进入到磁盘管理界面可以看到如下状况,说明已经完成调整了: 利用GParted工具调整 首先下载GParted Live CD,然后: 1、点击“Options”页标签然后选择“Boot Options”; 2、点击“Force BIOS Setup”强行下一次启动BIOS设定界面; 3、点击OK完成配置: 4、将下载到的Gparted Live CD连接到虚拟机后设定为BIOS光盘启动:

5、然后启动系统到如下界面: 6、选择需要扩展空间的磁盘和分区,然后右击分区选择“Resize/Move”,如下图: 7、设置需要调整的空间大小或者直接拉动下图中绿色边框到最右边: 8、然后,点击“Apply”后完成调整重启系统将挂载的这个GParted Live CD移除掉:

虚拟机扩大磁盘(图文详解)

虚拟机磁盘扩大与LVM 扩大硬盘的方法有二: 1 新增一个虚拟硬盘 2 扩大原有硬盘 第一:新增硬盘并将其格式化为lvm格式 第二:扩大硬盘并利用分区工具,将扩大的部分添加到原有的分区中,再将该分区转为lvm 格式 第三:建立lvm卷组,并最终将文件系统挂载上去。 ********************************************** vmware-vdiskmanager.exe 创建一个新的磁盘: vmware-vdiskmanager.exe //看看选项,也可以增大原来的磁盘 vmware-vdiskmanager.exe -c -s 10Gb -a ide -t 0 Seconddisk.vmdk在 vmware-->setting-->选择硬盘-->add-->....即可将新增一个磁盘。如果没有以上这步,虚拟机下是识别不到用vdiskmanager创建的新的虚拟磁盘。这比较容易理解。 或者使用vmware utility菜单中的expand命令,增加虚拟机的最大磁盘空间。 新增一个磁盘,比较简单。进入虚拟机后。/sbin/fdisk -l会发现有一个磁盘没有挂载任何的文件系统。如/dev/hda

/sbin/fdisk /dev/hda来对这个磁盘进行分区,并选择lvm类型的文件系统。如下 # /sbin/fdisk /dev/hda The number of cylinders for this disk is set to 22192. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e 此处选8e是设置磁盘格式为lvm, 在command下可输入l查看 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 将该盘设为lvm格式,是为了让几个lvm物理卷构成一个卷组,并最终都挂载到/目录下。因为我的/空间满了 这里又是扩大硬盘容量,又是新增硬盘,主要是为了实验。图方便的话,直接用其中一种方式皆可。 但是,从vmware setting 上扩大磁盘后,在linux下只会显示硬盘大小改变了,可并没有扩充文件系统啊。 可以利用:resize2fs和parted分区工具。 参考:resize2fs https://www.360docs.net/doc/de6832692.html,/u/6303/showart_407254.html parted https://www.360docs.net/doc/de6832692.html,/index.php/linux/34-linuxbase/1190-command.html

Linux中VMware虚拟机增加磁盘空间的扩容操作

Linux中VMware虚拟机增加磁盘空间的扩容操作 用VMwareware虚拟机安装的RedHatEnterpriseLinux系统剩余空间不足,造成软件无法正常安装。如果重新装一遍系统就需要重新配置好开发环境和软件的安装配置。通过上网搜集的资料,结合自己的实践,总结了如下扩大硬盘空间的详细步骤,希望对大家有帮助。 (1)打开VMware,选择Edit Virtual mache settings,Utilities下拉框中找到Expand如下图 (2)将磁盘空间扩大到50G,点击Expand即可,随后进入一个较长的Expand过程,完成后这是新的空间已经增加,但linux环境下还不可见。(3)启动VMware环境下的Linux操作系统,添加新分区,需要root账号身份。 3.1【fdisk -l】最大分区为/dev/sda3,说明新创建的分区将会是sda4 3.2输入【fdisk /dev/sda】 3.2.1命令行提示下输入【m】 3.2.2输入命令【n】添加新分区。 3.2.3输入命令【p】创建主分区。 3.2.4输入【回车】,选择默认大小,这样不浪费空间 3.2.5输入【回车】,选择默认的start cylinder。 3.2.6输入【w】,保持修改 3.3输入【reboot】重启linux,必须reboot,否则/dev/sda4无法格式化。 3.4这时在/dev/目录下,才能看到了新的分区比如/dev/sda4 3.5【mkfs.ext2 /dev/sda4】格式化 3.6在根目录下创建disk4目录

3.7【mount /dev/sda4 /disk4/】将分区mount到/disk4/上 3.8在vim修改/etc/fstab文件,加入【/dev/sda4 /disk4ext2defaults00】一行,并保存,实现开机自动mount。 至此,新增加的磁盘空间容量,即可在disk4上体现,并且重新开机自动mount该分区,追加磁盘空间的工作完毕。 如果当前磁盘无容可阔,可以用增加磁盘的方法,在VMware主界面,选择 【VMware】下拉菜单,选择【Settings】,用【Add】方式增加一块磁盘,后面的操作类似,不再重复。

VMware虚拟机硬盘扩容

VMware虚拟机的硬盘容量的扩展 操作虚拟机GUEST是Turbolinux系统。 1、 先增加磁盘容量 在实体机下通过VMware工具有2种方法: 1.1、工具vmware-vdiskmanager.exe 进入DOS命令行,找到vmware-vdiskmanager.exe所在目录。 >CD D:\Program Files\VMware\VMware Workstation >vmware-vdiskmanager.exe -x 30GB "H:\Virtual Machines\Turbolinux\Turbolinux.vmdk" 出现提示,只需等待完成即可: Grow: 100% done. Disk expansion completed successfully. 备注: 1、文件名应该用双引号括起,特别是含有空格的。 2、MB,GB一定不要忘记B。 3、需要强调的一点是,调整硬盘大小之后的效果,相当于增加 了原来物理硬盘的柱面数目。因此,文件系统并不会自动增长。需要重新调整文件系统的大小。 1.2、设置Edit virtual machine settings 打开VMware,Edit virtual machine settings,选择add就可以加硬盘了。 2、 再调整文件系统 进入虚拟机Turbolinux,打开终端。 [root@localhost ~]fdisk –l [root@localhost ~]fdisk /dev/hda N P 3

W 增加分区3(hda3) 保存, [root@localhost ~]reboot 然后把一个闲置的/dev/hda3分区挂上,并给VolGroup00/LogVol00扩容,正好原来/VolGroup00/LogVol00就放在一个lvm的lv上 先把磁盘/dev/sdc加入到卷组MyLVM中 // 创建物理卷 [root@localhost ~]pvcreate /dev/hda3 // 对现有的VolGroup00 做扩展 // 扩展卷组 [root@localhost ~]vgextend VolGroup00 /dev/hda3 // 直接扩展/dev/VolGroup00/LogVol00 分区,不用umount,也不需要重启 #扩展逻辑卷 [root@localhost ~]lvextend -l +100%FREE /dev/VolGroup00/LogVol00 #resize 逻辑卷 [root@localhost ~]lvresize -l +100%FREE /dev/VolGroup00/LogVol00 resize ext3文件系统 [root@localhost ~]resize2fs /dev/VolGroup00/LogVol00

VMware中的Linux增加硬盘容量

案例1 vmware中centos的磁盘大小20G->30G 现象:fdisk -l可以看到增大后的磁盘总量,但是需要增加分区并格式化然后挂载才能使用. 一、vmware中的设置 先关闭虚拟机 vm->settings->hard disk->utilities->expand->输入大小(增加后的大小) 二、启动虚拟机,进入命令行 1、fdisk /dev/sda进入命令行Command (m for help): 2 、输入p 列出分区表 3 、输入n 增加分区 4、选择p,即primary partition,回车后会自动分配分区号,一般默认情况在已有分区号上加1,已有3则为4。 5 、输入w 保存退出,fdisk -l 查看新的分区布局 6 、重启 7、格式化为ext3格式mkfs.ext3 /dev/sda4 8、挂载到某个目录 mkdir /cm mount /dev/sda4 /cm df -h //查看分区挂载及使用情况 9、设置开机自动加载此分区 vi /etc/fstab 分区表文件 末尾添加 /dev/sda4 /cm ext3 defaults 0 0 ps :如果修改出错,会造成无法进入桌面环境,只能进到字符界面原因是出错后启动根目录(/)的以只读的挂载模式,编辑后就算强制保存了也不会生效。解决方法: 执行修改挂载的读写权限mount -o remount, rw / 重新修改/etc/fstab 重新启动计算机即可。

案例2 用VMwareware虚拟机安装的Red Hat Enterprise Linux系统剩余空间不足,造成软件无法正常安装。如果重新装一遍系统就需要重新配置好开发环境和软件的安装配置。通过上网搜集的资料,结合自己的实践,总结了如下扩大硬盘空间的详细步骤,希望对大家有帮助。 (1)打开VMware,选择Edit Virtual mache settings,Utilities下拉框中找到Expand如下图 (2)将磁盘空间扩大到50G,点击Expand即可,随后进入一个较长的Expand过程,完成后这是新的空间已经增加,但linux环境下还不可见。

vmware 调整虚拟机硬盘大小

调整vmware虚拟机硬盘空间 大家在使用vmvare安装虚拟机的时候,常发现空间不够用,这时,如果重新安装的话,太费时间,这里给大家一个技巧轻松扩展你的硬盘空间 1. 首先使用命令把最大空间限制改掉 举列: D:\Program Files\VMware\VMware Workstation\vmware-vdiskmanager.exe -x (小写)10Gb(单位一定要写,或MB) d:\linux.vmdk -x代表要扩展的空间。 1). 将虚拟机空间扩展为10GB 2). 重建分区, 这样原来的数据不会丢失. #fdisk /dev/sda # n 这里出现如下选项 # e (extended) p (primary 1-4) 这里我选p # 开始与结束的cylinder取默认值即可 # w 3).mkfs.ext2 /dev/sda3

有些系统可能提示mkfs.ext2::no such device or address while trying to determine filesystem size 这时用户需重启一下系统,再运行该命令 编辑/etc/fstab文件,加入下面的内容 /dev/sda3 /data ext2 defaults 1 2 4).reboot 方法二: 第一步:按Win+R键调出运行对话框,输入“cmd”并按回车键启动命令提示符口。 第二步:进入VMware的安装目录(比如我的安装目录为:D:ProgramFilesVMwarelVMware Workstation),在命令提示符后输入"vmware-vdiskmanager",什么参数也不加直接按回车键,可显示这一命令的说明。 第三步:参考说明,执行类似下面的命令:vmware-vdiskmanager -x l6Gb "D:\Red Hat\Red Hat Enterprise Linux 5.vmdk" 参数"-x"表示要扩展虚拟机硬盘空间,紧随其后的数字是要扩展的大小(本例为扩展到16GB,这是一个磁盘总量,包含了原先的磁盘容量)。要输入完整路径,最后是指定要操作的虚拟机磁盘的具体文件,因为路径名中有空格,所以必须以双引号括起来。按回车键开始执行,执行完毕,退出命令提示符窗口,重启VMware,会发现虚拟机硬盘空间已变成16GB了。如果虚拟机中存在还原点,则需要先删除还原点才可以扩展磁盘空间,扩展成功后,在设置磁盘还原点。

为Linux虚拟机增加硬盘空间

为Linux虚拟机增加硬盘空间 1、首先,在虚拟机管理页面增加虚拟机的硬盘空间。没有截图。 2、进入虚拟机,root登陆,打开console。 3、df / 看一下。 文件系统block大小为1K,目前可用大约1.3G。没空间了呵呵。 4、fdisk–l 看一下。注意这里是小写字母,不是数字。 可以看到sda为硬盘,总大小150.3G; 目前有sda1 104391K,大约10M。sda2 41833260K,大约40G(1个Block为1K)其中sda1 为boot分区。 还有接近100G没有利用。下面就要利用这新增的100G。 5、先新建分区。在sda上新建分区。命令为:fdisk /dev/sda 注意没有带数字,不是fdisk /dev/sda1、fdisk /dev/sda2 输入fdisk /dev/sda命令后,会出现提示符: Command (m for help): 输入P查看一下当前状态。 5.1输入n为新建分区。 输入后提示你选择是新建扩展分区(extended),还是主分区(primary)。输入e为extended,输入p为primary 5.2这里输入e。输入e后,问你分区号, 5.3 输入分区号3,即sda3 因为1和2已经存在了嘛。

5.4 输入p查看一下sda当前状态,发现现在多了个sda3 6、扩增分区,需要分割为逻辑分区才能使用。因此需建立逻辑分区。 6.1 输入n新建分区。因为已经有extended分区,一个系统只能有一个extended partition故这次会问你是建主 分区还是逻辑分区(logical)。 6.2 输入l (注意是小写字母),系统会提示你输入开始cylinder号,结束cylinder号或者大小。 我这里输入了一个+5120M,呵呵不到5G 失误了。 输入P查看一下当前状态: 共有sda1(主分区)、sda2 (主分区)、sda3 (扩展分区)、sda5 (逻辑分区) 对了没有sda4 因为1、2、3、4是给主分区和扩增分区用的,故逻辑分区直接到了sda5

Linux中VMware虚拟机硬盘空间扩大方法

Linux中VMware虚拟机硬盘空间扩大方法 随着Linux虚拟机的不断使用,在VMware中经常遇到预先装好的linux 虚拟机的硬盘空间过小的问题,造成很多软件不能安装,而重新装一个,又挺麻烦。所以,vmware 硬盘扩容的方法。总结如下: 1、挂载点必须是一个目录。 2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。 一:首先使用VMware工具扩容分配的硬盘空间: 1 、 vmware 提供一个命令行工具, vmware-vdiskmanager.exe ,位于 vmware 的安装目录下,比如 C:\Program Files\VMware\VMware Workstation\vmware-vdiskmanager.exe. 在 windows 下运行 cmd ,转到 vmware 的安装目录 vmware-vdiskmanager.exe 可以查看帮助 2. 对于扩容,可以输入下列命令: vmware-vdiskmanager -x 50Gb "D:\VMware\WinXP\myLinux.vmdk" 注:要扩容的系统这时不能在运行,参数 "-x" 表示要扩展虚拟机硬盘空间,紧随其后的数字是要扩展到的大小 ( 本例为扩展到 50GB ,这是一个磁盘总量,包含了原先

的磁盘容量 ) 。最后是指定要操作的虚拟机磁盘的具体文件,要是路径名中有空格,必须以双引号括起来。按回车键开始执行,执行完毕,退出命令提示符窗口, 重启 VMware ,会发现虚拟机硬盘空间已变成 50GB 了。 我们重启虚拟机后,发现虚拟机的硬盘是变成 50GB 了,但进入 linux 系统后,用 "df -ah" 查看发现硬盘空间还是原先那么大。 虽然已经扩大了磁盘,但是由于还没有经过分区,指定文件系统,所以 linux 操作系统无法识别(其实就相当于你的硬盘虽然大了,但是你并没有对其进行分区是一个道理)。下面我们进行分区处理。 方法二:使用VM图形界面,关闭虚拟机,编辑虚拟机配置,直接将硬盘空间扩容。 3. 分区:(这时要切换为 Root 用户,Ubuntu下使用sudo命令) fdisk 命令: fdisk -l : 打印当前的磁盘分区表,这时我们可以看到磁盘的总量的确增加到 50GB 了,但是分区只有以前的那几个原有的分区。 键入命令: fdisk /dev/sda “sda 就是经过扩容的硬盘,为 SCSI 硬盘, IDE 类型硬盘对应为 hda ,是对该硬盘进行操作” 键入: m “ 列出 fdisk 的帮助” 我们在这里是要添加一个新分区,即将扩容出来的那部分做成一个新分区,这样才能被操作系统挂载识别。

VMware创建共享磁盘(图行-详细)

VMware 添加共享磁盘 Host主机:Windows操作系统 Guest虚拟机: linux操作系统 VMware版本:VMware-workstation-6.5.4 安装方式:图形界面 一,创建虚拟硬盘: 1,创建两台虚拟机 2,为1号虚拟机添加硬盘(未说明的均默认设置) 打开setting选项——选择Add——选择Hard Disk———— 勾选——设置大小,可勾选Allocate——设定路径、名称(名称设定为sharedisk1.vmdk) 同样的方法再添加一块。

3,设置设备端口 回到setting界面——选择sharedisk1————设定端口为SCSI 1:0——确定 为sharedisk2设置端口为SCSI1:1 记住两块硬盘的添加顺序(2号机添加的顺序要和一号机器一样) 4,为2号机添加硬盘 打开setting选项——选择Add——选择Hard Disk————选择1号机刚刚创建的sharedisk1,同时勾选——finish 同样的操作添加sharedisk2 按照步骤3,更改2号机硬盘端口号 注意:vm 6.5要创建共享磁盘,必须勾选Inependent ,否则无法更改端口号。

注意:两个机器磁盘的添加顺序一定要相同,如下图可以验证,如果不相同用步骤4重新为两个机器添加。 二, 修改配置文件 打开虚拟机安装目录,用记事本打开 &&&&&.vmx文件(&&&&&为你虚拟机名) 在文件尾部找到scsi1.present = "TRUE"行,修改该行以下信息为: scsi1.present = "TRUE" scsi1:0.present = "TRUE" scsi1:0.fileName = "sharedisk.vmdk" scsi1:0.mode = "independent-persistent" scsi1:0.writeThrough="TRUE" scsi1:0.sharedBus="virtual" scsi1:0.deviceType = "disk" scsi1:1.present = "TRUE"

虚拟机不重启热添加磁盘扩容方法(修改版)

Linux虚拟机不重启热添加磁盘扩容方法 1、应用背景说明 很多Linux系统虚拟机在使用一段时间后,面临空间不够的问题,需要扩容磁盘空间,但是Linux系统虚拟机不像Windows 2008R2系统虚拟机那样,可以直接将虚拟机磁盘配置那增大磁盘的空间,然后进入到系统刷新磁盘控制器即可看到增加的磁盘空间,然后通过扩展分区即可将分区扩大使用。 另外,Linux系统物理机虽然也支持热插拔硬盘,但是物理机中一般很难发现新加的硬盘在哪一个控制器下哪一个通道的哪一个ID号,导致容易加,但是无法精准通过命令扫描掉,但是虚拟机Linux的磁盘的这些信息可以在硬件配置信息那里看到,从而节省了很多麻烦。虽然Linux系统虚拟机也可直接在原有磁盘配置上增大空间,然后然系统总线重新扫描检测到增大的空间,但是无法直接扩展文件挂载目录,而且增大的磁盘空间虽然能分区但是写入不到系统内核的分区表,导致新建的这个分区无法格式化或者挂载。 综上,一般情况下,都是在linux系统虚拟机配置里直接增加一个新的磁盘,而不是扩大之前的磁盘空间。 注:Windows 2003系统不支持直接扩展分区; Windows 2008R2及以上系统需要将C、D等分区放在不同的磁盘中,才能直接的扩容,不然只能紧邻剩余空间的分区才能扩容; 2、linux系统要求

系统硬盘最好做了LVM; 因为很多系统应用管理员所看到的是某些目录没有了空间,希望将这些目录所在的文件系统空间增大,以便继续存放文件和数据,而不是另外加一个空目录进来,让应用管理员将后面的数据存放在新的空目录下。所以综上,系统有做LVM的话更能满足系统管理员的要求。 3、实验环境介绍 一台2个CPU、4G内存的Linux系统,一个50G的磁盘,系统版本CentOS 6.5。分区如下: 因为系统是basic安装,从上图中可以看到系统有做LVM; 其中磁盘为sda,/boot分区500M,所占为sda1,剩余的磁盘一起做了一个PV,所占为sda2,属于VolGroup这个VG; 在这个VG下有2个LV,一个为lv_root,大小45G,挂载在 /下,另外个LV为lv_swap,大小2G,是交换分区。 4、检查系统的SCSI总线和磁盘信息

图文教程:VM使用技巧之:在VM虚拟机里共享本地硬盘

图文教程:VM使用技巧之:在VM虚拟机里共享本地硬盘1 Testing 2008-07-30 15:35:24 阅读1471 评论1 字号:大中小 最近看到,很多朋友都在群里或者在论坛里提出问题,为什么我的虚拟机里没有真实机的本地硬盘?今天我就为大家抓几个图讲解一下吧,希望大家能看懂。 如果想在虚拟机里要有本地磁盘,那么应该在虚拟机里装上VM Tools这个软件才行。 第一步:打开虚拟机软件,按下快捷键:Ctrl+D,调出“虚拟机设置”如图一:

把虚拟光驱设为Windows.iso,Windows.iso在vm的安装目录下。在“虚拟机设置”里点击“选项”,如图二

在【D】处添加一个您要共享的本地硬盘(可以是文件夹),也就是等下会出现的本地硬盘啦,这个用处可就大啦,我们可以使用它来传递本机与虚拟机之间的文件。 第二步:打开虚拟机电源,进入xp操作系统,在打开光盘,可以看到一个setup.exe的文件,双击它,安装VM Tools。 第三步:打开网上邻居,“添加一个网上邻居”,如图三

点击“下一步”,出现如图四

浏览整个网络邻居,点击+号,选择里面你刚才图二设定的本地硬盘(可以是文件夹)。 好啦,到此为止就可以了,以后要在VM虚拟机中使用本地硬盘就可以在网上邻居里直接进入了。 还看不懂的直接加Q远程协助教到你会为止! 首先你要把虚拟机和电脑连接起来。就用本低连接的桥接。具体方法,例如在XP系统下:在XP中右击桌面的“网上邻居”选择“属性”,打开“网络连接”窗口,按住ctrl键后,分别单击选中两个本地连接,然后再右击,在出现的右键菜单中选择“桥接”,会出现创建网桥的提示框,完成后在“网络连接”窗口中会出现一个“网络桥”图标。双击打开其属性窗口,然后设置IP地址等信息就可以了。 具体情况具体解决,一般来说都是有设置向导的。 桥接好以后,硬盘的共享方法就跟普通2台电脑之间共享一样,在这就不累述了

简单方法修改虚拟机硬盘ID

简单方法修改虚拟机硬盘ID 每一台电脑出产时的硬盘序列号是唯一的,因此很多的软件是依靠硬盘序列号来唯一标识一台计算机的,甚至很多的注册码(比如一些站点的VIP教程)也是根据硬盘ID来生成的(当然,除了硬盘ID之外,还可能有CPU等等)。现在我们就学来学习下如何更改虚拟机的硬盘ID,虚拟机默认的硬盘ID号是:00000000000000000001。也就是说,虚拟机在刚刚安装完成之后: 硬盘序列号是:00000000000000000001。 对应的十六进制是:3030303030303030303030303030303030303031 我们需要的工具有: 1.diskid(点击下载) 2.hookDiskID(点击下载) 3.WinHex(一个十六进制编辑器) 将1和2复制进虚拟机里面之后,打开就能看到: 硬盘序列号是:00000000000000000001。 对应的十六进制是:3030303030303030303030303030303030303031 首先,找到vmware-vmx.exe这个虚拟机文件,其所在目录是:/.../Vmware/VMware Workstation 然后,用WinHex打开vmware-vmx.exe这个文件,利用软件的查找功能找到:00000000000000000001 接着随便修改成其他的,比如我随便修改成的:ID008DF884700248FFFC41。 接着,将修改过的vmware-vmx.exe覆盖原来的文件,这样就打工告成了。 最后,重启虚拟机,虚拟机会提示-----“发现新硬件”,OK,成功了。再次查看硬盘ID:

virtualbox中调整虚拟机的硬盘大小

由于经常需要在Linux虚拟机下测试一些环境,安装的东西比较多,导致之前分配给Linux 虚拟机中的某个分区的空间不够用了,但是又不想重装系统,想直接给空间不足的那个分区调整空间。用的是Ubuntu系统,当时在安装的时候记得当时默认采用LVM来管理硬盘空间的,所以在网上搜索被很多资料,发现是可以动态调整LVM中的逻辑卷大小的,即然可以采用调整LVM的方式来增加分区空间,那么理论上肯定是可行的,于是就到处找资料,做试验验证实际是否可行。 先说一下我的系统环境: 宿主机是:xp sp3 虚拟机软件是:Oracle VM VirtualBox 4.1.16 虚拟机Guest系统是:Ubuntu 10.04 Server x32 虚拟机Ubuntu当时安装时是采用默认的LVM硬盘管理(这个是基础,如果当时没有采用LVM管理的话,也不能动态调整分区的大小了)。当时在VirtualBox中给Ubuntu分配的是8G的空间,固定大小的,随着使用情况的变化,8G的空间很快就用完被,必须增加新的空间。 主要步骤如下: 1:在VirtualBox调整虚拟机硬盘的大小 2:在虚拟机中用fdisk命令将新加的硬盘空间分区,新分区的类型要是LVM的类型8e 3:在虚拟机新建物理卷、卷组、合并卷组、扩展逻辑卷的大小 此方法是己经验证成功了的,中间只重启过一次机器,而且文件都没有损坏(不过在正式环境修改之前,各位自己必须做备份),详细的过程比较长,如下: 上面是我环境的基本信息,下面就说明一下具体的操作过程: 先把调整之前的硬盘情况列出来: root@bogon:/home/roger# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/bogon-root 6.7G 1.6G 4.7G 26% / none 494M 212K 494M 1% /dev none 501M 0 501M 0% /dev/shm none 501M 328K 501M 1% /var/run none 501M 0 501M 0% /var/lock /dev/sda1 228M 23M 194M 11% /boot root@bogon:/home/roger# fdisk -l Disk /dev/sda: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0005d850 Device Boot Start End Blocks Id System

调整VMware虚拟机硬盘容量大小

调整VMware虚拟机硬盘容量大小 担心创建的虚拟机硬盘容量太大会占用真正的硬盘空间,把硬盘的容量设置得很小,可是等到给虚拟机装好系统后再装其他的软件,才发现硬盘容量不够用了。如果重建虚拟机,还要重新再装一遍操作系统,非常麻烦,而VMware中又不能直接修改虚拟机的硬盘容量大小,真是麻烦。 其实在VMware安装目录下就有一个vmware-vdiskmanager.exe程序,它是一个命令行工具,可用来修改虚拟机硬盘的大小。方法如下: 第一步:按Win+R键调出运行对话框,输入“cmd”并按回车键启动命令提示符窗口。 第二步:进入VMware的安装目录(比如我的安装目录为:D:ProgramFilesVMwarelVMware Workstation),在命令提示符后输入"vmware-vdiskmanager",什么参数也不加直接按回车键,可显示这一命令的说明。 第三步:参考说明,执行类似下面的命令: vmware-vdiskmanager -x l6Gb "DVMwareWinXPWindows XP Professional.vmdk" 参数"-X"表示要扩展虚拟机硬盘空间,紧随其后的数字是要扩展的大小(本例为扩展到16GB,这是一个磁盘总量,包含了原先的磁盘容量)。最后是指定要操作的虚拟机磁盘的具体文件,因为路径名中有空格,所以必须以双引号括起来。按回车键开始执行,执行完毕,退出命令提示符窗口,重启VMware,会发现虚拟机硬盘空间已变成16GB了。 如果原来的虚拟机硬盘已被分成了多个分区,那么在通过vmware-vdiskmanager.exe扩大了硬盘空间后还得在盛拟机系统中安装第三方分区工具对虚拟机分区做出调整。详细信息可参阅: /kb/enduser/std_adp.php?p_faqid=1647 虚拟机硬盘扩容 现有虚拟机,C盘容量想扩大(10G扩展到20G),但不想重新再划分一个硬盘 系统配置: windows XP SP2 VMWare 5.5 中文版 虚拟机配置: Windows 2003 企业版 建立了一个快照 注意:扩容是针对原始磁盘文件(扩展名为*.vmdk)进行的操作,且扩容前要删除所有在该磁盘上建立的快照(可能高版本不需要删除快照) 我们用的工具是 VMWare 安装目录下的 vmware-vdiskmanager.exe;在命令提示符下键入: vmware-vdiskmanager.exe /? 后回车,可以看到帮助信息,最下面还有几个例子。我们用到的是 -X 参数。 首先要进入 C:\Program Files\VMware\VMware Workstation(VMWare 的安装目录)目录,把 vmware-vdiskmanager.exe文件和所有扩展名为*.dll 的文件(因为不知道哪个是vmware-vdiskmanager.exe 需要的 DLL,所以拷贝所有的)拷贝到虚拟机文件目录中,我在这里要扩展的虚拟机文件在 D:\My Document\My VirtualMachines\Windows2003Enterprise,然后点“开始”-“运行”,输入cmd 后点“确定”,打开DOS 窗口,在DOS 窗口中切换到D:\My Document\My Virtual Machines\Windows2003Enterprise目录,输入下面的命令 vmware-vdiskmanager.exe -x 12Gb Windows2003Enterprise.vmdk

相关文档
最新文档