1:问题描述
在本地virtualBox创建的虚拟机中,已有了MysqL服务,从外部打包了一个数据库,想要导入到这个虚机的数据库中,将这个sql文件上传到虚机时,执行命令df -h
发现此时虚拟机的磁盘已经用尽(只怪自己当初创建虚拟机时没有分配更多的磁盘),如下图所示
此外,由于磁盘空间用尽,MysqL服务也宕机了,且无法启动,报错如下
ERROR 2002 (HY000): Can't connect to local MysqL server through socket '/var/lib/MysqL/MysqL.sock' (111)
此时想要启动MysqL,必须要释放磁盘空间,方法有2种:
(1)删除无用的大文件
(2)扩容
2:问题解决
(1)删除无用的大文件
这个方法要找到大文件的位置,可以通过在不同的目录下执行如下命令,可以查看当前目录下各个文件所占空间大小
du -sh *
结果如下,可以酌情删除
[root@localhost opt]# du -sh *
684M lbaas
550M x86_20220527.tar.gz
211M x86_20220822.tar.gz
但是这种方式需要自己去找大文件,而且必须要提供足够大的空间,同时还要注意经常清理,最难受的是,一旦想要上传到该虚拟机上的文件过大,就会再次崩溃。因此,我推荐方法(2),一劳永逸。
(2)扩容
步骤1:分配额外的磁盘空间
首先要先关闭虚拟机(virtualBox似乎不支持热扩容),不然如下的配置是灰色,不可操作。
事情到此,还没有结束,因为系统还没有识别到新的磁盘,接着向下操作
步骤2:识别并挂载磁盘
首先打开虚拟机
登录后,我们执行一下命令
df -h
后发现,我们的磁盘空间还是36G,新的4G没有算在内,这是因为系统还没有识别到这个磁盘。1:查看当前虚拟机磁盘
lsblk
输入命令后,能够查看到我们新建的这个磁盘,名字叫sdc,如果你是第一次扩容,名字默认是sdb我们能够看到,之前的sda和第一次我扩容的sdb都在root下,sdc还没有关联上。
2:接着输入命令查看磁盘编号,即返回结果sdc位置
ls /dev/sd*
结果如下
3:创建pv
注意,这里要写你刚创建的盘名,如果你第一次创建,应该是sdb
pvcreate /dev/sdc
如下结果表明创建成功
[root@localhost ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
4:将pv加入到虚拟硬盘组中,扩容
先查询现在的vg组信息,输入vgs
vgs
结果如下,说明此时4G的新空间还没有挂载上来,这里注意如下结果所示,当前的组名为c1,这个名字具体是什么,取决于你自己的虚拟机。
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 2 2 0 wz--n- 36.99g 228.00m
扩展这个虚拟硬盘组(注意这里是c1的组,且sdc和sdb的区别这里不再赘述)
vgextend cl /dev/sdc
结果如下,说明成功扩展vg的卷
[root@localhost opt]# vgextend cl /dev/sdb
Volume group "cl" successfully extended
扩展了vg后我们再执行命令vgs
,发现已经扩展了,变为40G了
不过到这里还差最后一步,才会在df -h中显示新的盘符,实现扩容。
5:扩展lv
先查看lv的信息,输入如下命令
lvs
结果如下,发现还是只有原来的大小
输入命令如下,注意,下面命令的cl-root的来源是vg的名称和root用户的拼接,也可以看做df-h后显示的文件系统的名称
lvextend -L +4G /dev/mapper/cl-root
执行结果如下
[root@localhost ~]# lvextend -L +4G /dev/mapper/cl-root
Size of logical volume cl/root changed from 35.97 GiB (9208 extents) to 39.97 GiB (10232 extents).
Logical volume cl/root successfully resized.
6:让系统重新识别盘符
输入如下命令,同样注意cl-root的名称
xfs_growfs /dev/mapper/cl-root
7:查看磁盘空间df -h
df -h
如下结果,说明扩容成功。