Linux文件系统扩容
起因:文件系统/DATA仅有60G,目前只剩2%的空间,因为机器是公司总部统一管理的,没办法,舔着脸找总部要资源吧。
然后:如图所示
结果:自己想办法搞吧,博客上看看,眼花缭乱(可能没找到正确的那个),最终翻到了“鸟哥”的一篇,问题解决,感谢“鸟哥”。
一、linux磁盘分区
查看未挂载的的硬盘:fdisk -l
创建分区:fdisk /dev/sdc
输入w保存,q退出。
查看分区:fdisk -l | grep /dev/sdc
根据上述步骤我们可以创建磁盘分区,但是如果在创建过程中搞错了,需要将创建的分区删掉重新创建,此时可以按照下面的步骤进行删除操作,以上述为例,但不真的删除(毕竟已经搞好了),只列步骤。
1)fdisk /dev/sdc进入
Command (m for help):
2)输入d表示删除分区,若有多个分区,则会需要选择分区号
Command (m for help):d
选择分区号
3)输入w,保存退出。
二、磁盘挂载与卸载
1)格式化分区
mkfs.ext4 /dev/sdc2
2)创建挂载目录
mkdir -p /DATA/app
3)挂载分区
mount /dev/sdc2 /DATA/app
4)卸载分区
umount /dev/sdc2 /DATA/app
三、文件系统扩容
首先看一下LVM( Logical Volume Manager)中文可以翻译作逻辑卷轴管理员。之所以称为『卷轴』可能是因为可以将 filesystem 像卷轴一样伸长或缩短之故吧!LVM 的作法是将几个实体的 partitions (或 disk) 透过软件组合成为一块看起来是独立的大磁碟 (VG) ,然后将这块大磁碟再经过分割成为可使用分割槽 (LV), 最终就能够挂载使用了。
1)Physical Volume, PV, 实体卷轴
我们实际的 partition 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),然后再经过 pvcreate 的命令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是通过 fdisk ,上述有记载过!
2)Volume Group, VG, 卷轴群组
所谓的 LVM 大磁碟就是将许多 PV 整合成这个 VG ,所以 VG 就是 LVM 组合起来的大磁碟!这么想就好了。 那么这个大磁碟最大可以到多少容量呢?这与底下要说明的 PE 有关,因为每个 VG 最多仅能包含 65534 个 PE 而已。 如果使用 LVM 默认的参数,则一个 VG 最大可达 256GB 的容量!(参考底下的 PE 说明)
3)Physical Extend, PE, 实体延伸区块
LVM 默认使用 4MB 的 PE 区块,而 LVM 的 VG 最多仅能含有 65534 个 PE ,因此默认的 LVM VG 会有 4M*65534/(1024M/G)=256G。 这个 PE 很有趣喔!他是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是藉由写入 PE 来处理的。 简单的说,这个 PE 就有点像文件系统里面的 block 大小。 所以调整 PE 会影响到 VG 的最大容量!
4)Logical Volume, LV, 逻辑卷轴
最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分割槽的东西!那么 LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,因此 LV 的装置档名通常指定为『 /dev/vgname/lvname 』的样式!
此外,我们刚刚有谈到 LVM 可弹性的变更 filesystem 的容量,那是如何办到的?其实他就是透过『交换 PE 』来进行数据转换, 将原本 LV 内的 PE 移转到其他装置中以降低 LV 容量,或将其他装置的 PE 加到此 LV 中以加大容量! VG、LV 与 PE 的关系有点像下图:
如上图所示,VG 内的 PE 会分给虚线部分的 LV,如果未来这个 VG 要扩充的话,加上其他的 PV 即可。 而最重要的 LV 如果要扩充的话,也是透过加入 VG 内没有使用到的 PE 来扩充的!
5)LVM操作流程
LVM 必需要核心有支持且需要安装 lvm2 这个软件,好在的是, CentOS 与其他较新的 distributions 已经默认将 lvm 的支持与软件都安装妥当了!所以不需要担心这方面的问题!
首先创建磁盘分区,详见一。
1、PV 阶段
要创建 PV 其实很简单,只要直接使用 pvcreate 即可。pvcreate /dev/sdc1
- pvcreate :将实体 partition 创建成为 PV ;
- pvscan :搜寻目前系统里面任何具有 PV 的磁碟;
- pvdisplay :显示出目前系统上面的 PV 状态;
- pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。
更详细的列出系统上每个PV的信息:pvdisplay
这样就将 PV 创建了。
2、VG 阶段
创建 VG 及 VG 相关的命令也不少,我们来看看:
- vgcreate :就是主要创建 VG 的命令!
- vgscan :搜寻系统上面是否有 VG 存在?
- vgdisplay :显示目前系统上面的 VG 状态;
- vgextend :在 VG 内添加额外的 PV ;
- vgreduce :在 VG 内移除 PV;
- vgchange :配置 VG 是否启动 (active);
- vgremove :删除一个 VG !
与 PV 不同的是, VG 的名称是自订的!我们知道 PV 的名称其实就是 partition 的装置档名, 但是这个 VG 名称则可以随便自己取!在底下的例子当中,我将 VG 名称取名为 vbirdvg 。创建这个 VG 的流程是这样的:
vgcreate -s 16M vbirdvg /dev/sdc1
查看vgscan
因为要扩容的是/DATA,而在此之前已经做好了VG,名称为vg_app,上述创建的vg只是为了演示,删除操作:vgremove vbirdvg
这样就创建一个 VG 了!我们要添加这个 VG 的容量,因为我们已经有了/dev/sdc1 ,此时你可以这样做:vgextend vg_app /dev/sdc1
3、LV 阶段
创造出 VG 这个大磁碟之后,再来就是要创建分割区!这个分割区就是所谓的 LV !假设我要将刚刚那个 vbirdvg 磁碟,分割成为 vbirdlv ,整个 VG 的容量都被分配到 vbirdlv 里面去!先来看看能使用的命令:
- lvcreate :创建 LV !
- lvscan :查询系统上面的 LV ;
- lvdisplay :显示系统上面的 LV 状态!
- lvextend :在 LV 里面添加容量!
- lvreduce :在 LV 里面减少容量;
- lvremove :删除一个 LV !
- lvresize :对 LV 进行容量大小的调整!
lvcreate -L +29.996G -n lv_app vg_app
所要扩容的/DATA之前已经创建过LV,上述为演示,删除LV命令为:lvremove /dev/vg_app/lv_app,之前创建过的LV名称为:lv_DATA
4、放大 LV 容量
1)利用 lvresize 将新加入的 PV 内的 PE 加入 lv_DATA中
2)通过 resize2fs 将文件系统的容量确实添加!
lvresize -l +7679 /dev/vg_app/lv_DATA
这样就添加了 LV 了,lvresize 的语法很简单,基本上同样通过 -l 或 -L 来添加!若要添加则使用 + ,若要减少则使用 - !详细的选项请参考 man lvresize !
结果显示LV已经扩到90G,但是文件系统却没有相对添加!执行命令:resize2fs /dev/vg_app/lv_DATA,然后查看:df -h /DATA
最终完成,做个笔记,以后方便查看!
【参考资料:http://cn.linux.vbird.org/linux_basic/0420quota_3.php】