工作中经常碰到有服务器磁盘空间不足的问题,之前写过一篇使用 fdisk 给新加的磁盘扩容的教程,这种方法适合在一个全新的挂载点上进行操作。若是需挂载的目录下已经有文件了,这种方案会使挂在点下的原文件都被覆盖(umount后才可见到文件)
所以这边引入一个基于fdisk工具,使用另一种方案进行对 已有文件的目录进行挂载 ,那就是LVM。
首先不多说,先给主机加一块磁盘。加完磁盘后,查看磁盘状态。
fdisk -l
图中画框的部分为我为虚拟机新加的 5G 磁盘。那么接下来就让我们对已有文件的/根目录
进行扩容。
Step.1 创建分区
我们已经通过 fdisk 查询命令看到了新加入的磁盘,通过命令选中它
fdisk /dev/sdb #这里跟你的磁盘
按n
创建一个分区,然后系统会问你你要创建主分区还是扩展分区,具体看个人需求,我们这里选择主分区,接下来系统会问你分区号用哪个,一般默认即可。划分分区大小有个小技巧,这里划分的单位是扇区来计量的,其实没必要这么复杂,假设你有 100G 的硬盘加上去,你需要划分几个分区,其中一个你要分 50G,你在这里输入+50G
即可。这里不多阐述,没什么特别需求,一路回车即可~
此时系统告诉你,你创建了个类型为Linux的分区,Linux 分区格式一般是用与 ex4 这样的磁盘格式,这里LVM的话需要修改磁盘格式为 LVM。按t
修改磁盘格式,由 L 查知,8e 为 LVM 的 Hex 码,输入8e
,即可成功修改为 LVM。最后按下w
保存此配置。
在一些较老的系统上,系统可能不会调用ioctl()
来重读分区表,您可能需要通过以下命令来通知系统内核磁盘发生变化,刷新相关信息。
partprobe /dev/sdb #具体看你是哪一块盘了
Step.2 创建物理卷(PV)
透过 fdisk 命令看一下,新建的分区是否已经就绪,如果没问题的话,应该和下图是一样的。
接下来通过以下命令创建物理卷
pvcreate /dev/sdb1 # 创建物理卷
pvdisplay # 查看物理卷
使用下列命令可以删除物理卷
pvremove /dev/sdb1
Step.3 准备卷组(VG)
下列命令用来创建名为’volume-group1’的卷组,使用/dev/sdb1创建。
vgcreate volume-group1 /dev/sdb1
使用vgdisplay
,我们可以看见卷组的使用量/总量。物理卷给卷组提供空间。只要在这个卷组中还有可用空间,我们就可以随意创建逻辑卷。
使用下列命令删除卷组
vgremove volume-group1
对已有卷组添加物理卷
若要对已有卷组添加物理卷,使用vgextend
命令,将物理卷添加到现有卷组中,这样才能在卷组中进行分配。
vgdisplay # 查看卷组
vgextend volume-group1 /dev/sdb1 # 添加到卷组
vgdisplay # 再次查看卷组
可以在返回结果中看到,Free PE / Size
这个字段已经有你加进去的磁盘容量了。
Step.4 对逻辑卷扩容(LV)
下列命令创建一个名为'1v1’、大小为100MB的逻辑卷。我们使用小分区减少执行时间。这个逻辑卷使用之前创建的卷组的空间。
lvcreate -L 100M -n lv1 volume-group1
lvdisplay # 查看一下
现在逻辑卷已经准备好了,我们可以格式化和挂载逻辑卷,就像其它ext2/3/4分区一样!
mkfs.ext4 /dev/volume-group1/lv1
mkdir /lvm-mount
mount /dev/volume-group1/lv1 /lvm-mount/
一旦逻辑卷挂载,我们就可以到挂载点 /lvm-mount/ 上读写了。要创建和挂载其它的逻辑卷,我们重复这个过程。 最后,使用lvremove我们可以删除逻辑卷。
umount /lvm-mount/
lvremove /dev/volume-group1/lv1
对现有逻辑卷扩容
添加进卷组后,就是将剩余空间对逻辑卷进行扩容。
lvdisplay # 查看逻辑卷
lvextend -l +100%FREE $你需要添加的逻辑卷 # 将剩余百分百空间都添加到逻辑卷中
lvdisplay # 再次查看逻辑卷
可以在返回结果中看到,LV Size
这个字段查看现在逻辑卷磁盘容量。最后重新识别一下分区大小,就可以通过 df -h 看到新增的容量了。
e2fsck -f /dev/volume-group1/lv1
运行以下命令扩展文件系统以后,ext4信息就更新了。
resize2fs /dev/volume-group1/lv1
现在,这个逻辑卷应该已经扩展完毕了。我们可以用lvdisplay
来验证。这个逻辑卷可以再次挂载,同样这个方法也可用于其他分区。
OK,到此,扩容完成。