最近新上线SSD服务器,SSD成本太高,所以上线SSD硬盘不能像HDD那样直接来个几TB容量,只能是根据业务的需要来逐渐扩容硬盘,于是本篇文章的主题就这样产生了:Linux动态扩容硬盘容量,保留原有的数据不变。
传统意义上的VPS硬盘扩容使用的是挂载,即将某一个新硬盘重新划分为另一个分区,然后将该分区挂载到原来的硬盘的某一个目录下。这样的做法简单方便,如果仅仅是用于存储扩容还是可行的,但是对于多需求的存储业务就力不从心了。
而对硬盘进行动态扩容,则是保留原有的数据不变的情况下,增加或者减少硬盘的空间容量,从而达到满足我们日常建站需要。这篇文章就来介绍Linux LVM管理磁盘空间的方法,LVM是Linux环境中对磁盘分区进行管理的一种机制。
Linux LVM是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。对于Linux磁盘空间管理的问题,我们还可以通过清理、挂载云盘、共享等方式来解决空间不足的情况,这里有:
命令使用示例:
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。
基本命令:
pvcreate /dev/sda3 #新建PV #有两个以上的分区还可以一起新建PV pvcreate /dev/sda3 /dev/sdb1 -f:强制创建物理卷,不需要用户确认; -u:指定设备的UUID; -y:所有的问题都回答“yes”; -Z:是否利用前4个扇区。 pvs #查看pv基本信息 pvdisplay #查看pv详细信息
如下图给sdb1创建了PV物理卷。
按照上面的方法,我们已经创建了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里加:
上面我们已经扩容了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。
文章出自:挖站否 https://wzfou.com/linux-lvm/,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
文章更新于: %s = human-readable time difference 下午9:35
查看评论
请教一下aws的20G快照回复到160G的机子上空间只有20G的解决方法。resize2fs /dev/vda1好像不管用。
应该要重新分区了,resize2fs /dev/vda1是在原有分区的基础上进行扩容。如果没有分区,就不会扩容。
LVM扩容容易缩小难啊,加密之后难上难(整个LVM物理卷)
[lt切克闹] 准备换linux了,收藏备用
收藏一下,下次可以用到。
硬盘分区最大好像不能超过4TB
Linux filesystem 可以試試 BtrFS 哦。
好的,下次试试。