IT 邦德

糟糕!磁盘爆系统干崩了,LVM来破局!

作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验
擅长主流数据Oracle、MySQL、PG、openGauss运维
备份恢复,安装迁移,性能优化、故障应急处理等

可提供技术业务:
1.DB故障处理/疑难杂症远程支援
2.Mysql/PG/Oracle/openGauss
数据库部署及数仓搭建

•••
微信:jem_db
QQ交流群:587159446
公众号:IT邦德

@

  • 🍁  1.导读

  • 🍁 2.LVM概念

    • ⛳️ 2.1 LVM

    • ⛳️ 2.2 PE

    • ⛳️ 2.3 PV

    • ⛳️ 2.4 VG

    • ⛳️ 2.5 LV

  • 3.LVM 全流程操作

  • 4.Linux系统分区大小扩展

    • 4.1 裸盘划分

    • 4.2 创建PV

    • 4.3 扩展逻辑卷

    • 4.4 确认分区大小

  • 5.总结

前言

!! 近期正在给客户部署几套新的Linux操作系统,讲LVM的基本知识做了下总结

🍁  1.导读

!! 想像一个情况,你在当初规划主机的时候将 /home 只给他 50G ,等到使用者众多之后导致这 个 filesystem 不够大, 此时你能怎么作?多数的朋友都是这样:再加一颗新硬盘,然后重新 分区、格式化,将 /home 的数据完整的复制过来, 然后将原本的 partition 卸载重新挂载新的 partition 。啊!好忙碌啊!若是第二次分区却给的容量太多!导致很多磁盘容量被浪费了!你想要将这个 partition 缩小时,又该如何作?将上述的流程再搞一遍!唉~烦死了,尤其复 制很花时间ㄟ~有没有更简单的方法呢?有的!那就是我们这个小节要介绍的 LVM 这玩意 儿!

🍁 2.LVM概念

!! LVM使用分层结构,如下图所示

Image
PE(Physical Extend) 物理拓展
PV(Physical Volume) 物理卷
VG(Volume Group) 卷组
LV(Logical Volume) 逻辑卷 
Image

⛳️ 2.1 LVM

LVM 的全名是 Logical Volume Manager

!! 中文可以翻译作逻辑卷轴管理员。LVM 的作法是将几个实体的partitions (或 disk) 通过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分区成为可使用分区 (LV), 最终就能够挂载使用了。但是为什么这样的系统可以进行 filesystem 的扩充或缩小呢?其实与一个称为PE的有关!

⛳️ 2.2 PE

Physical Extent, PE, 实体范围区块

!! 简单的说,这个 PE 就有点像文件系统里面的 block 大小啦。这样说应该就比较 好理解了吧?所以调整 PE 会影响到 LVM 的最大容量喔!

⛳️ 2.3 PV

Physical Volume, PV, 实体卷轴

!! 我们实际的 partition (或 Disk) 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),然后再经过 pvcreate 的指令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将这些 PV 加以利用!

⛳️ 2.4 VG

Volume Group, VG, 卷轴群组

!! 所谓的 LVM 大磁盘就是将许多 PV 整合成这个 VG 的东西就是啦!所以 VG 就是 LVM 组合 起来的大磁盘!这么想就好了。

⛳️ 2.5 LV

Logical Volume, LV, 逻辑卷轴

!! 最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区的咚咚了!那么 LV 是否可以随意指定大小呢?当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。为了方便使用者利用 LVM 来管理其系统,因此 LV 的设备文件名通常指定为“ /dev/vgname/lvname ”的样式!

通过 PV, VG, LV 的规划之后,
再利用 mkfs 就可以将你的 LV 格式化成为可以利用的文件系统了!
而且这个文件系统的容量在未来还能够进行扩充或减少, 
而且里面的数据还不会被影响!实在是很“福气啦!

3.LVM 全流程操作

Image
对/dev/sdb 进行分区
50G磁盘大约分 5个 PE,每个 PE 大约 10G
[root@rac1 ~]# fdisk /dev/sdb
[root@rac1 ~]# fdisk -l | grep dev

(1)创建 PV
  [root@rac1 ~]# pvs
  PV         VG      Fmt  Attr PSize  PFree
  /dev/sda2  vg_root lvm2 a--  20.00g 7.80g
  /dev/sda3  vg_root lvm2 a--  29.80g    0

[root@rac1 ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
[root@rac1 ~]#  pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created
root@rac1 ~]#  pvcreate /dev/sdb3
Physical volume "/dev/sdb3" successfully created
root@rac1 ~]#  pvcreate /dev/sdb5
Physical volume "/dev/sdb5" successfully created
[root@rac1 ~]# pvs
  PV         VG      Fmt  Attr PSize  PFree
  /dev/sda2  vg_root lvm2 a--  20.00g  7.80g
  /dev/sda3  vg_root lvm2 a--  29.80g     0
  /dev/sdb1          lvm2 a--  10.00g 10.00g
  /dev/sdb2          lvm2 a--  10.00g 10.00g
  /dev/sdb3          lvm2 a--  10.00g 10.00g
  /dev/sdb5          lvm2 a--  10.00g 10.00g

(2)创建 VG
[root@rac1 ~]#  vgcreate vg_orasoft /dev/sdb1 \
/dev/sdb2 /dev/sdb3 \
/dev/sdb5
  Volume group "vg_orasoft" successfully created
[root@rac1 ~]# vgs
  VG         #PV #LV #SN Attr   VSize  VFree
  vg_orasoft   4   0   0 wz--n- 40.00g 40.00g
  vg_root      2   4   0 wz--n- 49.80g  7.80g
(3)创建 LV
[root@rac1 ~]# lvcreate -n lv_orasoft_u01 -L 40G vg_orasoft
  Logical volume "lv_orasoft_u01" created
[root@rac1 ~]# lvs
  LV             VG         Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_orasoft_u01 vg_orasoft -wi-a----- 40.00g                                             
  Vol00          vg_root    -wi-ao---- 20.00g                                             
  Vol01          vg_root    -wi-ao---- 10.00g                                             
  Vol02          vg_root    -wi-ao---- 10.00g                                             
  Vol03          vg_root    -wi-ao----  2.00g   

(4)创建文件系统:
[root@rac1 ~]# mkfs.ext4 /dev/vg_orasoft/lv_orasoft_u01

[root@rac1 ~]#  mkdir /u01
[root@rac1 ~]# mount /dev/vg_orasoft/lv_orasoft_u01 /u01

(5)加入/etc/fstab 文件
/dev/vg_orasoft/lv_orasoft_u01 /u01 ext4 defaults 0 0

4.Linux系统分区大小扩展

Image

4.1 裸盘划分

root@rhel76 ~]# fdisk /dev/sdb

[root@rhel76 ~]# ll /dev/sd*
brw-rw----. 1 root disk 8,  0 Nov 28 23:34 /dev/sda
brw-rw----. 1 root disk 8,  1 Nov 28 23:34 /dev/sda1
brw-rw----. 1 root disk 8,  2 Nov 28 23:34 /dev/sda2
brw-rw----. 1 root disk 8, 16 Nov 28 23:49 /dev/sdb
brw-rw----. 1 root disk 8, 17 Nov 28 23:49 /dev/sdb1

[root@rhel76 ~]# fdisk -l | grep dev
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sdb1            2048    41943039    20970496   83  Linux
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
/dev/sda1   *        2048     1953791      975872   83  Linux
/dev/sda2         1953792   125829119    61937664   8e  Linux LVM
Disk /dev/mapper/rhel-root: 31.4 GB, 31415336960 bytes, 61358080 sectors
Disk /dev/mapper/rhel-swap: 2000 MB, 2000683008 bytes, 3907584 sectors
Disk /dev/mapper/rhel-u01: 30.0 GB, 30001856512 bytes, 58597376 sectors

4.2 创建PV

[root@rhel76 ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  rhel lvm2 a--  <59.07g 4.00m

[root@rhel76 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.

[root@rhel76 ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree  
  /dev/sda2  rhel lvm2 a--  <59.07g   4.00m
  /dev/sdb1       lvm2 ---  <20.00g <20.00g

4.3 扩展逻辑卷

[root@rhel76 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  rhel   1   3   0 wz--n- <59.07g 4.00m

  [root@rhel76 ~]# vgextend rhel /dev/sdb1

[root@rhel76 ~]# vgextend rhel /dev/sdb1
  Volume group "rhel" successfully extended
[root@rhel76 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  rhel   2   3   0 wz--n- 79.06g 20.00g

[root@rhel76 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  jem_vg   1   0   0 wz--n- <20.00g <20.00g
  rhel     1   3   0 wz--n- <59.07g   4.00m

[root@rhel76 ~]# lvdisplay
 --- Logical volume ---
  LV Path                /dev/rhel/root
  LV Name                root
  VG Name                rhel
  LV UUID                fB06rl-92CE-trM6-e2tM-pP4o-6SKt-p03lGC
  LV Write Access        read/write
  LV Creation host, time rhel76, 2021-06-26 22:04:57 +0000
  LV Status              available
  # open                 1
  LV Size                <29.26 GiB
  Current LE             7490
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  [root@rhel76 ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rhel -wi-ao---- <29.26g                                                    
  swap rhel -wi-ao----   1.86g                                                    
  u01  rhel -wi-ao----  27.94g     

[root@rhel76 ~]# lvextend -L +18G /dev/rhel/root
使用以下命令刷新lv
[root@rhel76 ~]# xfs_growfs /dev/rhel/root

4.4 确认分区大小

Image

5.总结

!! LVM(Logical Volume Manager)逻辑卷管理通过将底层物理硬盘封装起来,以逻辑卷的形式表现给上层应用,逻辑卷的大小可以动态调整,而且不会丢失现在的数据,逻辑卷大小调整时上层服务不需要中止,新加入的硬盘也不会改变现有上层逻辑卷。逻辑卷技术大大提升了磁盘管理的灵活性