哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
一位上进心十足的【大数据领域博主】!
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程,B站及腾讯课堂讲师,直播量破10W
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
想像一个情况,你在当初规划主机的时候将 /home 只给他 50G ,等到使用者众多之后导致这
个 filesystem 不够大, 此时你能怎么作?多数的朋友都是这样:再加一颗新硬盘,然后重新
分区、格式化,将 /home 的数据完整的复制过来, 然后将原本的 partition 卸载重新挂载新的
partition 。啊!好忙碌啊!若是第二次分区却给的容量太多!导致很多磁盘容量被浪费了!
你想要将这个 partition 缩小时,又该如何作?将上述的流程再搞一遍!唉~烦死了,尤其复
制很花时间ㄟ~有没有更简单的方法呢? 有的!那就是我们这个小节要介绍的 LVM 这玩意
儿!
PE(Physical Extend) 物理拓展
PV(Physical Volume) 物理卷
VG(Volume Group) 卷组
LV(Logical Volume) 逻辑卷
LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑卷轴管理员。之所以称为“卷
轴”可能是因为可以将 filesystem 像卷轴一样伸长或缩短之故吧!LVM 的作法是将几个实体的
partitions (或 disk) 通过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大
磁盘再经过分区成为可使用分区 (LV), 最终就能够挂载使用了。但是为什么这样的系统可
以进行 filesystem 的扩充或缩小呢?其实与一个称为 PE 的项目有关!
Physical Extent, PE, 实体范围区块
LVM 默认使用 4MB 的 PE 区块,而 LVM 的 LV 在 32 位系统上最多仅能含有 65534 个 PE
(lvm1 的格式),因此默认的 LVM 的 LV 会有 4M*65534/(1024M/G)=256G。这个 PE 很
有趣喔!他是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是借由写入 PE
来处理的。简单的说,这个 PE 就有点像文件系统里面的 block 大小啦。 这样说应该就比较
好理解了吧?所以调整 PE 会影响到 LVM 的最大容量喔!不过,在 CentOS 6.x 以后,由于
直接使用 lvm2 的各项格式功能,以及系统转为 64 位,因此这个限制已经不存在了。
Physical Volume, PV, 实体卷轴
我们实际的 partition (或 Disk) 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别
码),然后再经过 pvcreate 的指令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将
这些 PV 加以利用!
Volume Group, VG, 卷轴群组
所谓的 LVM 大磁盘就是将许多 PV 整合成这个 VG 的东西就是啦!所以 VG 就是 LVM 组合
起来的大磁盘!这么想就好了。 那么这个大磁盘最大可以到多少容量呢?这与下面要说明的
PE 以及 LVM 的格式版本有关喔~在默认的情况下, 使用 32位的 Linux 系统时,基本上 LV
最大仅能支持到 65534 个 PE 而已,若使用默认的 PE 为 4MB 的情况下, 最大容量则仅能
达到约 256GB 而已~不过,这个问题在 64位的 Linux 系统上面已经不存在了!LV 几乎没有
啥容量限制了!
Logical Volume, LV, 逻辑卷轴
最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区的咚咚了!那么
LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV
的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,因此 LV
的设备文件名通常指定为“ /dev/vgname/lvname ”的样式!
通过 PV, VG, LV 的规划之后,再利用 mkfs 就可以将你的 LV 格式化成为可以利用的文件系统
了!而且这个文件系统的容量在未来还能够进行扩充或减少, 而且里面的数据还不会被影
响!实在是很“福气啦!
pvcreate /dev/sda4
pvdisplay
pvs
vgcreate vg_orasoft /dev/sda4
vgdisplay
vgs
lvcreate -n lv_orasoft_u01 -L 1G vg_orasoft
lvdisplay
lvs
mkfs.ext4 /dev/vg_orasoft/lv_orasoft_u01
mkdir /u11
mount /dev/vg_orasoft/lv_orasoft_u01 /u11
–mv /u01/* /u11/
–扩展逻辑卷
vgextend vg_orasoft /dev/sdb3
–lvextend -L +9G /dev/vg_orasoft/lv_orasoft_u01
lvextend -L 20G /dev/vg_orasoft/lv_orasoft_u01
resize2fs /dev/vg_orasoft/lv_orasoft_u01 #更新文件系统
–收缩逻辑卷
lvreduce -L -4G /dev/vg_orasoft/lv_orasoft_u01
–重命名逻辑卷
lvrename /dev/vg_orasoft/lv_ora_soft_u01 /dev/vg_orasoft/lv_orasoft_u01
— /etc/fstab
/dev/vg_orasoft/lv_orasoft_u01 /u01 ext4 defaults 0 0
/dev/vg_orasoft/lv_orasoft_u02 /u02 ext4 defaults 0 0
/dev/vg_orasoft/lv_orasoft_u03 /u03 ext4 defaults 0 0
/dev/vg_orasoft/lv_oradata_u04 /u04 ext4 defaults 0 0
—找逻辑卷
lvmdiskscan
vgchange -ay
—删除逻辑卷
①首先将正在使用的逻辑卷卸载掉,通过 umount 命令
②将逻辑卷先删除,通过 lvremove 命令
③删除卷组,通过 vgremove 命令
④最后再删除的物理卷,通过 pvremove 命令
对/dev/sdb 进行分区
50G磁盘大约分 5个 PE,每个 PE 大约 10G
[root@rac1 ~]# fdisk -l
[root@rac1 ~]# fdisk /dev/sdb
Command (m for help): n
Partition number (1-4): 1
Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527): +10G
Command (m for help): d #删除分区
Partition number (1-4): 4 #选择要删除分区的分区号,我们选第四个
Disk identifier: 0x000b7170
Device Boot Start End Blocks Id System
/dev/sdb1 1 1306 10490413+ 83 Linux
/dev/sdb2 1307 2612 10490445 83 Linux
/dev/sdb3 2613 3918 10490445 83 Linux
Command (m for help): P
Disk identifier: 0x000b7170
Device Boot Start End Blocks Id System
/dev/sdb1 1 1306 10490413+ 83 Linux
/dev/sdb2 1307 2612 10490445 83 Linux
/dev/sdb3 2613 3918 10490445 83 Linux
/dev/sdb4 3919 6527 20956792+ 5 Extended
/dev/sdb5 3919 5224 10490413+ 83 Linux
/dev/sdb6 5225 6527 10466316 83 Linux
Command (m for help): t
Partition number (1-6): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
[root@rac1 ~]# fdisk -l | grep dev
Disk /dev/sda: 53.7 GB, 53687091200 bytes
/dev/sda1 * 1 26 204800 83 Linux
/dev/sda2 26 2637 20971520 8e Linux LVM
/dev/sda3 2637 6528 31251456 8e Linux LVM
Disk /dev/sdb: 53.7 GB, 53687091200 bytes
/dev/sdb1 1 1306 10490413+ 8e Linux LVM
/dev/sdb2 1307 2612 10490445 8e Linux LVM
/dev/sdb3 2613 3918 10490445 8e Linux LVM
/dev/sdb4 3919 6527 20956792+ 5 Extended
/dev/sdb5 3919 5224 10490413+ 8e Linux LVM
/dev/sdb6 5225 6527 10466316 8e Linux LVM
Disk /dev/mapper/vg_root-Vol03: 2147 MB, 2147483648 bytes
Disk /dev/mapper/vg_root-Vol00: 21.5 GB, 21474836480 bytes
Disk /dev/mapper/vg_root-Vol02: 10.7 GB, 10737418240 bytes
Disk /dev/mapper/vg_root-Vol01: 10.7 GB, 10737418240 bytes
(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
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2621440 inodes, 10485760 blocks
524288 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@rac1 ~]# mkdir /u01
[root@rac1 ~]# mount /dev/vg_orasoft/lv_orasoft_u01 /u01
[root@rac1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_root-Vol00 20G 5.6G 14G 30% /
tmpfs 996M 76K 996M 1% /dev/shm
/dev/sda1 194M 35M 150M 19% /boot
/dev/mapper/vg_root-Vol01 9.9G 151M 9.2G 2% /home
/dev/mapper/vg_root-Vol02 9.9G 151M 9.2G 2% /tmp
/dev/sr0 3.6G 3.6G 0 100% /media/RHEL_6.5 x86_64 Disc 1
/dev/sr0 3.6G 3.6G 0 100% /media/cdrom
/dev/mapper/vg_orasoft-lv_orasoft_u01 40G 176M 38G 1% /u01
(5)加入/etc/fstab 文件
/dev/vg_orasoft/lv_orasoft_u01 /u01 ext4 defaults 0 0
详细过程请参考以下博客
https://blog.csdn.net/weixin_41645135/article/details/121600400
扩展前
扩展后