最近新上线SSD服务器,SSD成本太高,所以上线SSD硬盘不能像HDD那样直接来个几TB容量,只能是根据业务的需要来逐渐扩容硬盘,于是本篇文章的主题就这样产生了:Linux动态扩容硬盘容量,保留原有的数据不变。
传统意义上的VPS硬盘扩容使用的是挂载,即将某一个新硬盘重新划分为另一个分区,然后将该分区挂载到原来的硬盘的某一个目录下。这样的做法简单方便,如果仅仅是用于存储扩容还是可行的,但是对于多需求的存储业务就力不从心了。
而对硬盘进行动态扩容,则是保留原有的数据不变的情况下,增加或者减少硬盘的空间容量,从而达到满足我们日常建站需要。这篇文章就来介绍Linux LVM管理磁盘空间的方法,LVM是Linux环境中对磁盘分区进行管理的一种机制。
Linux LVM是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。对于Linux磁盘空间管理的问题,我们还可以通过清理、挂载云盘、共享等方式来解决空间不足的情况,这里有:
- 解决因Linux系统磁盘空间不足导致No Space Left on Device错误(含inode占用100%问题)
- Linux简单共享目录三种方法:NFS挂载/GlusterFS存储/samba共享
展开索引
一、resize2fs命令直接扩容
命令使用示例:
- resize2fs -f /dev/vda1 #针对的是ext2、ext3、ext4文件系统
- #参数说明
- -d:打开调试特性;
- -p:打印已完成的百分比进度条;
- -f:强制执行调整大小操作,覆盖掉安全检查操作;
- -F:开始执行调整大小前,刷新文件系统设备的缓冲区。
如果你的Linux分区采用了LVM,那么你可以直接使用resize2fs命令来扩容原有的磁盘。这种情况一般见于:用df -h命令查看硬盘的容量小于用fdisk –l命令查看硬盘分区的容量,如下图:
执行resize2fs命令扩容命令后,再次查看,硬盘分区的容量增加了。
二、新建分区挂载给硬盘扩容
如果你的主机商在原来分配硬盘时没有全部做好分区,或者是重新划分了硬盘大小,这时你会发现用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大小,例如我们在某些云主机中就要求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。
(END)
文章出自:挖站否 https://wzfou.com/linux-lvm/,版权所有。