由于经常需要在Linux虚拟机下测试一些环境,安装的东西比较多,导致之前分配给Linux虚拟机中的某个分区的空间不够用了,但是又不想重装系统,想直接给空间不足的那个分区调整空间。用的是Ubuntu系统,当时在安装的时候记得当时默认采用LVM来管理硬盘空间的,所以在网上搜索被很多资料,发现是可以动态调整LVM中的逻辑卷大小的,即然可以采用调整LVM的方式来增加分区空间,那么理论上肯定是可行的,于是就到处找资料,做试验验证实际是否可行。先说一下我的系统环境:宿主机是:xpsp3虚拟机软件是:OracleVMVirtualBox4.1.16虚拟机Guest系统是:Ubuntu10.04Serverx32虚拟机Ubuntu当时安装时是采用默认的LVM硬盘管理(这个是基础,如果当时没有采用LVM管理的话,也不能动态调整分区的大小了)。当时在VirtualBox中给Ubuntu分配的是8G的空间,固定大小的,随着使用情况的变化,8G的空间很快就用完被,必须增加新的空间。主要步骤如下:1:在VirtualBox调整虚拟机硬盘的大小2:在虚拟机中用fdisk命令将新加的硬盘空间分区,新分区的类型要是LVM的类型8e3:在虚拟机新建物理卷、卷组、合并卷组、扩展逻辑卷的大小此方法是己经验证成功了的,中间只重启过一次机器,而且文件都没有损坏(不过在正式环境修改之前,各位自己必须做备份),详细的过程比较长,如下:上面是我环境的基本信息,下面就说明一下具体的操作过程:先把调整之前的硬盘情况列出来:root@bogon:/home/roger#df-hFilesystemSizeUsedAvailUse%Mountedon/dev/mapper/bogon-root6.7G1.6G4.7G26%/none494M212K494M1%/devnone501M0501M0%/dev/shmnone501M328K501M1%/var/runnone501M0501M0%/var/lock/dev/sda1228M23M194M11%/bootroot@bogon:/home/roger#fdisk-lDisk/dev/sda:8589MB,8589934592bytes255heads,63sectors/track,1044cylindersUnits=cylindersof16065*512=8225280bytesSectorsize(logical/physical):512bytes/512bytesI/Osize(minimum/optimal):512bytes/512bytesDiskidentifier:0x0005d850DeviceBootStartEndBlocksIdSystem/dev/sda1*13224883283LinuxPartition1doesnotendoncylinderboundary./dev/sda232104581367055Extended/dev/sda532104581367048eLinuxLVM从上面可以看到,在调整之前,我的硬盘设备是/dev/sda,大小只有8589MB,而且只有/dev/sda1、/dev/sda2、/dev/sda5,这个要先记录下来,因为后面增加硬盘后,还需要建立新的分区。1:首先将虚拟机的硬盘大小限制放大,即将8G的大小调为20G。由于在VirtualBox不能直接调整虚拟机的硬盘空间,需要调用相应的命令来实现。先将虚拟机关闭,启动CMD窗口,切换到VirtualBox的安装路径下面(例如我的VirtualBox安装路径是D:\tools\virtualbox):D:\tools\virtualboxVBoxManage.execlonehdD:\tools\virtualbox\vm\ubuntu.vdiD:\tools\virtualbox\vm\ubuntu20g.vdi--formatvdi0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%Cloneharddiskcreatedinformat'vdi'.UUID:b5bf984b-decf-47f1-9568-1919241b348cD:\tools\virtualboxVBoxManage.exemodifyhdD:\tools\virtualbox\vm\ubuntu20g.vdi--resize204800%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%在CMD下面依输入上面粗体的两条命令说明一下:D:\tools\virtualbox\vm\ubuntu.vdi---------这个是我虚拟机的镜象文件D:\tools\virtualbox\vm\ubuntu20g.vdi---------这个是我后面准备调整大小的镜象文件,尽量不要直接修改原文件,否则一旦出错将导致原来的系统无法使用VBoxManage.exemodifyhdD:\tools\virtualbox\vm\ubuntu20g.vdi--resize20480,这行命令中的--resize参数就是说明调整后的大小是多少,单位是M,例子中20480即20480M,即20G大小经过上面两条命令后,我们得到一个新的、大小限制为20G的虚拟机镜象文件,此时在VirtualBox里面,将这个修改后的镜象文件替换掉之前的那个镜象文件,具体过程就是在VirtualBox虚拟机的“设置-存储-存储树”里面将之前的设备删除掉,然后再添加“XXX控制器”并“添加虚拟硬盘”时选择使用现有的虚拟盘为我们调整了大小的那个VDI文件,然后启动虚拟机Ubuntu,并切换到root帐号:2:为新增的硬盘建立支持LVM的分区。虚拟机的硬盘大小限制己经修改了,但是在虚拟机里面,用fdisk-l可以看到硬盘的大小是变了,但是分区的大小还是没有变的。因为分区的大小是在当时安装系统是就分好了的,现在就要来重新调整分区的大小了。先查看一下硬盘大小,看是否增加了root@bogon:/home/roger#fdisk-lDisk/dev/sda:21.5GB,21474836480bytes255heads,63sectors/track,2610cylindersUnits=cylindersof16065*512=8225280bytesSectorsize(logical/physical):512bytes/512bytesI/Osize(minimum/optimal):512bytes/512bytesDiskidentifier:0x0005d850DeviceBootStartEndBlocksIdSystem/dev/sda1*13224883283LinuxPartition1doesnotendoncylinderboundary./dev/sda232104581367055Extended/dev/sda532104581367048eLinuxLVM粗体的信息说明我们调整的硬盘大小在Ubuntu中己经可以看到了,但是具体的分区还是没有体现出来,现在我们就要将新加的硬盘建一个分区root@bogon:/home/roger#fdisk/dev/sdaWARNING:DOS-compatiblemodeisdeprecated.It'sstronglyrecommendedtoswitchoffthemode(command'c')andchangedisplayunitstosectors(command'u').Command(mforhelp):n---这里输入n,表示要创建新的分区,输入之后的提示如下Commandactionllogical(5orover)pprimarypartition(1-4)p---这里输入p,表示创建主分支,输入之后的提示如下Partitionnumber(1-4):3---这里输入一个1到4范围内的数字,另外由于我们己经有/dev/sda1、/dev/sda2、/dev/sda5这些设备了,所有这里只能输入3或4,输入3之后有下面的提示Firstcylinder(1045-2610,default1045):---这里直接回车确认使用默认值即可,然后出现类似的提示Usingdefaultvalue1045Lastcylinder,+cylindersor+size{K,M,G}(1045-2610,default2610):---这里同样直接回车确认使用默认值即可,然后出现类似的提示Usingdefaultvalue2610Command(mforhelp):p---这里可以输入p命令将当前分区情况打印出来,类似以下信息Disk/dev/sda:21.5GB,21474836480bytes255heads,63sectors/track,2610cylindersUnits=cylindersof16065*512=8225280bytesSectorsize(logical/physical):512bytes/512bytesI/Osize(minimum/optimal):512bytes/512bytesDiskidentifier:0x0005d850DeviceBootStartEndBlocksIdSystem/dev/sda1*13224883283LinuxPartition1doesnotendoncylinderboundary./dev/sda232104581367055Extended/dev/sda3104526101257724183Linux/dev/sda532104581367048eLinuxLVM看到粗体的内容没?/dev/sda3就是新增加硬盘空间的分区,但是要注意,此时这个分支的Id为83,而我们后面要用到的LVM设备的Id是8e,所以在这里我们必须调整/dev/sda3的类型,用fdisk中的t命令来进行修改:Command(mforhelp):t---这里可以输入t命令调整/dev/sda3的Id类型,类似以下信息Partitionnumber(1-5):3---这里要说要修改哪个分区的设备,要求输入设备的编号,我们要修改的设备是/dev/sda3,所以这里输入3,然后有下面类似的提示Hexcode(typeLtolistcodes):8e---这里是输入要修改的类型代码,LVM设备的代码是8e,所在这里我们就输入8e,然后出现类似的提示Changedsystemtypeofpartition3to8e(LinuxLVM)Command(mforhelp):---此时就可以输入w命令保存并退出,出现类似提示Command(mforhelp):wThepartitiontablehasbeenaltered!Callingioctl()tore-readpartitiontable.WARNING:Re-readingthepartitiontablefailedwitherror16:Deviceorresourcebusy.Thekernelstillusestheoldtable.Thenewtablewillbeusedatthenextrebootorafteryourunpartprobe(8)orkpartx(8)Syncingdisks.此时新的分区己经创建,但是如果要系统内核能够识别到,则需要重启系统,root@bogon:/home/roger#reboot重启系统,系统重启后,查看一下新建的分区是否己经识别到:root@bogon:/home/roger#fdisk-lDisk/dev/sda:21.5GB,21474836480bytes255heads,63sector