工作中经常碰到有服务器磁盘空间不足的问题,之前写过一篇使用 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,到此,扩容完成。