1、LVM简介
LVM是(Logical volume manage)逻辑卷管理的缩写。
1)LVM功能:
将多块磁盘或多个分区从逻辑上组合成一个大容量的存储空间。并且在后期可以在线动态的扩大或缩小容量空间,并且不会丢失数据。
2)LVM的管理流程:
磁盘或分区--->创建PV物理卷--->创建VG卷组--->创建LV逻辑卷--->格式化--->挂载
● PV:是物理卷(Physical Volume)的缩写,是指把磁盘或分区转换成PV格式,就是在磁盘或分区上贴上PV的标签。
● VG:是卷组(Volume Group)的缩写,将一个或多个PV组建成一个卷组,意思就是将多个磁盘或多个分区组合成一个大容量的存储空间。
●PE:是物理扩展(Physical Extended)的缩写,是指VG卷组中的最小逻辑单元,每个PE的大小默认是4M,当然创建VG时也可以指定PE的大小。
●LV:是逻辑卷(Logical Volume)的缩写,是指从VG卷组中划分出来一块空间,LV类似于磁盘的一个分区。
●LE:是逻辑扩展(Logical Extended)的缩写,是组成LV逻辑卷的最小单元,每个LE大小跟PE相等,默认4M。
2、LVM管理命令
1)PV物理卷管理命令
命令 | 含义 | 命令格式 |
pvcreate | 创建物理卷PV | pvcreate /dev/xxx |
pvremove | 删除物理卷PV | pvremove /dev/xxx |
pvscan 或 pvs | 扫描PV(查看PV) |
pvs |
pvdisplay | 查看PV的详细信息 | pvdisplay |
pvmove | 移动PV上的数据。移除一个PV但还要保留PV上的数据,就需要这个命令 |
pvmove /dev/xxx(要移除的PV) /dev/xxx(把数据移动到此设备,这个设备必须是和要移除的PV属于一个卷组) |
2)VG卷组管理命令
命令 | 含义 | 格式 |
vgcreate |
创建卷组VG | vgcreate -s 10M vgname /dev/xxx(PV) #-s指定PE单元大小 |
vgremove | 删除卷组VG | vgremove vgname |
vgs | 查看VG | vgs |
vgscan | 重新扫描VG | vgscan |
vgrename | 重命名VG | vgrename 旧VG名 新VG名 |
vgdisplay | 查看VG详细信息 | vgdisplay |
vgextend | 扩展VG | vgextend 卷组名 PV |
vgreduce | 缩小VG | vgreduce 卷组名 PV |
3)LV逻辑卷管理命令
命令 | 含义 | 格式 |
lvcreate |
创建LV逻辑卷 | lvcreate -L 100M(空间大小) -n lvname vgname #-n逻辑卷名 |
lvremove | 删除LV逻辑卷 | lvremove -f /dev/vg0/lv0 #-f强制 |
lvs | 查看LV逻辑卷 | lvs |
lvscan | 扫描(所有磁盘)LV逻辑卷 | lvscan |
lvdisplay | 查看LV详细信息 | lvdisplay |
lvextend | 扩容LV容量 | lvextend -L +100M /dev/vg0/lv0(LV逻辑卷名) # + 要增加的大小 |
lvreduce | 缩小LV容量 | lvextend -L -100M /dev/vg0/lv0(LV逻辑卷名) # - 要缩小的大小 |
提示:lvcreate创建LV的时候,小 l 是指分配PE的个数,大 L 是指分配的空间大小,通常为PE大小的倍数。
3、实例
1)创建PV(物理卷)
[root@localhost /]# ls /dev/sd* /dev/sda /dev/sda2 /dev/sdb2 /dev/sdb5 /dev/sdb7 /dev/sda1 /dev/sdb /dev/sdb3 /dev/sdb6 /dev/sdc [root@localhost /]# pvcreate /dev/sdb{5..7} #把分区创建为PV物理卷 Physical volume "/dev/sdb5" successfully created Physical volume "/dev/sdb6" successfully created Physical volume "/dev/sdb7" successfully created [root@localhost /]# pvs #查看物理卷 PV VG Fmt Attr PSize PFree /dev/sda2 rhel lvm2 a-- 19.51g 40.00m /dev/sdb5 lvm2 --- 5.00g 5.00g /dev/sdb6 lvm2 --- 3.00g 3.00g /dev/sdb7 lvm2 --- 2.00g 2.00g [root@localhost /]# pvcreate /dev/sdc #把sdc磁盘创建为PV物理卷 Physical volume "/dev/sdc" successfully created [root@localhost /]# pvs #查看物理卷 PV VG Fmt Attr PSize PFree /dev/sda2 rhel lvm2 a-- 19.51g 40.00m /dev/sdb5 lvm2 --- 5.00g 5.00g /dev/sdb6 lvm2 --- 3.00g 3.00g /dev/sdb7 lvm2 --- 2.00g 2.00g /dev/sdc lvm2 --- 10.00g 10.00g
2)创建VG(卷组),并指定PE大小为10M,卷组名为vg0
[root@localhost /]# vgcreate -s 10M vg0 /dev/sdb{6..7} #创建VG Volume group "vg0" successfully created [root@localhost /]# vgdisplay vg0 #查看vg0卷组详细信息 --- Volume group --- VG Name vg0 #卷组名 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 4.99 GiB #卷组容量大小 PE Size 10.00 MiB #PE大小 Total PE 511 Alloc PE / Size 0 / 0 Free PE / Size 511 / 4.99 GiB VG UUID G0JbtY-uExW-VtwT-y4pn-6Csk-n5jA-7CYTwp
3)扩容vg0卷组
[root@localhost /]# vgextend vg0 /dev/sdb5 #扩容vg0卷组 Volume group "vg0" successfully extended [root@localhost /]# vgs VG #PV #LV #SN Attr VSize VFree rhel 1 2 0 wz--n- 19.51g 40.00m vg0 3 0 0 wz--n- 9.98g 9.98g #vg0大小由以上的5G变为了10G
4)缩小vg0卷组
[root@localhost /]# vgreduce vg0 /dev/sdb7 Removed "/dev/sdb7" from volume group "vg0" [root@localhost /]# vgs VG #PV #LV #SN Attr VSize VFree rhel 1 2 0 wz--n- 19.51g 40.00m vg0 2 0 0 wz--n- 7.99g 7.99g #vg0大小由以上的10G变为了8G
5)创建LV,大小为500M,逻辑卷名为lv0
[root@localhost /]# lvcreate -L 500M -n lv0 vg0 #创建LV Logical volume "lv0" created. [root@localhost /]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root rhel -wi-ao---- 17.47g swap rhel -wi-ao---- 2.00g lv0 vg0 -wi-a----- 500.00m #lv0逻辑卷
提示:创建LV可以用以下几种方式:
① lvcreate -L 500M -n lv0 vg0 # -L 指定大小
② lvcreate -l 50 -n lv0 vg0 # -l 指定PE的个数
③ lvcreate -l 10%free -n lv0 vg0 # -l 10%free 是指剩余空间的10%
6)格式化lv0逻辑卷并挂载
#格式化为xfs文件系统
[root@localhost /]# mkfs.xfs /dev/vg0/lv0 meta-data=/dev/vg0/lv0 isize=256 agcount=4, agsize=32000 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=128000, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=853, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@localhost /]# mount /dev/vg0/lv0 /lv0/ [root@localhost /]# df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root xfs 18G 4.1G 14G 23% / devtmpfs devtmpfs 783M 0 783M 0% /dev tmpfs tmpfs 795M 0 795M 0% /dev/shm /dev/sda1 xfs 497M 163M 335M 33% /boot /dev/mapper/vg0-lv0 xfs 497M 26M 472M 6% /lv0 #xfs文件系统
#格式化为ext4文件系统
[root@localhost /]# umount /dev/vg0/lv0 [root@localhost /]# mkfs.ext4 /dev/vg0/lv0 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=1024 (log=0) 分块大小=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 128016 inodes, 512000 blocks 25600 blocks (5.00%) reserved for the super user 第一个数据块=1 Maximum filesystem blocks=34078720 63 block groups 8192 blocks per group, 8192 fragments per group 2032 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (8192 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 [root@localhost /]# mount /dev/vg0/lv0 /lv0 [root@localhost /]# df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root xfs 18G 4.1G 14G 23% / devtmpfs devtmpfs 783M 0 783M 0% /dev tmpfs tmpfs 795M 0 795M 0% /dev/shm tmpfs tmpfs 795M 8.6M 787M 2% /run tmpfs tmpfs 795M 0 795M 0% /sys/fs/cgroup /dev/sda1 xfs 497M 163M 335M 33% /boot /dev/mapper/vg0-lv0 ext4 477M 2.3M 445M 1% /lv0 #ext4文件系统
7)扩展LV
#扩展ext4文件系统的lv0逻辑卷
[root@localhost /]# df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root xfs 18G 4.1G 14G 23% / devtmpfs devtmpfs 783M 0 783M 0% /dev /dev/mapper/vg0-lv0 ext4 477M 2.3M 445M 1% /lv0 #ext4文件系统 #扩展lv0逻辑卷 [root@localhost /]# lvextend -L +300M /dev/vg0/lv0 Size of logical volume vg0/lv0 changed from 500.00 MiB (50 extents) to 800.00 MiB (80 extents). Logical volume lv0 successfully resized [root@localhost /]# lvs /dev/vg0/lv0 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-ao---- 800.00m #查看lv0逻辑卷,由之前的500M变为了800M #扩展文件系统 [root@localhost /]# resize2fs /dev/vg0/lv0 resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/vg0/lv0 is mounted on /lv0; on-line resizing required old_desc_blocks = 4, new_desc_blocks = 7 The filesystem on /dev/vg0/lv0 is now 819200 blocks long. [root@localhost /]# df -hT|tail -1 /dev/mapper/vg0-lv0 ext4 767M 2.5M 724M 1% /lv0
#扩展xfs文件系统的lv0逻辑卷
[root@localhost /]# df -hT|tail -1 /dev/mapper/vg0-lv0 xfs 797M 33M 765M 5% /lv0 #xfs文件系统,大小为800M #扩展lv0逻辑卷,增加200M [root@localhost /]# lvextend -L +200M /dev/vg0/lv0 Size of logical volume vg0/lv0 changed from 800.00 MiB (80 extents) to 1000.00 MiB (100 extents). Logical volume lv0 successfully resized #扩展文件系统 [root@localhost /]# xfs_growfs /dev/vg0/lv0 meta-data=/dev/mapper/vg0-lv0 isize=256 agcount=4, agsize=51200 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=204800, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=853, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 204800 to 256000 [root@localhost /]# df -hT|tail -1 /dev/mapper/vg0-lv0 xfs 997M 33M 965M 4% /lv0 #xfs文件系统,大小由之前的800M变为了1000M
注意:扩展逻辑卷步骤为
① 先扩展逻辑卷:lvextend -L +200M /dev/vg0/lv0
② 再扩展文件系统:xfs_growfs /dev/vg0/lv0 #ext4和xfs文件系统的扩展命令是不一样的。resize2fs是扩展ext4文件系统的命令。xfs_growfs是扩展xfs文件系统的命令。
8)缩小LV
#缩小lv0逻辑卷,减少500M (提示:xfs文件系统不支持减小,只支持增加,ext4可以减小)
[root@localhost /]# df -hT|tail -1 /dev/mapper/vg0-lv0 ext4 969M 2.5M 900M 1% /lv0 #ext4文件系统,大小为1000M [root@localhost /]# umount /lv0/ #先卸载lv0 [root@localhost /]# lvdisplay /dev/vg0/lv0 #检查lv0逻辑卷完整性 --- Logical volume --- LV Path /dev/vg0/lv0 LV Name lv0 VG Name vg0 LV UUID gdfWhj-tKFv-w281-m2dW-21wy-rnxf-Q8SS9g LV Write Access read/write LV Creation host, time localhost.localdomain, 2019-06-13 14:41:20 +0800 LV Status available # open 0 LV Size 1000.00 MiB Current LE 100 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2 [root@localhost /]# resize2fs /dev/vg0/lv0 500M -f #减小文件系统 resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vg0/lv0 to 128000 (4k) blocks. The filesystem on /dev/vg0/lv0 is now 128000 blocks long. [root@localhost /]# lvreduce -L 500M /dev/vg0/lv0 #减小lv0逻辑卷 WARNING: Reducing active logical volume to 500.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv0? [y/n]: yes Size of logical volume vg0/lv0 changed from 1000.00 MiB (100 extents) to 500.00 MiB (50 extents). Logical volume lv0 successfully resized [root@localhost /]# mount /dev/vg0/lv0 /lv0/ #挂载lv0逻辑卷 [root@localhost /]# df -hT |tail -1 /dev/mapper/vg0-lv0 ext4 477M 1.5M 440M 1% /lv0 #lv0逻辑卷由之前的1000M,变为了500M
注意:减小逻辑卷的严格4个步骤,必须严格顺序操作
① 先卸载逻辑卷
② 检查逻辑卷完整性
③ 减小文件系统
④ 减小逻辑卷