LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘
它就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作
术语 | 说明 | |
---|---|---|
物理存储介质(The physical media) | LVM存储介质可以是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用 | — |
物理卷PV(physical volume) | 物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数,创建物理卷它可以用硬盘分区,也可以用硬盘本身 | — |
卷组VG(Volume Group) | 一个LVM卷组由一个或多个物理卷组成,相当于池pool | 相当于一块超大硬盘 |
逻辑卷LV(logical volume) | LV建立在VG之上,可以在LV之上建立文件系统 | 可以跨硬盘分区 |
PE(physical extents) | PV物理卷中可以分配的最小存储单元,PE的大小是可以指定的,默认为4MB | 物理卷PV的块大小 |
LE(logical extent) | LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应 | 逻辑卷LV的块大小 |
RAID+LVM一起用:LVM是软件的卷管理方式,而RAID是磁盘管理的方法。对于重要的数据,使用RAID来保护物理的磁盘不会因为故障而中断业务,再用LVM用来实现对卷的良性的管理,更好的利用磁盘资源
功能 | PV管理命令 | VG管理命令 | LV管理命令 |
---|---|---|---|
s 查看卷信息 | pvs | vgs | lvs |
scan 扫描所有卷 | pvscan | vgscan | lvscan |
create 创建 | pvcreate | vgcreate | lvcreate |
display显示详细信息 | pvdisplay | vgdisplay | lvdisplay |
remove 移除 | pvremove | vgremove | lvremove |
extend 扩展 | — | vgextend | lvextend |
reduce减少 | — | vgreduce | lvreduce |
1、添加硬盘,进行分区
2、分区成4个主分区,每个分区1G大小空间,4个主分区是物理卷LV
[root@qianshuiliyu ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xfef180a0 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (2099200-41943039,默认为 2099200):
将使用默认值 2099200
Last 扇区, +扇区 or +size{K,M,G} (2099200-41943039,默认为 41943039):+1G
分区 2 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):
起始 扇区 (4196352-41943039,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-41943039,默认为 41943039):+1G
分区 3 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
已选择分区 4
起始 扇区 (6293504-41943039,默认为 6293504):
将使用默认值 6293504
Last 扇区, +扇区 or +size{K,M,G} (6293504-41943039,默认为 41943039):+1G
分区 4 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
3、物理卷PV创建
[root@qianshuiliyu ~]# pvcreate /dev/sdb{1,2,3,4}
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
Physical volume "/dev/sdb4" successfully created.
4、查看信息
root@qianshuiliyu ~]# pvdisplay /dev/sdb1
#pvdisplay /dev/sdb*,查看所有
"/dev/sdb1" is a new physical volume of "1.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 1.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 3561Dg-0yZi-A7f5-eSXE-5Ki3-1sV0-0TBORc
[root@qianshuiliyu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 lvm2 --- 1.00g 1.00g
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdb4 lvm2 --- 1.00g 1.00g
语法:vgcreate (-s 块大小,默认4M)vg名字 pv的名字( 可以写多个pv)
1、创建卷组VG
[root@qianshuiliyu ~]# vgcreate vgs_pool /dev/sdb[1,2]
Volume group "vgs_pool" successfully created
[root@qianshuiliyu ~]# vgcreate -s 16M vgs_pool /dev/sdb[1,2]
Volume group "vgs_pool" successfully created
#如果存储的数据都是大文件,那么PE尽量调大,读取速度快,PE的大小只有为2的幂数,且最大为512M
2、查看
[root@qianshuiliyu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vgs_pool 2 0 0 wz--n- 1.99g 1.99g
[root@qianshuiliyu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 vgs_pool lvm2 a-- 1020.00m 1020.00m
/dev/sdb2 vgs_pool lvm2 a-- 1020.00m 1020.00m
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdb4 lvm2 --- 1.00g 1.00g
3、查看卷组VG详细信息
[root@qianshuiliyu ~]# vgdisplay vgs_pool
--- Volume group ---
VG Name vgs_pool
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 1.99 GiB
PE Size 4.00 MiB
Total PE 510
Alloc PE / Size 0 / 0
Free PE / Size 510 / 1.99 GiB
VG UUID rUITGw-IZLb-zVjC-3ug2-HumB-OEft-ffr2gj
lvcreate -n 逻辑卷的名称 -L 指定lv大小的SIZE(M,G) (-l:小l 指定LE的数量) 卷组名字
指定大小即是指定数量,创建的时候指定其中一个就不需要在指定另一个
1、创建
[root@qianshuiliyu ~]# lvcreate -n lvm1 -L 1G vgs_pool
Logical volume "lvm1" created.
2、查看
3、指定逻辑卷LE大小(数量)
指定数量就不需要在指定大小了
[root@qianshuiliyu ~]# lvcreate -n lvm2 -l 10 vgs_pool
Logical volume "lvm2" created.
LVM的路径在哪里,查看卷组VG中的逻辑卷信息,看结果是链接
ianshuiliyu ~]# ll /dev/vgs_pool/
总用量 0
lrwxrwxrwx 1 root root 7 2月 8 14:30 lvm1 -> ../dm-2
lrwxrwxrwx 1 root root 7 2月 8 14:37 lvm2 -> ../dm-3
1、格式化
[root@qianshuiliyu dev]# mkfs.ext4 /dev/vgs_pool/lvm1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
2、挂载
[root@qianshuiliyu ~]# mkdir /lvm1
[root@qianshuiliyu ~]# mount /dev/vgs_pool/lvm1 /lvm1/
[root@qianshuiliyu ~]# cp /etc/passwd /lvm1/
[root@qianshuiliyu ~]# echo '/dev/vgs_pool/lvm1 /lvm1 ext4 defaults 0 0' >> /etc/fstab
[root@qianshuiliyu ~]# reboot
查看
```bash
[root@qianshuiliyu ~]# df -Th /dev/vgs_pool/lvm1
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vgs_pool-lvm1 ext4 976M 2.6M 907M 1% /lvm1
1、看一下是否有可用的扩容空间,因为空间是从VG里面创建的,并且LV不能跨VG扩容
[root@qianshuiliyu ~]# vgs vgs_pool
VG #PV #LV #SN Attr VSize VFree
vgs_pool 2 2 0 wz--n- 1.99g 976.00m
2、扩容,+30M
当前大小
[root@qianshuiliyu ~]# lvs /dev/vgs_pool/lvm1
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvm1 vgs_pool -wi-ao---- 1.00g
扩容
[root@qianshuiliyu ~]# lvextend -L +30M /dev/vgs_pool/lvm1
#+30M是在原有的容量上增加30M大小,不写+,就是扩容到多少
Rounding size to boundary between physical extents: 32.00 MiB.
Size of logical volume vgs_pool/lvm1 changed from 1.00 GiB (256 extents) to 1.03 GiB (264 extents).
Logical volume vgs_pool/lvm1 successfully resized.
查看大小
[root@qianshuiliyu ~]# lvs /dev/vgs_pool/lvm1
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvm1 vgs_pool -wi-ao---- 1.03g
3、文件系统扩容
虽然LV上扩容成功,但是文件系统还是原来的大小
ext4文件系统扩容使用命令语法: resize2fs 逻辑卷名称
xfs文件系统扩容使用命令语法: xfs_growfs 挂载点
resize2fs和xfs_growfs 两者的区别是传递的参数不一样的,xfs_growfs是采用的挂载点;resize2fs是逻辑卷名称,而且resize2fs命令不能对xfs类型文件系统使用
[root@qianshuiliyu ~]# df -Th /lvm1/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vgs_pool-lvm1 ext4 976M 2.6M 907M 1% /lvm1
[root@qianshuiliyu ~]# resize2fs /dev/vgs_pool/lvm1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vgs_pool/lvm1 is mounted on /lvm1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vgs_pool/lvm1 is now 270336 blocks long.
[root@qianshuiliyu ~]# df -Th /lvm1/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vgs_pool-lvm1 ext4 1006M#容量增加了 2.6M 935M 1% /lvm1
将硬盘的sdb3分区添加到VG中
当前大小
[root@qianshuiliyu ~]# vgs vgs_pool
VG #PV #LV #SN Attr VSize VFree
vgs_pool 2 2 0 wz--n- 1.99g 944.00m
扩容
[root@qianshuiliyu ~]# vgextend vgs_pool /dev/sdb3
Volume group "vgs_pool" successfully extended
查看
[root@qianshuiliyu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vgs_pool 3 2 0 wz--n- <2.99g <1.92g
LVM可以动态增加,也可以动态缩小,但是XFS不支持动态缩小,所以我们无法实现基于xfs的动态缩小。btrfs文件系统支持在线缩小
卷组VG的缩减,要保证你的物理卷是否被使用,是因为它无法缩减一个正在使用的PV
[root@qianshuiliyu ~]# lvreduce -L -30M /dev/vgs_pool/lvm1
Rounding size to boundary between physical extents: 28.00 MiB.
WARNING: Reducing active and open logical volume to 1.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vgs_pool/lvm1? [y/n]: y
Size of logical volume vgs_pool/lvm1 changed from 1.03 GiB (264 extents) to 1.00 GiB (257 extents).
Logical volume vgs_pool/lvm1 successfully resized.
但是文件系统的大小没变化
[root@qianshuiliyu ~]# df -Th /lvm1/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vgs_pool-lvm1 ext4 1006M 2.6M 935M 1% /lvm1
在这里别卸载或重启,及容易出问题,操作前将数据移走,重启或者卸载的确能缩小,但是文件系统变成未知的,你就有可能需要重新格式化才能使用逻辑卷LV,所以一般不缩小,
正在使用的PV不能移除,没有使用的可以移除
[root@qianshuiliyu ~]# vgreduce vgs_pool /dev/sdb1
Physical volume "/dev/sdb1" still in use
[root@qianshuiliyu ~]# vgreduce vgs_pool /dev/sdb3
Removed "/dev/sdb3" from volume group "vgs_pool"
[root@qianshuiliyu ~]# cp /etc/passwd /lvm1/
1、移动数据
将旧硬盘的数据移动到新硬盘
[root@qianshuiliyu ~]# pvmove /dev/sdb1 /dev/sdb3
/dev/sdb1: Moved: 18.43%
/dev/sdb1: Moved: 100.00%
2、移除旧硬盘
[root@qianshuiliyu ~]# vgreduce vgs_pool /dev/sdb1
Removed "/dev/sdb1" from volume group "vgs_pool"
3、添加硬盘看VG扩容
步骤
1、卸载
[root@qianshuiliyu ~]# umount /lvm1
2、移除逻辑卷LV
[root@qianshuiliyu ~]# lvremove /dev/vgs_pool/lvm1
Do you really want to remove active logical volume vgs_pool/lvm1? [y/n]: y
Logical volume "lvm1" successfully removed
3、移除卷组VG
如果卷组中还有lv,移出时,会提示,是否也移出
[root@qianshuiliyu ~]# vgremove vgs_pool
Volume group "vgs_pool" successfully removed
4、移除物理卷pv
查看物理卷
[root@qianshuiliyu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 lvm2 --- 1.00g 1.00g
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdb4 lvm2 --- 1.00g 1.00g
移除
[root@qianshuiliyu ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped.
[root@qianshuiliyu ~]# pvremove /dev/sdb2
Labels on physical volume "/dev/sdb2" successfully wiped.
[root@qianshuiliyu ~]# pvremove /dev/sdb3
Labels on physical volume "/dev/sdb3" successfully wiped.
创建环境:使用sdb1,sdb2创建LVM
SSM:检查关于可用硬驱和LVM卷的信息。显示关于现有磁盘存储设备、存储池、LVM卷和存储快照的信息。查看磁盘信息等等
语法:ssm create -s lv大小 -n lv名称 --fstype lv文件系统类型 -p 卷组名 设备 挂载点
安装
[root@qianshuiliyu ~]# yum -y install system-storage-manager
1、创建,一步完成所有操作,自动创建挂载点,自动挂载
[root@qianshuiliyu ~]# ssm create -s 1G -n lv01 --fstype xfs -p vgs_pool /dev/sdb[1,2] /lv01
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Volume group "vgs_pool" successfully created
WARNING: ext4 signature detected on /dev/vgs_pool/lv01 at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/vgs_pool/lv01.
Logical volume "lv01" created.
meta-data=/dev/vgs_pool/lv01 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Directory '/lv01' does not exist! Create (Y/n/q) ? Y
2、查看
[root@qianshuiliyu ~]# df -Th /lv01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vgs_pool-lv01 xfs 1014M 33M 982M 4% /lv01
1、查看设备信息
[root@qianshuiliyu ~]# ssm list dev
------------------------------------------------------------------
Device Free Used Total Pool Mount point
------------------------------------------------------------------
/dev/sda 20.00 GB
/dev/sda1 1.00 GB /boot
/dev/sda2 0.00 KB 19.00 GB 19.00 GB centos
/dev/sdb 20.00 GB
/dev/sdb1 0.00 KB 1020.00 MB 1.00 GB vgs_pool
/dev/sdb2 1016.00 MB 4.00 MB 1.00 GB vgs_pool
/dev/sdb3 1.00 GB
/dev/sdb4 1.00 GB
------------------------------------------------------------------
2、查看池信息
[root@qianshuiliyu ~]# ssm list pool
-------------------------------------------------------
Pool Type Devices Free Used Total
-------------------------------------------------------
centos lvm 1 0.00 KB 19.00 GB 19.00 GB
vgs_pool lvm 2 1016.00 MB 1.00 GB 1.99 GB
-------------------------------------------------------