一、 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文件系统不同。需要指定磁盘分区,而非数据目录