前几天在公司,一台Linux服务器的硬盘空间被用满了,上面装的是Oracle数据库,由于一直追加大量数据而没有及时清理,导致硬盘使用率上升到了100%,本来想通过Oracle管理员进去清除一下Undo文件,系统提示文件系统的剩余空间不足,无法登陆DB用户。由于这台服务器是安装在虚拟机上的,最后的解决办法是通过追加一个虚拟硬盘来扩充文件系统的容量。事后觉得可以把这次解决问题的具体方法整理一下,供大家参考。
大致过程:追加虚拟硬盘,创建物理卷,将物理卷添加到卷组,扩充逻辑卷容量,反映扩充的容量到文件系统。
以下是本次操作的环境:
①物理机:MacOS
②虚拟机软件:VirtualBox 版本5.1.22
③Linux:CentOS Linux release 7.3.1611 (Core)
(1)添加虚拟硬盘需要在虚拟机系统关闭状态下进行。
(2)点击设置,进入下面的窗口。
(3)点击存储,进入下面的窗口,选中【控制器SATA】,后面会显示两个带加号的小图标。
(*我的虚拟机用的硬盘控制器是SATA类型,还有其他类型,如SAS,SCSI等。)
(4)上图正方形小图标是添加硬盘的选项,点击这个图标,会出现如下提示,选择【创建新的虚拟盘】。
(5)选择虚拟硬盘文件类型,我在这里选择VHD,点击【继续】按钮。
(6)设定虚拟硬盘文件分配方式,我在这里选择【动态分配】,然后点击【继续】按钮。
(7)指定文件的路径和大小。
(*我在这里选择8GB,说明虚拟硬盘的存储空间为8GB,由于上面选择的是动态分配,生成后的文件大小最初不到8GB,会随着系统的使用逐渐增大,直到8GB。)
点击【创建】按钮
(8)控制器里面多了一个虚拟硬盘【CentOS02.vhd】,点击【OK】按钮完成添加操作。
(9)启动虚拟机,用root用户登录系统,执行下面命令,确认目录【/dev/】下是否有新添加的硬盘设备。
# ll /dev/sd*
显示的设备中有sdb,这是刚才新添加的硬盘。
(*sda是第一块硬盘,sda1,sda2是它的两个分区,sdb指的是第二块硬盘。)
这步将sdb的全部空间设定为一个分区。
(1)输入下面的命令,进入到分区操作的程序。
# fdisk /dev/sdb
(2)可以输入:m,列出各个参数的说明。
(3)输入:n,追加一个分区。
(4)输入:p,选择主分区。
(5)输入:1,设定分区号为1。
(6)下面的两个参数分别设定开始扇区号和终了扇区号,可以直接输入回车,用默认的值。
(7)输入:w,保存本次操作并退出分区程序。
(8)输入以下命令,确认分区。
# ll /dev/sd*
sdb1即为新建的分区。
(1)使用下面命令将分区创建为物理卷。
# pvcreate /dev/sdb1
(2)查看新添加的物理卷。
# pvdisplay
(1)通过下面的命令,对分区进行格式化。
# mkfs.ext4 /dev/sdb1
(1)先通过下面命令查看卷组信息。
# vgdisplay
可以看到卷组的名称为:【cl】。
(2)然后通过以下命令添加【/dev/sdb1】到卷组【cl】。
# vgextend cl /dev/sdb1
(3)添加成功,通过下面命令确认sdb1所属的卷组。
# pvdisplay
(*sda2为系统既有的物理卷,现在sdb1和sda2在同一个卷组上。)
(1)先通过下面命令查看系统里有哪些逻辑卷。
# lvdisplay
(2)通过下面命令查看逻辑卷挂载的情况。
# df
逻辑卷【/dev/cl/root】挂在于根目录上,这个逻辑卷就是本次要扩充的对象。
(*可以看到逻辑卷【/dev/cl/root】和文件系统【/dev/mapper/cl-root】的路径有所不同,但他们都对应相同的设备。)
(3)通过下面的命令,扩充【/dev/cl/root】的容量。
# lvextend -L +8G /dev/cl/root
(4)系统提示可用的PE(Physical Extend:物理盘区)只有2047个,即4M*2047=8188M,这时需要将追加的大小改一下
# lvextend -L +8188M /dev/cl/root
(5)现在逻辑卷的容量扩充了,但是它对应的文件系统的容量还是原来的大小。
(6)需要通过下面的命令,扩充文件系统的大小。
# xfs_growfs /dev/cl/root
(7)查看文件系统,显示的空间增大了。