一、 LVM逻辑卷概述(名词解释)

LVM(Logical Volume Manager)是基于内核的一种逻辑卷管理器,LVM适合于管理大存储设备,并允许用户动态调整文件系统大小。

1、物理卷(Physical Volume, PV

物理卷是LVM的最底层概念,是LVM的逻辑存储块,物理卷与磁盘分区是逻辑的对应关系。LVM提供了命令工具可以将分区转换为物理卷,通过组合物理卷生成卷组。

2、卷组( Volume Group,VG)

卷组是LVM逻辑概念上的磁盘设备,通过将单个或多个物理卷组合后生成卷组。卷组的大小取决于物理卷的容量及个数。在Centos7系统中,对容量与个数没有限制。

3、逻辑卷(Logical Volume, LV

逻辑卷就是LVM逻辑意义上的分区,我们可以指定从卷组中提取多少容量来创建逻辑卷,最后对逻辑卷格式化并挂载使用。

二、lvm分区创建、修改、删除和格式化lvm类型的磁盘

2.1 格式化磁盘的大概逻辑(只创建的话从2.3开始看就行)

在直接格式化之前使用lvm类型的mkfs ext4 /dev/sdb磁盘的时候出了异常,所以需要先把原本lvm的分区清除,再重新格式化


2.2 清除lvm磁盘信息

2.2.1 删除lv

查看逻辑卷 lv

[root@ ~]# lvs
  LV     VG     Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvdata vgdata -wi-ao---- <150.00g

删除之前lv逻辑分区

**删除逻辑卷失败**
[root@test ~]# lvremove  /dev/vgdata/lvdata
  Logical volume vgdata/lvdata contains a filesystem in use.
#删除失败,还在使用,取消挂载就可以了
**取消挂载**
[root@test ~]# umount /dev/vgdata/lvdata
**再次删除逻辑卷,确认删除**
[root@test ~]# lvremove  /dev/vgdata/lvdata
Do you really want to remove active logical volume vgdata/lvdata? [y/n]: y
  Logical volume "lvdata" successfully removed
[root@test ~]#lvs
#反馈为空

2.2.2 删除vg(vgtest为vg名称,根据实际信息调整)

查看所有vg和vg的大小(注意:一个磁盘一个对应一个vg需要删除,如果是一个vg纳管了多个盘包括了我们要格式化的/dev/sdb就不用执行删除vg的操作!)

**查看vg**
[root@test ~]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree
  vgdata   1   0   0 wz--n- <150.00g <150.00g
**删除vg**
[root@test ~]# vgremove  vgdata
  Volume group "vgdata" successfully removed

2.2.3删除pv(/dev/sdb1为名字,根据实际信息调整)

**lsblk 中 sdb能看出还是有pv**
[root@test ~]# lsblk -f
NAME   FSTYPE      LABEL UUID                                   MOUNTPOINT
sda
└─sda1 xfs               9cff3d69-3769-4ad9-8460-9c54050583f9   /
sdb
└─sdb1 LVM2_member       JYLqsH-Q3Bn-OQU0-j558-1dsc-oZLs-jeUNzk
**查看pv**
[root@test ~]# pvs
  PV         VG Fmt  Attr PSize    PFree
  /dev/sdb1     lvm2 ---  <150.00g <150.00g
**删除pv**
[root@test ~]# pvremove  /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped.
**lsblk 中 sdb看不出pv了**
[root@test ~]# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
└─sda1 xfs          9cff3d69-3769-4ad9-8460-9c54050583f9 /
sdb
└─sdb1

2.2.4删除sdb1分区(删除分区,根据实际信息调整)

[root@test ~]# fdisk /dev/sdb

# 进入fdisk交互界面后,依次输入以下命令:
d  # 删除分区
[分区号]  # 要删除的分区号,如果只有一个分区默认选中
w  # 将分区表写入磁盘并退出


2.3 重新创建lvm类型磁盘

2.3.1 创建分区

**查看**
[root@test ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk
└─sda1   8:1    0   40G  0 part /
sdb      8:32   0  100G  0 disk
***创建分区***
[root@test ~]# fdisk /dev/sdb
# 进入fdisk交互界面后,依次输入以下命令:
n  # 创建新分区,可以默认直接回车
p  # 创建主分区,可以默认直接回车
1  # 输入分区号,这里设置为1,可以默认直接回车
[起始扇区]  # 设置起始扇区,可以默认直接回车
[结束扇区]  # 设置结束扇区,可以默认直接回车
w  # 将分区表写入磁盘并退出

**查看**
[root@test ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk
└─sda1   8:1    0   40G  0 part /
sdb      8:32   0  100G  0 disk
└─sdb1   8:33   0  100G  0 part

2.3.2创建lvm类型磁盘

物理卷 PV,纳管磁盘到pv

[root@test ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
**查看**
[root@test ~]# pvs
  PV         VG Fmt  Attr PSize   PFree
  /dev/sdb1     lvm2 ---  100.00g 100.00g

卷组 VG,创建vg名字为vgdata,并使用vgs命令检查创建的vgdata组是否为有效容量(sizi和free非0就可以)

[root@test ~]# vgcreate  vgdata /dev/sdb1
  Volume group "vgdata" successfully created
**查看**
[root@test ~]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree
  vgdata   1   0   0 wz--n- <100.00g <100.00g

逻辑卷 LV,创建lv(引用vg的容量)

**创建lvs使用卷组vgdata中的所有可用空间**
[root@test ~]# lvcreate -l 100%FREE -n lvdata vgdata

格式化磁盘

[root@ ~]# mkfs.xfs  /dev/vgdata/lvdata
Discarding blocks...Done.
meta-data=/dev/vgdata/lvdata     isize=512    agcount=4, agsize=6553344 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=26213376, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=12799, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

2.3.3挂载并写入/etc/fstab文件,保证重启后不会掉盘

mkfs ext4 /dev/sdb
fdisk /dev/sdb

vi /etc/fstab并把磁盘和目录信息写入到配置文件

/dev/vgdata/lvdata  /data xfs defaults 0 0

执行命令自动挂载,并检查是否完成

[root@test ~]# mount -a
[root@test ~]# df -h
Filesystem                 Size  Used Avail Use% Mounted on
devtmpfs                   1.9G     0  1.9G   0% /dev
tmpfs                      1.9G   64K  1.9G   1% /dev/shm
tmpfs                      1.9G  193M  1.7G  11% /run
/dev/sda1                  100G  3.1G   37G   8% /
/dev/mapper/vgdata-lvdata  100G   33M  100G   1% /data

2.4 扩容

2.4.1扩容分区

#指定扩容的磁盘以及需要扩容的分区号,此命令适用于系统盘与数据盘扩容,但是只能扩容磁盘的最后一个分区

*sdb与1之间有空格

**查看**
[root@test ~]# lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                 8:0    0   40G  0 disk
└─sda1              8:1    0   40G  0 part /
sdb                 8:32   0  150G  0 disk
└─sdb1              8:33   0  100G  0 part
  └─vgdata-lvdata 253:0    0  100G  0 lvm  /data

**扩容**
[root@test ~]# growpart /dev/sdb 1
CHANGED: partition=1 start=2048 old: size=209715200 end=209717248 new: size=314570719 end=314572767
**查看**
[root@test ~]# lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                 8:0    0   40G  0 disk
└─sda1              8:1    0   40G  0 part /
sdb                 8:32   0  150G  0 disk
└─sdb1              8:33   0  150G  0 part
  └─vgdata-lvdata 253:0    0  100G  0 lvm  /data

2.4.2扩容pv

#此操作扩容完成后,如果vg卷组内只有一个pv,vg卷组会自动扩容,可用vgdisaplay查看卷组扩容情况

**查看**
[root@test ~]# vgdisplay
  --- Volume group ---
  VG Name               vgdata
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <100.00 GiB
  PE Size               4.00 MiB
  Total PE              25599
  Alloc PE / Size       25599 / <100.00 GiB
  Free  PE / Size       0 / 0
  VG UUID               RPJbPA-TVo1-SMEP-EgUI-iFHn-kpGp-bNRdtY
**扩容**
[root@test ~]# pvresize /dev/sdb1
  Physical volume "/dev/sdb1" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
**查看**
[root@test ~]# vgdisplay
  --- Volume group ---
  VG Name               vgdata
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <150.00 GiB
  PE Size               4.00 MiB
  Total PE              38399
  Alloc PE / Size       25599 / <100.00 GiB
  Free  PE / Size       12800 / 50.00 GiB
  VG UUID               RPJbPA-TVo1-SMEP-EgUI-iFHn-kpGp-bNRdtY

2.4.3扩容逻辑卷

 # -r 参数可以在扩容逻辑卷的同时自动扩容文件系统,无须再手动刷新文件系统

**扩容**
[root@test ~]# lvextend -l +100%FREE /dev/vgdata/lvdata
  Size of logical volume vgdata/lvdata changed from <100.00 GiB (25599 extents) to <150.00 GiB (38399 extents).
  Logical volume vgdata/lvdata successfully resized.
**自动扩容**
[root@test ~]# lvextend -r -l +100%FREE /dev/vgdata/lvdata
  Size of logical volume vgdata/lvdata unchanged from <150.00 GiB (38399 extents).
  Logical volume vgdata/lvdata successfully resized.
meta-data=/dev/mapper/vgdata-lvdata isize=512    agcount=4, agsize=6553344 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=26213376, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=12799, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 26213376 to 39320576
**查看**
[root@test ~]# lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                 8:0    0   40G  0 disk
└─sda1              8:1    0   40G  0 part /
sdb                 8:32   0  150G  0 disk
└─sdb1              8:33   0  150G  0 part
  └─vgdata-lvdata 253:0    0  150G  0 lvm  /data

三、非逻辑卷扩容


3.1.1扩容分区

#指定扩容的磁盘以及需要扩容的分区号,此命令适用于系统盘与数据盘扩容,但是只能扩容磁盘的最后一个分区

*sdb与1之间有空格

growpart /dev/db 1

*如果提示unexpected output in sfdisk –version

执行  LANG=en_US.UTF-8 后再扩容

3.1.2扩容文件系统

如果不知道是什么文件系统,执行blkid回车查看TYPE类型

xfs文件系统:xfs_growfs /data  #指定数据磁盘挂载目录,扩容

ext4文件系统:resize2fs /dev/sdb1  #此地方与xfs文件系统不同。需要指定磁盘分区,而非数据目录