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

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

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

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

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

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

  1. Linux系统磁盘空间占满的解决方法-No Space Left on Device错误
  2. VPS挂载国内外网盘实现免费扩容工具:Rclone,COS-Fuse和OSSFS
  3. Linux共享文件夹目录三种方法-NFS远程挂载,GlusterFS共享存储和samba共享目录

一、resize2fs命令直接扩容

命令使用示例:

resize2fs -f /dev/vda1  #针对的是ext2、ext3、ext4文件系统
#参数说明
-d:打开调试特性;
-p:打印已完成的百分比进度条;
-f:强制执行调整大小操作,覆盖掉安全检查操作;
-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主机生效,或者执行命令(该命令在CentOS 6可能会不支持):partprobe。(如果提示该命令不存在,先执行安装:yum -y install parted

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

pvcreate /dev/vda3  //创建物理卷
vgcreate qyfoutt /dev/vda3   //创建逻辑卷组
vgchange -ay qyfoutt //激活逻辑卷组
vgdisplay qyfoutt | grep "Total PE"  //查看该卷组所有的PE
lvcreate -l 17919 -n qimm qyfoutt  //创建逻辑卷
mkfs.ext4 /dev/qyfoutt/qimm //格式化逻辑卷

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

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

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

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

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

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

3.1  新建PV物理卷

基本命令:

pvcreate /dev/sda3 #新建PV
#有两个以上的分区还可以一起新建PV
pvcreate /dev/sda3 /dev/sdb1

-f:强制创建物理卷,不需要用户确认;
-u:指定设备的UUID;
-y:所有的问题都回答“yes”;
-Z:是否利用前4个扇区。

pvs  #查看pv基本信息
pvdisplay  #查看pv详细信息

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

3.2  扩容VG卷组

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

vgcreate wzfou /dev/sda3 /dev/sdb1 #将两个PV卷加入到卷组wzfou
-l:卷组上允许创建的最大逻辑卷数;
-p:卷组中允许添加的最大物理卷数;
-s:卷组上的物理卷的PE大小。

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

vgextend qyfoutt /dev/sdb1 #扩容VG组

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

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

3.3  扩容LV逻辑卷

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

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

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

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

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

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

四、总结

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

增加PV有两种方式:一种是新增硬盘再做分区,另一种是在原有的硬盘上新建分区。无论用哪种方式给硬盘扩容,首先要创建物理卷PV,之后创建卷组VG,最后才创建逻辑卷LV。

发表评论