动态在线扩容root根分区大小的方法详解
前言
本文主要介绍了关于动态在线扩容root根分区大小的相关内容,分享出来供大家参考学习,下面话不都说了,来一起看看详细的介绍吧。
qemu-imgresizeyourname.img+10G
首先要用命令增加分区大小,针对qemu-kvm使用以上命令
LVM
情境描述:虚拟机用的磁盘image已经扩容,或对应于物理机的话,就是磁盘的容量已经增加了。然后我们希望把扩大的容量用起来,而且不影响现有的文件系统(不格盘)。
实际使用过程中,我们有时候需要对虚拟机镜像的硬盘扩容,比如,一开始我们创建虚拟机的时候,以为20G的磁盘空间就够了,可某一次我们可能一次性就要拷贝一个10G+的文件进虚拟机,这时候我们就傻了。
我们通过VMware或者VirtualBox的图形界面或者一些命令,我们可以很轻松地扩大虚拟机的磁盘大小,但是,磁盘变大后,系统并不会把它们利用起来。所以这时候,我们就要考虑怎么才能让这些多出来的空间能够被虚拟机里的Linux系统用起来。
在此之前,先补充一个“磁盘MBR”的知识:
1个硬盘分为两个区域,一个是MBR(主引导分区),一个是数据区域。
MBR里记录了两个重要信息:引导程序与磁盘分区表。
分区表定义了“第n个磁盘块是从第x个柱面到第y个柱面”,所以,系统每次都取n号磁盘块时,就只会读取第x到第y个扇区之间数据。
由于MBR容量有限,设计的时候,只设计成4个分区记录。用起来,可以作4个主分区,或者3个主分区和一个扩展分区。
如果超过四个分区,系统允许在额外的硬盘空间放另一份磁盘分区信息,那就是扩展分区,当硬盘被分出一个扩展分区的时候,实际上扩展分区在MBR磁盘分区表中的信息为另外那份分区表的位置。所以,在扩展分区里面还要划分逻辑分区才能使用。
每个硬盘最多只允许4个主分区,其他的分区只能放在扩展分区中。
这样就明白了,因为主分区的个数有限,而且我们希望增加的容量也只是作为存储使用,所以加在拓展分区(extended)就可以了。(而如果你是土豪,总共4个主分区,你还打算这次再用一个主分区的名额,那你可以跳过Part1,直接看下面的Part2了。)
PART1
我们要把增加的容量加在拓展分区(extended)里。要对extended分区进行扩容,这个fdisk就做不了,需要用parted命令(如果系统不自带parted,那就从源上装一个):
parted/dev/xxx
进入交互模式,用help查看帮助命令。
一些值得特别说明的命令:
- print查看分区表。留意要操作的分区‘Number'这一项,后面操作要用到。
- unit改变parted所用的描述大小的默认单位(比如设为‘compact'就是以‘MB'为单位)。
值得注意的是,如果用MB/GB这样的单位,磁盘sector的选取会有误差的。parted会为你选最近的sector,但未必精确。比如unit为MB,那么可能产生+-500KB的误差;如果是GB,那就可能+-500MB的误差,这就无法容忍了。所以如果是'创建分区'这样的操作,建议用‘MiB'这样的单位,而不是‘MB'。'MiB'会是一个精确值,parted不会像对待‘MB'那样去找它最近的单元。 - resize
对指定minor号(或Number号)的分区从start位置到end位置这里start/end可以是xxxMB,也可以是负值,表示从磁盘末尾往前多少的位置,比如-0就是指到磁盘的末尾。
更多命令详情请参考:http://www.gnu.org/software/parted/manual/html_chapter/parted_toc.html
实战:
操作前,print结果如下。现有磁盘62.3G,只分给extended8G,还有50多G根本没分配。
NumberStartEndSizeTypeFilesystemFlags 11049kB256MB255MBprimaryext2boot 2257MB8589MB8332MBextended 5257MB8589MB8332MBlogicallvm
我希望把这50多G全部用于扩大extended。
用命令:
resize2257MB-0
其实,只需输入resize2,回车,剩下的两个参数,parted会通过交互的方式让你填写的。-0表示到那个分区的磁盘末尾。
现在再print看一下,
NumberStartEndSizeTypeFilesystemFlags 11049kB256MB255MBprimaryext2boot 2257MB62.3GB62.0GBextended 5257MB8589MB8332MBlogicallvm
extended区已经扩大成功了。
extended区只是相当于“一块物理硬盘”,想把增加出来的空间用上,还要把Number为5的lv扩大。
而logicvolumn的扩大依赖于它所在的volumngroup的大小。因为logicvolumn是从volumngroup里分出来的,如果volumngroup不变大,那么logicvolumn是无法超过volumngroup的。所以真正是应该把空间加到volumngroup上去。
PART2
要增加volumngroup的大小,先用fdisk在extended上,利用刚才增加但还未分配出去的磁盘空间创建出一个新分区。通过fdisk
DeviceBootStartEndBlocksIdSystem /dev/vda1*204849971124883283Linux /dev/vda2501758121634815605665295Extended /dev/vda55017601677516781367048eLinuxLVM /dev/vda6167772161216348155242880083Linux
接下来,由于我们要用LVM来管理这个新分区,我们需要把新分区的管理系统从Linux改为LinuxLVM。在交互模式下,输入命令t,然后选择刚才创建的6,输入8e(LinuxLVM的代号)。最后,我们要把刚才的这些操作真正写入硬盘,输入命令w。
至此,我们通过fdisk-l已经可以看到/dev/vda6被创建出来了。
再执行
vgextend/dev/vda6
把新分区加进volumngroup(VGName可通过vgdisplay查到)。
现在用vgs查看volumngroup的状态,发现volumngroup已经变大。
VG#PV#LV#SNAttrVSizeVFree jiang51-vg220wz--n-57.75g50.03g
然后把这个volumngroup里面的logicvolumn变大。
命令(最后那个'LogicVolumnname'可通过lvdisplay查到):
lvresize-l+100%FREE
警告:如果操作时出现下面这样的warning,就说明现在logicvolumn的总大小还不对,resize不但不增加空间,反而在缩小空间,如果继续操作下去,必将丢失数据。应立即停止!按n取消。
WARNING:Reducingactiveandopenlogicalvolumeto32.00MiB
THISMAYDESTROYYOURDATA(filesystemetc.)
Doyoureallywanttoreduceroot?[y/n]
最后,要更新logicvolumn上的文件系统,不然从df看出文件系统是不知道logicvolumn变大的。
用命令(其中的file_system_name通过df找到):
resize2fs-p
这样,磁盘extended分区的扩容终于完成了。
非LVM
fdisk/dev/sda d n p 1 w resize2fs/dev/sda1 df-h
最重要的一步:“删除现在的分区,重新分区”按d删除现在的分区1,注意:删除后千万不要按w保存!直接按n创建新的分区,然后从原有的柱面开始,一直分到最后的尺寸(默认值两次回车即可,如果之前的分区不是从第一柱面开始,则需要记录之前分区的起始柱面),新的分区操作完毕后,按w保存。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。