LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘
它就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
逻辑卷管理的核心在于如何处理我们系统中安装的硬盘及其分区,对于我们的逻辑卷管理器来说,把硬盘当作物理卷来看
先来了解一下常用的名词解释
物理存储介质(The physical media)
这里指系统的存储设备文件,可是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用
物理卷PV(physical volume)
物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数 (注册物理设备以便在卷组中使用),创建物理卷它可以用硬盘分区,也可以用硬盘本身;
卷组VG(Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,一个LVM卷组由一个或多个物理卷组成
逻辑卷LV(logical volume)
类似于非LVM系统中的硬盘分区,LV建立在VG之上,可以在LV之上建立文件系统
PE(physical extents)
PV中可以分配的最少存储单元,PE的大小是可以指定的,默认为4MB
LE(logical extent)
LV中可以分配的最少存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应
使用卷组,使多个硬盘空间看起来像是一个大的硬盘
使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
在使用逻辑卷时,它可以在空间不足时动态调整它的大小
在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
可以在线对LV,VG 进行创建,删除,调整大小等操作。LVM上的文件系统也需要重新调整大小。
可以将正在使用中的硬盘迁移到别的硬盘上(emc--500G DELL---1.2T)
允许创建快照,可以用来保存文件系统的备份。只能使用一次
解释:
LVM是软件的卷管理方式,而RAID是磁盘保护的方法。对于重要的业务来说,一般是同时存在。RAID用来保护物理的磁盘不会因为故障而中断业务。LVM用来实现对卷的良性的管理,更好的利用磁盘资源
1) 先做物理卷 pvcreate /dev/sdb1
2) 把不同的物理卷加入到卷组当中 vgcreate datavg /dev/sdb1
3) 创建逻辑卷 lvcreate
4) 格式化文件系统 mkfs.xfs
5)创建挂载点并进行挂载 mount
功能 |
PV管理命令 |
VG管理命令 |
LV管理命令 |
scan 扫描 |
pvscan |
vgscan |
lvscan |
create 创建 |
pvcreate |
vgcreate |
lvcreate |
display显示 |
pvdisplay |
vgdisplay |
lvdisplay |
remove 移除 |
pvremove |
vgremove |
lvremove |
extend 扩展 |
|
vgextend |
lvextend |
reduce减少 |
|
vgreduce |
lvreduce |
查看卷名 |
简单对应卷信息的查看 |
扫描相关的所有的对应卷 |
详细对应卷信息的查看 |
物理卷 |
pvs |
pvscan |
pvdisplay |
卷组 |
vgs |
vgscan |
vgdisplay |
逻辑卷 |
lvs |
lvscan |
lvdisplay |
准备硬盘
定义物理卷:fdisk /dev/sdb ==> t ==>选择分区号 ===》 8e ==》w
创建pv
#pvcrate device-name
把物理卷标记为LVM系统中的分区
#vgcreate vgname pv1 pv2 ...
查看VG简要信息
查看VG详细信息
再去看一下你的物理卷
#lvcreate -n 指定新逻辑卷名称 -L 指定大小(M,G){-l 指定LE的数量} vgname
指定PE的大小用的参数: -s
[root@xuegod1603 ~]# vgcreate -s 16M vg01 /dev/sdb7
Volume group "vg01" successfully created
[root@xuegod1603 ~]# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size 96.00 MiB
PE Size 16.00 MiB
Total PE 6
Alloc PE / Size 0 / 0
Free PE / Size 6 / 96.00 MiB
VG UUID h6zoV3-h4eO-XN6H-16mf-8H0K-S9yI-GVNbJZ
PE的大小只有为2的幂数,且最大为512M
首先,确定一下是否还有可扩容的空间,因为空间是从VG里面创建的。所以我们要保证VG还有剩余空间,而且LV不能够跨VG扩容的
用的命令如下:
extend扩展 |
vgextend |
lvextend |
扩容逻辑卷
[root@xuegod1603 ~]# lvextend -L +50m /dev/datavg/waslv
Rounding size to boundary between physical extents: 52.00 MiB.
Size of logical volume datavg/waslv changed from 32.00 MiB (8 extents) to 84.00 MiB (21 extents).
Logical volume datavg/waslv successfully resized.
说明:在指定大小的时候,扩容50m和扩容到50m是不一样的写法
扩容50m ===》 -L +50m
扩容到50M ==》 -L 50m
看一下文件系统是否扩容成功?
上面我们可以看到LV虽然扩展了,但是文件系统大小还是原来的
对ext类型文件系统扩容: resize2fs
对xfs类型文件系统扩容: xfs_growfs
resize2fs和xfs_growfs 两者的区别是传递的参数不一样的,xfs_growfs是采用的挂载点;resize2fs是逻辑卷名称,而且resize2fs命令不能对xfs类型文件系统使用
除了上在的文件系统扩容方式,还有一种替代方式:在lvextend命令中加参数 -r ,它是支持多种不同的文件系统,比如: ext3 ext4 xfs...
[root@xuegod1603 ~]# lvextend -r -L +20M /dev/datavg/waslv
Size of logical volume datavg/waslv changed from 84.00 MiB (21 extents) to 104.00 MiB (26 extents).
Logical volume datavg/waslv successfully resized.
meta-data=/dev/mapper/datavg-waslv isize=512 agcount=6, agsize=4096 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=21504, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 21504 to 26624
[root@xuegod1603 ~]# df -Th /was/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/datavg-waslv xfs 101M 1.9M 99M 2% /was
[root@xuegod1603 ~]# lvextend -r -L +20M /dev/datavg/weblv
Size of logical volume datavg/weblv changed from 60.00 MiB (15 extents) to 80.00 MiB (20 extents).
Logical volume datavg/weblv successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/datavg-weblv is mounted on /weblv; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/datavg-weblv is now 81920 blocks long.
[root@xuegod1603 ~]# df -Th /weblv
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/datavg-weblv ext4 77M 1.4M 72M 2% /weblv
前提要准备物理卷
扩容VG
LV的缩小
[root@xuegod1603 ~]# lvreduce -L -34m /dev/datavg/waslv
Rounding size to boundary between physical extents: 32.00 MiB.
WARNING: Reducing active and open logical volume to 72.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce datavg/waslv? [y/n]: y
Size of logical volume datavg/waslv changed from 104.00 MiB (26 extents) to 72.00 MiB (18 extents).
Logical volume datavg/waslv successfully resized.
LINUX7只能对LV动态增加,但是XFS不支持缩减
VG的缩小,前提要保证pv没有被使用
[root@xuegod1603 ~]# vgreduce datavg /dev/sdb8
Removed "/dev/sdb8" from volume group "datavg"
[root@xuegod1603 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rootvg lvm2 a-- 12.00g 0
/dev/sdb10 lvm2 --- 100.00m 100.00m
/dev/sdb5 datavg lvm2 a-- 96.00m 0
/dev/sdb6 datavg lvm2 a-- 96.00m 40.00m
/dev/sdb7 vg01 lvm2 a-- 96.00m 96.00m
/dev/sdb8 lvm2 --- 100.00m 100.00m
/dev/sdb9 lvm2 --- 100.00m 100.00m
创建: pvcreate ---> vgcreate ---> lvcrdeate ---> mkfs.xfs lv ----> mount
删除: umount ----> lvremove lv -----> vgremove vg -----> pvremove
[root@xuegod1603 ~]# umount /was
[root@xuegod1603 ~]# lvremove /dev/datavg/waslv
Do you really want to remove active logical volume datavg/waslv? [y/n]: y
Logical volume "waslv" successfully removed
[root@xuegod1603 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
datavg 2 1 0 wz--n- 192.00m 112.00m
rootvg 1 2 0 wz--n- 12.00g 0
vg01 1 0 0 wz--n- 96.00m 96.00m
[root@xuegod1603 ~]# vgremove vg01
Volume group "vg01" successfully removed
[root@xuegod1603 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
datavg 2 1 0 wz--n- 192.00m 112.00m
rootvg 1 2 0 wz--n- 12.00g 0
[root@xuegod1603 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rootvg lvm2 a-- 12.00g 0
/dev/sdb10 lvm2 --- 100.00m 100.00m
/dev/sdb5 datavg lvm2 a-- 96.00m 68.00m
/dev/sdb6 datavg lvm2 a-- 96.00m 44.00m
/dev/sdb7 lvm2 --- 100.00m 100.00m
/dev/sdb8 lvm2 --- 100.00m 100.00m
/dev/sdb9 lvm2 --- 100.00m 100.00m
[root@xuegod1603 ~]# pvremove /dev/sdb10
Labels on physical volume "/dev/sdb10" successfully wiped.
[root@xuegod1603 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rootvg lvm2 a-- 12.00g 0
/dev/sdb5 datavg lvm2 a-- 96.00m 68.00m
/dev/sdb6 datavg lvm2 a-- 96.00m 44.00m
/dev/sdb7 lvm2 --- 100.00m 100.00m
/dev/sdb8 lvm2 --- 100.00m 100.00m
/dev/sdb9 lvm2 --- 100.00m 100.00m
[root@xuegod1603 ~]# pvcreate /dev/sdc1
[root@xuegod1603 ~]# nohup ping www.baidu.com >> /weblv/a.txt &
[1] 76666
[root@xuegod1603 ~]# nohup: ignoring input and redirecting stderr to stdout
[root@xuegod1603 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rootvg lvm2 a-- 12.00g 0
/dev/sdb5 datavg lvm2 a-- 96.00m 68.00m
/dev/sdb6 datavg lvm2 a-- 96.00m 44.00m
/dev/sdb7 lvm2 --- 100.00m 100.00m
/dev/sdb8 lvm2 --- 100.00m 100.00m
/dev/sdb9 lvm2 --- 100.00m 100.00m
/dev/sdc1 lvm2 --- 476.82m 476.82m
[root@xuegod1603 ~]# vgextend datavg /dev/sdc1
Volume group "datavg" successfully extended
[root@xuegod1603 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rootvg lvm2 a-- 12.00g 0
/dev/sdb5 datavg lvm2 a-- 96.00m 68.00m
/dev/sdb6 datavg lvm2 a-- 96.00m 44.00m
/dev/sdb7 lvm2 --- 100.00m 100.00m
/dev/sdb8 lvm2 --- 100.00m 100.00m
/dev/sdb9 lvm2 --- 100.00m 100.00m
/dev/sdc1 datavg lvm2 a-- 472.00m 472.00m
[root@xuegod1603 ~]# pvmove /dev/sdb5 /dev/sdc1
/dev/sdb5: Moved: 100.00%
[root@xuegod1603 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rootvg lvm2 a-- 12.00g 0
/dev/sdb5 datavg lvm2 a-- 96.00m 96.00m
/dev/sdb6 datavg lvm2 a-- 96.00m 44.00m
/dev/sdb7 lvm2 --- 100.00m 100.00m
/dev/sdb8 lvm2 --- 100.00m 100.00m
/dev/sdb9 lvm2 --- 100.00m 100.00m
/dev/sdc1 datavg lvm2 a-- 472.00m 444.00m
[root@xuegod1603 ~]# pvmove /dev/sdb6 /dev/sdc1
/dev/sdb6: Moved: 61.54%
/dev/sdb6: Moved: 100.00%
[root@xuegod1603 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rootvg lvm2 a-- 12.00g 0
/dev/sdb5 datavg lvm2 a-- 96.00m 96.00m
/dev/sdb6 datavg lvm2 a-- 96.00m 96.00m
/dev/sdb7 lvm2 --- 100.00m 100.00m
/dev/sdb8 lvm2 --- 100.00m 100.00m
/dev/sdb9 lvm2 --- 100.00m 100.00m
/dev/sdc1 datavg lvm2 a-- 472.00m 392.00m
[root@xuegod1603 ~]# vgreduce datavg /dev/sdb5
Removed "/dev/sdb5" from volume group "datavg"
[root@xuegod1603 ~]# vgreduce datavg /dev/sdb6
Removed "/dev/sdb6" from volume group "datavg"
[root@xuegod1603 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rootvg lvm2 a-- 12.00g 0
/dev/sdb5 lvm2 --- 100.00m 100.00m
/dev/sdb6 lvm2 --- 100.00m 100.00m
/dev/sdb7 lvm2 --- 100.00m 100.00m
/dev/sdb8 lvm2 --- 100.00m 100.00m
/dev/sdb9 lvm2 --- 100.00m 100.00m
/dev/sdc1 datavg lvm2 a-- 472.00m 392.00m
上面步骤如下:
新建PV pvcreate /dev/sdc1
扩容VG vgextend datavg /dev/sdc1
移动数据 pvmove /dev/sdb5 /dev/sdc1
VG缩小 vgreduce datavg /dev/sdb5
删除小盘 pvremove /dev/sdb5