二十二、LVM动态扩容
今日内容:LVM 动态扩容
传统分区方式:直接通过硬件操控,弊端浪费空间
LVM优点:解决传统方式的弊端
LVM弊端:通过LVM来操控硬件,效率略低
六、LVM
1、简介:
我们在对磁盘分区的大小进行规划时,往往不能确定每个分区使用的空间大小,只能凭经验分配一个大小,而我们通常用的fdisk、gdisk等工具对磁盘分区后,每个分区的大小就固定死了,这么做的问题是:
1>如果分区设置过大,会白白浪费磁盘空间;
2>如果分区设置过小,会导致空间不够用的情况出现;
对于分区过小的问题,我们可以重新规划磁盘的分区,或通过软连接的方式,将此分区的目录链接到另外一个分区,这样做虽然能临时解决问题,但却给管理带来了麻烦。
不过这些问题,可以通过LVM来解决~
LVM是一个动态扩容、动态缩容的软件
逻辑卷管理LVM是硬盘的一个系统工具,无论是在Linux或其他系统,都非常好用,传统分区使用固定大小分区,重新调整大小十分麻烦,但LVM可以创建、管理“逻辑”卷,而不是直接使用物理硬盘,可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据,可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷,LVM并不需要重启,就可以让内核知道分区的存在!
通过LVM技术,可以屏蔽掉磁盘分区的底层差异,在逻辑上给文件系统提供了一个卷的概念,然后在这些卷上建立相应的文件系统。
2、LVM的优缺点:
优点:
1>可以在系统运行的状态下,动态的扩展文件系统的大小;
2>文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制;
3>可以增加新的磁盘到LVM的存储电池中;
4>可以以镜像的方式冗余重要的数据到多个物理磁盘;
5>可以方便的导出整个卷组到另一台机器;
缺点:
1>因为加入了额外的操作,存取性能受到影响;
2>卷组中的一个磁盘损坏时,整个卷组都会受到影响;
#LVM若有一个磁盘损坏,整个LVM都坏了,LVM只有动态扩展作用
#方案:底层用raid+上层LVM=既有冗余又有动态扩展
3>在从卷组中移除一个磁盘的时候必须使用reducevg命令
#该命令要求使用root权限,且不允许在快照卷组中使用
1、LVM的基本使用
命令概念:
PV:物理分区
VG:卷组
LV:逻辑卷
作用:卷组将物理分区或卷整合,来拆分成多个逻辑卷
谁家有面也不能都蒸成馒头---郭德纲
买面(PV物理分区)>>>和面(VG卷组)>>>蒸馒头(LV逻辑卷)
准备工作:
安装所需命令: yum install -y lvm2
2、创建逻辑卷LVM
先lsblk查看一下硬盘分区状况:
[root@peng ~] lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 256M 0 part /boot
├─sda2 8:2 0 768M 0 part [SWAP]
└─sda3 8:3 0 19G 0 part /
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 2G 0 part
sdc 8:32 0 40G 0 disk
└─sdc1 8:33 0 5G 0 part
sr0 11:0 1 4.5G 0 rom
1、一次创建两个物理卷PV
[root@peng ~] pvcreate /dev/sdb1 /dev/sdc1
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
[root@peng ~] pvs 看一下pv
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 2.00g 2.00g
/dev/sdc1 lvm2 --- 5.00g 5.00g
2、创建2个卷组VG
[root@peng ~] vgcreate vg1 /dev/sdb1
Volume group "vg1" successfully created
[root@peng ~] vgcreate vg2 /dev/sdc1
Volume group "vg2" successfully created
[root@peng ~] vgs 看一下vg
VG #PV #LV #SN Attr VSize VFree
vg1 1 0 0 wz--n- <2.00g <2.00g
vg2 1 0 0 wz--n- <5.00g <5.00g
3、创建逻辑卷LV
可以指定不同vg卷组
vg1卷组:
[root@peng ~] lvcreate -L 200M -n lv1_from_vg1 vg1
Logical volume "lv1_from_vg1" created.
[root@peng ~] lvcreate -L 400M -n lv2_from-vg1 vg1
WARNING: xfs signature detected on /dev/vg1/lv2_from-vg1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/vg1/lv2_from-vg1.
Logical volume "lv2_from-vg1" created.
[root@peng ~] lvs 看一眼
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1_from_vg1 vg1 -wi-a----- 200.00m
lv2_from-vg1 vg1 -wi-a----- 400.00m
VG2卷组:
[root@peng ~] lvcreate -L 500M -n lv3_from_vg2 vg2
Logical volume "lv3_from_vg2" created.
[root@peng ~] lvcreate -L 300M -n lv4_from_vg2 vg2
Logical volume "lv4_from_vg2" created.
[root@peng ~] lvs 看一眼
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1_from_vg1 vg1 -wi-a----- 200.00m
lv2_from-vg1 vg1 -wi-a----- 400.00m
lv3_from_vg2 vg2 -wi-a----- 500.00m
lv4_from_vg2 vg2 -wi-a----- 300.00m
4、制作文件系统
这里两个卷组各举一个例子:vg1里的lv1,vg2里的lv3:
[root@peng ~] mkfs.xfs /dev/vg1/lv1_from_vg1
meta-data=/dev/vg1/lv1_from_vg1 isize=512 agcount=4, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=51200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@peng ~] mkfs.xfs /dev/vg2/lv3_from_vg2
meta-data=/dev/vg2/lv3_from_vg2 isize=512 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
5、挂载逻辑卷
[root@peng ~] mkdir /test1 /test2
[root@peng ~] mount /dev/vg1/lv1_from_vg1 /test1
[root@peng ~] mount /dev/vg2/lv3_from_vg2 /test2
查看一下
[root@peng ~] df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 19G 2.3G 17G 12% /
/dev/sda1 253M 123M 130M 49% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/vg1-lv1_from_vg1 197M 11M 187M 6% /test1
/dev/mapper/vg2-lv3_from_vg2 497M 26M 472M 6% /test2
6、动态扩容
PS:整体流程:添加硬盘>PV>VG>LV #pv需要新建,vg与lv这一步可以直接添加;
PS:可新添加一块硬盘,从分区一步步添加到Lv;
PS:也可从其他硬盘的分区划分空间,再添加到lv;
这里以两块硬盘各创建一个分区来举例:
1>创建新分区
[root@peng ~] gdisk /dev/sdb
Last sector (4196352-20971486, default = 20971486) or {+-}size{KMGTP}: +1G
[root@peng ~] gdisk /dev/sdc
Last sector (10487808-83886046, default = 83886046) or {+-}size{KMGTP}: +4G
[root@peng ~] partprobe 同步分区表
看一眼是否创建成功
[root@peng ~] lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 256M 0 part /boot
├─sda2 8:2 0 768M 0 part [SWAP]
└─sda3 8:3 0 19G 0 part /
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 2G 0 part
│ ├─vg1-lv1_from_vg1 253:0 0 200M 0 lvm /test1
│ └─vg1-lv2_from--vg1 253:1 0 400M 0 lvm
└─sdb2 8:18 0 1G 0 part 创建成功
sdc 8:32 0 40G 0 disk
├─sdc1 8:33 0 5G 0 part
│ ├─vg2-lv3_from_vg2 253:2 0 500M 0 lvm /test2
│ └─vg2-lv4_from_vg2 253:3 0 300M 0 lvm
└─sdc2 8:34 0 4G 0 part 创建成功
2>创建完制作一下文件系统:
[root@peng ~] mkfs.xfs /dev/sdb2
[root@peng ~] mkfs.xfs /dev/sdc2
3>开始扩容
扩容前先看一眼:
[root@peng ~] vgs
VG #PV #LV #SN Attr VSize VFree
vg1 1 2 0 wz--n- 2.00g 2.41g
vg2 1 2 0 wz--n- 5.00g 4.21g
给VG扩容:
[root@peng ~] vgextend vg1 /dev/sdb2
[root@peng ~] vgextend vg2 /dev/sdc2
扩容成功:
[root@peng ~] vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 2 0 wz--n- 2.99g 2.41g 原来2g成了3g
vg2 2 2 0 wz--n- 8.99g 8.21g 原来5g成了8g
从VG给LV扩容:
[root@peng ~] lvs 查看#扩容前
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1_from_vg1 vg1 -wi-ao---- <0.86g
lv2_from_vg2 vg2 -wi-ao---- <1.86g
[root@peng ~] lvextend -L +1000M /dev/vg1/lv1_from_vg1
[root@peng ~] lvextend -L +2G /dev/vg2/lv2_from_vg2
[root@peng ~] lvs 查看#扩容后
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1_from_vg1 vg1 -wi-ao---- <1.86g
lv2_from_vg2 vg2 -wi-ao---- <3.86g
7、快照