初识LVM

初识LVM · Mar 29, 2019 clicks

Logical Volume Manager (LVM),是一种把硬盘驱动器空间分配成逻辑卷的方法,这样硬盘就不必使用分区而被简易的重划分大小。使用LVM,硬盘驱动器或硬盘驱动器集合就会分配给一个或多个物理卷(physical volumes).物理卷无法跨越一个以上的驱动器。
物理卷被合并成逻辑卷组(logical volume group), 唯一的例外是/boot分区。/boot分区不能位于逻辑卷组,因为引导装载程序无法读取它。如果用户想把/分区放在逻辑卷上,需要创建一个分开的/boot分区,它不属于卷组的一部分。由于物理卷无法跨越一个以上驱动器,如要让逻辑卷组跨越一个以上驱动器,就应该在驱动器上创建一个或多个物理卷。
辑卷组被分成逻辑卷(logical volumes),它们被分配了挂载点/boot和/,以及文件系统类型如(ext3).当“分区“达到了它们的极限,逻辑卷组中的空闲空间就可以被添加给逻辑卷来增加分区的大小。当某个新的硬盘驱动器被添加到系统上,它可以被添加到逻辑卷组中,逻辑卷是可以扩展的分区。

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。

 与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如”sales’、 ‘development’)代替物理磁盘名(如’sda’、’sdb’)来标识存储卷 
pvdisplay  / pvs #查看物理卷
vgremove vg1 #删除物理卷组

lvcreate -L 200M -n lv1 vg1 #指定200M大小。名字叫lv1 从vg1卷组中创建

lvremove /dev/vg1/lv1       #删除逻辑卷

 

mkfs.ext4 /dev/vg1/lv1 #格式化

mount /dev/vg1/lv1 /mnt/   #格式化完成以后挂载到/mnt/

fdisk /dev/sdb #新增/dev/sdb5(逻辑分区8e) 2G pvcerate /dev/sdb5 #创建物理卷sdb5 vgextend vg1 /dev/sdb5 #把物理卷sdb5添加到vg1卷组中 lvresize -L 100M /dev/vg1/lv1 #扩容逻辑卷大小

 
 

 

resize2fs命令            针对的是ext2、ext3、ext4文件系统
xfs_growfs命令         针对的是xfs文件系统
 

 

1)ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)

lvextend -L 120G /dev/mapper/centos-home     //增大至120G
lvextend -L +20G /dev/mapper/centos-home     //增加20G
lvreduce -L 50G /dev/mapper/centos-home      //减小至50G
lvreduce -L -8G /dev/mapper/centos-home      //减小8G
resize2fs /dev/mapper/centos-home            //执行调整

2)xfs文件系统的调整命令是xfs_growfs(只支持增大)

lvextend -L 120G /dev/mapper/centos-home    //增大至120G
lvextend -L +20G /dev/mapper/centos-home    //增加20G
xfs_growfs /dev/mapper/centos-home          //执行调整
 
就是说:xfs文件系统只支持增大分区空间的情况,不支持减小的情况(切记!!!!!)。
硬要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了。如果有重要文件,那就歇菜喽~~~

实例1(当系统上还有空闲空间的时候)

1)查看分区空间。如下可知是xfs文件系统(df的-T参数就能看出文件格式)。
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs       200G  2.2G  198G    2% /
devtmpfs                devtmpfs   32G     0   32G    0% /dev
tmpfs                   tmpfs      32G     0   32G    0% /dev/shm
tmpfs                   tmpfs      32G   49M   32G    1% /run
tmpfs                   tmpfs      32G     0   32G    0% /sys/fs/cgroup
/dev/sda1               xfs       197M  139M   59M   71% /boot
tmpfs                   tmpfs     6.3G     0  6.3G    0% /run/user/0
/dev/mapper/centos-home xfs       628G   33M  718G    1% /home

 
2)使用vgdisplay命令查看系统上的空闲空间
root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID            
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               930.80 GiB
  PE Size               4.00 MiB
  Total PE              238285
  Alloc PE / Size       212736 / 831.00 GiB
  Free  PE / Size       25549 / 99.80 GiB       //这一项表示目前该系统上还存在99.80G的空闲空间(25549)
  VG UUID               a5hiAh-LB8M-9lRv-Ps1a-z35L-J4fk-sP3KrF


3) 将上面查到的空闲空间中的90G增减到/home分区上
[root@localhost ~]# lvextend -L +90G /dev/mapper/centos-home       //或者使用-l参数(跟PE数量),即lvextend -l +25500 /dev/mapper/centos-home
  Size of logical volume centos/home changed from 628.00 GiB (160768 extents) to 718.00 GiB (183808 extents).
  Logical volume centos/home successfully resized.

[root@localhost ~]# xfs_growfs /dev/mapper/centos-home
meta-data=/dev/mapper/centos-home isize=512    agcount=4, agsize=41156608 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=164626432, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=80384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 164626432 to 188219392

 
4)再次看着系统分区,发现home分区已经增加了90G(这种方式增加后,home分区之前的数据还不会丢失)
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root  200G  2.2G  198G    2% /
devtmpfs                  32G     0   32G    0% /dev
tmpfs                     32G     0   32G    0% /dev/shm
tmpfs                     32G   49M   32G    1% /run
tmpfs                     32G     0   32G    0% /sys/fs/cgroup
/dev/sda1                197M  139M   59M   71% /boot
tmpfs                    6.3G     0  6.3G    0% /run/user/0
/dev/mapper/centos-home  718G   33M  718G    1% /home

虽然xfs文件系统只支持增加,不支持减少。但并不是说在xfs系统文件下不能减小,只是减小后,需要重新格式化才能挂载上。这样原来的数据就丢失了!
实例2: 这种情况只适用于系统刚安装好,逻辑分区内没有什么数据或数据不多且不重要可以删除或拷贝的情况下

系统安装好后,发现home分区过大,想从home分区中拿出100G给/分区
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs       205G  2.2G  203G    2% /
devtmpfs                devtmpfs   32G     0   32G    0% /dev
tmpfs                   tmpfs      32G     0   32G    0% /dev/shm
tmpfs                   tmpfs      32G   49M   32G    1% /run
tmpfs                   tmpfs      32G     0   32G    0% /sys/fs/cgroup
/dev/sda1               xfs       197M  139M   59M   71% /boot
tmpfs                   tmpfs     6.3G     0  6.3G    0% /run/user/0
/dev/mapper/centos-home xfs       718G   33M  718G    1% /home
 
[root@localhost ~]# umount /home/
 
[root@localhost ~]# lvreduce -L -100G /dev/mapper/centos-home
  WARNING: Reducing active logical volume to 618.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce centos/home? [y/n]: y
  Size of logical volume centos/home changed from 718.00 GiB (183808 extents) to 618.00 GiB (158208 extents).
  Logical volume centos/home successfully resized.

 
上面在重新格式的时候,也可以将这个格式化为ext4格式。
[root@localhost ~]# mkfs.ext4 /dev/mapper/centos-home
[root@localhost ~]# cat /etc/fstab  //将home分区的开机挂载设置里的xfs改为ext4
 
 
 
然后将上面从home分区拿出的100G放到/分区下
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID           
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  9
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               930.80 GiB
  PE Size               4.00 MiB
  Total PE              238285
  Alloc PE / Size       211456 / 826.00 GiB
  Free  PE / Size       26829 / 104.80 GiB
  VG UUID               a5hiAh-LB8M-9lRv-Ps1a-z35L-J4fk-sP3KrF
    
[root@localhost ~]# lvextend -L +100G /dev/mapper/centos-root
  Size of logical volume centos/root changed from 205.00 GiB (52480 extents) to 305.00 GiB (78080 extents).
  Logical volume centos/root successfully resized.
 
[root@localhost ~]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=256    agcount=5, agsize=13107200 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=53739520, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=25600, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 53739520 to 79953920
 
[root@localhost ~]# df -hT        
文件系统                 类型        容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs       305G  2.2G  203G    2% /
devtmpfs                devtmpfs   32G     0   32G    0% /dev
tmpfs                   tmpfs      32G     0   32G    0% /dev/shm
tmpfs                   tmpfs      32G   49M   32G    1% /run
tmpfs                   tmpfs      32G     0   32G    0% /sys/fs/cgroup
/dev/sda1               xfs       197M  139M   59M   71% /boot
tmpfs                   tmpfs     6.3G     0  6.3G    0% /run/user/0
/dev/mapper/centos-home xfs       618G   73M  578G    1% /hom

 

 

对碰LV进行扩展:
①我们可以从VG中给VG中包含的LV进行空间分配
[root@localhost ~]# vgs  查看卷组的空间:如下vg0,包含两个PV(我们期初添加的两块硬盘,LV一个,就是我们创建的lv1,并挂载到了根目录/lv1下)总空间14.99G,Free空间3.99G
  VG   #PV #LV #SN Attr   VSize  VFree
  vg0    2   1   0 wz--n- 14.99g 3.99g
查看lv的空间占用:lv1,所属vg组vg0,lv所占空间11G
[root@localhost ~]# lvs
LV  VG Attr LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
lv1 vg0  -wi-ao---- 11.00g                                                    
现在我们给lv1卷 扩展空间:给lv1 添加1G空间
lvextend -L +1G /dev/vg0/lv1
添加后,使用df -TH发现实际容量并没有变化,因为我们的系统还不认识刚刚添加进来的磁盘的文件系统,所以还
然后使用df -TH 查看,文件系统中空间 增加成功
②如果VG空间用完,我们可以新添加硬盘,然后把硬盘空间添加到VG中,在给LV分配空间
 将我们新添加的硬盘,创建成PV
[root@localhost ~]# pvcreate /dev/sdd 
 Physical volume "/dev/sdd" successfully created 
查看VG用量:vgs
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg_lexzhang    2   1   0 wz--n- 14.99g 1.99g
对vg0卷组进行扩容:如下命令
[root@localhost ~]# vgextend vg_lexzhang /dev/sdd 
  Volume group "vg_lexzhang" successfully extended
再查看添加过后的vg信息:容量已经扩展为17G,原先15G+2G
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg_lexzhang 3   1   0 wz--n- 16.98g 3.98g
卷组容量扩充之后:对卷组内的lv进行扩容:
lvextend -L +1G /dev/vg_lexzhang /LogVol00
扩容之后,lvs查看我们的lv发现容量的确扩展了。
将扩容扩展给文件系统,即让我们的挂载目录重新获取一下存储
 
需要对文件系统进行扩容。
 resize2fs /dev/vg_lexzhang/LogVol00
执行完之后,我们使用命令查看一下我们的硬盘空间
命令:df -TH 发现我们的存储的确扩展