🍁 1.导读
想像一个情况,你在当初规划主机的时候将 /home 只给他 50G ,等到使用者众多之后导致这
个 filesystem 不够大, 此时你能怎么作?多数的朋友都是这样:再加一颗新硬盘,然后重新
分区、格式化,将 /home 的数据完整的复制过来, 然后将原本的 partition 卸载重新挂载新的
partition 。啊!好忙碌啊!若是第二次分区却给的容量太多!导致很多磁盘容量被浪费了!
你想要将这个 partition 缩小时,又该如何作?将上述的流程再搞一遍!唉~烦死了,尤其复
制很花时间ㄟ~有没有更简单的方法呢? 有的!那就是我们这个小节要介绍的 LVM 这玩意
儿!
🍁2.概念
LVM使用分层结构,如下图所示
PE(Physical Extend) 物理拓展
PV(Physical Volume) 物理卷
VG(Volume Group) 卷组
LV(Logical Volume) 逻辑卷
⛳️ 2.1 LVM
LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑卷轴管理员。之所以称为“卷
轴”可能是因为可以将 filesystem 像卷轴一样伸长或缩短之故吧!LVM 的作法是将几个实体的
partitions (或 disk) 通过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大
磁盘再经过分区成为可使用分区 (LV), 最终就能够挂载使用了。但是为什么这样的系统可
以进行 filesystem 的扩充或缩小呢?其实与一个称为 PE 的项目有关!
⛳️ 2.2 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 位,因此这个限制已经不存在了。
⛳️ 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 组合
起来的大磁盘!这么想就好了。 那么这个大磁盘最大可以到多少容量呢?这与下面要说明的
PE 以及 LVM 的格式版本有关喔~在默认的情况下, 使用 32位的 Linux 系统时,基本上 LV
最大仅能支持到 65534 个 PE 而已,若使用默认的 PE 为 4MB 的情况下, 最大容量则仅能
达到约 256GB 而已~不过,这个问题在 64位的 Linux 系统上面已经不存在了!LV 几乎没有
啥容量限制了!
⛳️ 2.4 LV
Logical Volume, LV, 逻辑卷轴
最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区的咚咚了!那么
LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV
的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,因此 LV
的设备文件名通常指定为“ /dev/vgname/lvname ”的样式!
通过 PV, VG, LV 的规划之后,再利用 mkfs 就可以将你的 LV 格式化成为可以利用的文件系统
了!而且这个文件系统的容量在未来还能够进行扩充或减少, 而且里面的数据还不会被影
响!实在是很“福气啦!
🍁3.逻辑卷常用命令
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 命令
🍁4.实战案例
⛳️ 4.1 LVM 全流程操作
对/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
⛳️ 4.2 Linux系统分区大小扩展
详细过程请参考以下博客
https://blog.csdn.net/weixin_41645135/article/details/121600400
扩展前
扩展后