Linux独立服务器和VPS主机硬盘动态扩容-LVM逻辑卷扩大缩小方法

最近新上线SSD服务器,SSD成本太高,所以上线SSD硬盘不能像HDD那样直接来个几TB容量,只能是根据业务的需要来逐渐扩容硬盘,于是本篇文章的主题就这样产生了:Linux动态扩容硬盘容量,保留原有的数据不变。

传统意义上的VPS硬盘扩容使用的是挂载,即将某一个新硬盘重新划分为另一个分区,然后将该分区挂载到原来的硬盘的某一个目录下。这样的做法简单方便,如果仅仅是用于存储扩容还是可行的,但是对于多需求的存储业务就力不从心了。

而对硬盘进行动态扩容,则是保留原有的数据不变的情况下,增加或者减少硬盘的空间容量,从而达到满足我们日常建站需要。这篇文章就来介绍Linux LVM管理磁盘空间的方法,LVM是Linux环境中对磁盘分区进行管理的一种机制。

Linux LVM是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。对于Linux磁盘空间管理的问题,我们还可以通过清理、挂载云盘、共享等方式来解决空间不足的情况,这里有:

  1. Linux系统磁盘空间占满的解决方法-No Space Left on Device错误

  2. VPS挂载国内外网盘实现免费扩容工具:Rclone,COS-Fuse和OSSFS

  3. Linux共享文件夹目录三种方法-NFS远程挂载,GlusterFS共享存储和samba共享目录


一、resize2fs命令直接扩容

命令使用示例:

  1. resize2fs -f /dev/vda1 #针对的是ext2、ext3、ext4文件系统

  2. #参数说明

  3. -d:打开调试特性;

  4. -p:打印已完成的百分比进度条;

  5. -f:强制执行调整大小操作,覆盖掉安全检查操作;

  6. -F:开始执行调整大小前,刷新文件系统设备的缓冲区。


如果你的Linux分区采用了LVM(SolusVM VPS都用的LVM),那么你可以直接使用resize2fs命令来扩容原有的磁盘。这种情况一般见于:用df -h命令查看硬盘的容量小于用fdisk –l命令查看硬盘分区的容量,如下图:

执行resize2fs命令扩容命令后,再次查看,硬盘分区的容量增加了。

二、新建分区挂载给硬盘扩容

如果你的主机商在原来分配硬盘时没有全部做好分区,或者是重新划分了硬盘大小(SolusVM VPS升级硬盘就是这样),这时你会发现用df -h命令查看硬盘的容量等于用fdisk –l命令查看硬盘分区的容量,但是小于fdisk的总空间, 如下图:

这时候我们就可采用新建分区然后挂载给硬盘达到扩容的目的了。执行命令:fdisk /dev/vda(根据实际调整硬盘路径),进入fdisk分区,依次输入n(新建分区)→p(主分区)→1.2.3(分区号)→回车→p(查看分区)→w(保存)。

新建的分区不是LVM格式,我们还需要再次进入到fdisk命令,然后输入:t(转换格式)→分区号1.2.3→8e(LVM)→p(查看分区)→w(保存)。如下图:

利用上面的方法,我们将多出来的3GB硬盘新建了一个sda3的分区,并设置为LVM格式。重启VPS主机生效,或者执行命令:partprobe。

使用以下命令将整个分区创建为LV逻辑卷:(关于PV、VG、LV的详细介绍请参考第三部分内容)

  1. pvcreate /dev/vda3 //创建物理卷

  2. vgcreate qyfoutt /dev/vda3 //创建逻辑卷组

  3. vgchange -ay qyfoutt //激活逻辑卷组

  4. vgdisplay qyfoutt | grep "Total PE" //查看该卷组所有的PE

  5. lvcreate -l 17919 -n qimm qyfoutt //创建逻辑卷

  6. mkfs.ext4 /dev/qyfoutt/qimm //格式化逻辑卷


这里我创建一个名为qyfoutt的逻辑卷组,共70GB可供分配。然后创建了一个名为qimm的逻辑卷,将70GB都赋予给它。开机自动挂载,新增加的/dev/qyfoutt/qimm 分区挂载到某一个目录下了。格式如下:

  1. vim /etc/fstab

  2. /dev/sdb1(磁盘分区) /data1(挂载目录-需要提前创建好) ext4(文件格式,也可写ext3)defaults 0 0


  3. /dev/qyfoutt/qimm /ttfou ext4 defaults 0 0


挂载所有目录:mount -a(注意是英文的-)挂载成功。

三、新增硬盘直接扩容到原硬盘上

如果你购买了第二块硬盘,这时候不需要挂载了,直接将新硬盘的空间容量增加到原硬盘上。如下图,已有了一个256GB的硬盘(已划成3个分区,其中sda3为lvm格式)。按照上面新建分区的方法,将整个硬盘划分为一个分区:sdb1。

3.1 新建PV物理卷

基本命令:

  1. pvcreate /dev/sda3 #新建PV

  2. #有两个以上的分区还可以一起新建PV

  3. pvcreate /dev/sda3 /dev/sdb1


  4. -f:强制创建物理卷,不需要用户确认;

  5. -u:指定设备的UUID;

  6. -y:所有的问题都回答“yes”;

  7. -Z:是否利用前4个扇区。


  8. pvs #查看pv基本信息

  9. pvdisplay #查看pv详细信息


如下图给sdb1创建了PV物理卷。

3.2 扩容VG卷组

按照上面的方法,我们已经创建了PV、VG和LV,并且将LV挂载到了某一个目录。现在把将建的PV加入到原来的VG中。基本命令示例:

  1. vgcreate wzfou /dev/sda3 /dev/sdb1 #将两个PV卷加入到卷组wzfou

  2. -l:卷组上允许创建的最大逻辑卷数;

  3. -p:卷组中允许添加的最大物理卷数;

  4. -s:卷组上的物理卷的PE大小。


  5. vgs或者vgdisplay来查看创建的卷组


  6. vgextend qyfoutt /dev/sdb1 #扩容VG组


如下图我把sdb1和sda3加入了同一个VG组中。

s可以指定PE大小,例如我们在SolusVM主控与被控安装过程中就要求PE为128MB,这里我们就可以通过此命令来指定PE大小了。后期如果还有新的PV的话,可以继续往VG里加:

3.3 扩容LV逻辑卷

上面我们已经扩容了VG卷容量,现在我们只需要将原来的LV扩容到所有的VG卷容量即可,命令如下:

  1. vgdisplay qyfoutt | grep "Total PE" #查看所有PE


  2. lvresize -l 1279 /dev/qyfoutt/qimm #将VG组所有空间都给LV,1279是最后一个PE


  3. resize2fs /dev/qyfoutt/qimm #重设LV大小


示例:VG组有5GB容量,VG下的LV只有3GB。

现在将VG组剩余的2GB空间全部给LV,完成LV的扩容。

四、总结

如果要给硬盘扩容,建议使用LVM的方式来管理硬盘扩容,后期想要再增加硬盘对于LVM来说是一个件非常简单的事情。扩容的基本顺序是:增加PV→VG组扩容→LV扩容。

增加PV有两种方式:一种是新增硬盘再做分区,另一种是在原有的硬盘上新建分区。无论用哪种方式给硬盘扩容,首先要创建物理卷PV,之后创建卷组VG,最后才创建逻辑卷LV。
    A+
发布日期:2019年3月1日  所属分类: 实用技术
标签: