背景
virtualbox是开源免费的虚拟化软件,这也是我放弃vmware转而使用他的原因。在练习docker操作的时候,磁盘大小不够了,费了不少力气才成功扩容,记录一下过程。
找了几个博客,发现都不太好操作,有的需要安装个什么扩容工具才能实现扩容,索性就自己操作了。(后来也发现了类似的lvm扩容的方式,与本文原理一样)
扩容前大小:
可以看到根目录已经快满了。
1.确认虚拟磁盘介质
选中左侧你的虚拟机,点设置,点存储,看到后面的磁盘为centos7-disk001.vdi
2.工具 - 虚拟硬盘 找到对应的虚拟硬盘。
我这里因为虚拟机是复制的,磁盘名显示一样,但鼠标放上去是能看到具体虚拟机名称的,以此区分。
3.扩容
还是刚才的页面,下方就是扩容的地方。直接输入扩容后的大小,如40G。
4.进入系统,查看硬盘
这里使用fdisk,使用parted也可以
合理可以看到,/dev/sda大小已经是42.9G了,这里注意看扇区数,当前/dev/sda2已经到41943039编号的扇区了,而扇区一共是83886080,这多出来的就是咱们扩容的磁盘。
5.建立新分区
跟windows类似,想使用新硬盘,需要建立分区,分配盘符进行使用(当然linux下分配盘符也就是mount操作了,咱们这里是把他加入lvm)。
这一步就是输入两个命令 ,n表示new一个分区。p表示添加的是primary分区(稍微解释下,primary分区限定为四个,具体与扩展分区有什么区别我也不太清楚,一般可以认为无区别,这里加一个extended扩展分区也是可以的,扩展分区不限个数)。
6.查看磁盘分区情况
输入p打印分区列表,输入w表示写入fstab。这里看到多了个/dev/sda3。
7.对新分区格式化
使用mkfs.ext4命令对新分区格式化。遇到提示直接回车即可。
8.新分区创建pv并加入vg
将新分区创建pv,并将新创建的pv加入vg
这里是两步操作,使用pvcreate命令将分区标记为pv。
然后vgextend将pv加入vg。vg的名字通过vgs可以看到,也可以df -h推断出来。
9.确定操作哪个lvm
这里是我扩容后的,root已经是36.9G了。结合df -h的输出进行判断:
/dev/mapper/centos-root 17G 17G 690M 97% /
这里当然要给root扩容,对应的路径是/dev/mapper/centos-root
也就是/dev/mapper/vg名-lv名
10.扩容
使用lvextend命令进行扩容,这里扩容19.9G。
(后面看了其他博客,发现可以 lvextend -L +100%FREE /dev/mapper/centos-root的方式,这样更好,能避免空间浪费,我这里就直接写死了)
11.更新挂载点磁盘大小
最后执行xfs_growfs,执行后,df -h看到的/根路径磁盘大小才会变。
这样就扩容成功了。
题外话: 对lvm的简单说明:
主要就是三个命令,pvs查看pv,vgs查看vg,lvs查看lv。
通过fdisk或parted能够将物理磁盘划分分区。通过pvcreate能够将分区转换为pv,
通过vgextend能够将pv加入vg(vg是通过vgcreate创建的)。
通过lvcreate可以创建lv,通过lvextend扩展lv。
lvm能够无限扩容的原理就是,vg可以无限添加pv,而pv可以位于不同磁盘上,这样可以简单的通过添加新磁盘来扩容,又不影响原有的目录结构(不需要unmount、mount重新挂载操作)。