LVM逻辑卷

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个步骤,必须严格顺序操作

① 先卸载逻辑卷

② 检查逻辑卷完整性

③ 减小文件系统

④ 减小逻辑卷


上一篇:硬盘的挂载和磁盘逻辑卷的管理


下一篇:lvm