本节所讲内容
15.1 LVM 的工作原理
15.2 创建LVM 的基本步骤
15.3 实战ssm 工具为公司的邮件服务创建可动态扩容的存储池
LVM 的基本概念
实战场景: 对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办
15.1.1 LVM 常用的术语
物理存储介质: LVM 存储介质可以是磁盘分区,整个磁盘,RAID 阵列或SAN 磁盘
设备必须初始化为LVM 物理卷,才能与LVM 结合使用
物理卷 PV 物理卷就是LVM 的基本存储逻辑块,但是和基本的物理存储介质 如分区,磁盘等比较,缺包含有与LVM 相关的管理参数,创建物理卷它可以用硬盘分区,也可以硬盘本身
卷组: 一个LVM 卷组有一个或者多个物理卷组成
逻辑卷: LV 建立在VG上,可以在LV之上建立文件系统
PE PV 物理卷中可以分配的最小存储单位,PE的大小可以是指定的,默认4MB
LE LV 逻辑卷中分配的最下存储单元,在一个卷组中,LE的大小和PE是相同的
应且一一对应,
lvM 常用的命令
下面的操作会用的一些查看命令
15.2.2 创建并使用LVM 逻辑卷
1 创建PV
添加一个sdb 磁盘
fdisk /dev/sdb 创建4个分区,每个分区1个G
ls /dev/sdb*
[root@xueshen65 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x1cc54092 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x1cc54092
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response 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 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x1cc54092
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 83 Linux
/dev/sdb3 4196352 6293503 1048576 83 Linux
/dev/sdb4 6293504 8390655 1048576 83 Linux
命令(输入 m 获取帮助):t
分区号 (1-4,默认 4):2
Hex 代码(输入 L 列出所有代码):l
0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx
5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要
16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动
1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep
1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT
1e 隐藏的 W95 FAT1 80 旧 Minix
Hex 代码(输入 L 列出所有代码):83
Hex 代码(输入 L 列出所有代码):83
已将分区“Linux”的类型更改为“Linux”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
root@xueshen65 ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4
[root@xueshen65 ~]# 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.
3 root@xueshen65 ~]# pvdisplay /dev/sdb1
"/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 GJpAs1-Pi10-k1xj-INGu-YRVO-Cfr0-aldpkk
创建vg
1。en65 ~]# vgcreate vg01 /dev/sdb1
Volume group "vg01" successfully created
2 [root@xueshen65 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 0 0 wz--n- 1020.00m 1020.00m
3 root@xueshen65 ~]# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
4
此时看到sdb1 属于vg01 了
创建vg 卷组
语法 vgcreate vg名字 pv 的名字
创建LV
lvcreate -n 指定新逻辑卷的名字, -L 指定lv 的大小 SIZE (M,G) (-l:小l 指定LE的数量)vgname
[root@xueshen65 ~]# lvcreate -n lv01 -L 16M vg01
Logical volume "lv01" created.
root@xueshen65 ~]# lvcreate -n lv02 -l 4 vg01
Logical volume "lv02" created
使用lvs 查一下 发现打下是一样的
root@xueshen65 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-a----- 16.00m
lv02 vg01 -wi-a----- 16.00m
[root@xueshen65 ~]# pvdisplay /dev/sdb1 # 查看
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg01
PV Size 1.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255
Free PE 247
Allocated PE 8 已经分配使用了8个PE
PV UUID GJpAs1-Pi10-k1xj-INGu-YRVO-Cfr0-aldpkk
2.6 格式化lv 文件系统格式与挂载
mkdir /lv01
互动lv01 在哪里?
root@xueshen65 ~]# mkdir /lv01
[root@xueshen65 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 2 0 wz--n- 1020.00m 988.00m
[root@xueshen65 ~]# ls /dev/vg01
lv01 lv02
[root@xueshen65 ~]# ls /dev/vg01/lv01
/dev/vg01/lv01
[root@xueshen65 ~]# ll !$
ll /dev/vg01/lv01
lrwxrwxrwx. 1 root root 7 4月 3 22:03 /dev/vg01/lv01 -> ../dm-0
ll /dev/vg01/lv01 -l 其实lv01 是dm-0 的软连接
格式化
root@xueshen65 ~]# mkfs.ext4 /dev/vg01/lv01
挂载 mount /dev/vg01/lv01 /lv01
[root@xueshen65 ~]# df -h /lv01/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 15M 268K 14M 2% /lv01
开机自动挂载 echo "/dev/vg01/lv01 /lv01 ext4 defaults 0 0" >> /etc/fstab
root@xueshen65 ~]# echo "/dev/vg01/lv01 /lv01 ext4 defaults 0 0" >> /etc/fstab 开机自动挂载
[root@xueshen65 ~]# umount /lv01/
umount: /lv01/:未挂载
[root@xueshen65 ~]# mount -a
[root@xueshen65 ~]# df -h /lv01/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 15M 268K 14M 2% /lv01
15.2.3 指定PE 大小用
指定PE大小用的参数 : -S 如果存储的数据都是大文件,那么PE尽量调大,读取速度快
HDFS,ceph ,swift ,gfs ,mFS
root@xueshen65 ~]# vgcreate -s 16M vg02 /dev/sdb2
Volume group "vg02" successfully created
[root@xueshen65 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 2 0 wz--n- 1020.00m 988.00m
vg02 1 0 0 wz--n- 1008.00m 1008.00m
查看更清楚点
root@xueshen65 ~]# vgdisplay vg02
--- Volume group ---
VG Name vg02
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
root@xueshen65 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 16.00m
lv02 vg01 -wi-a----- 16.00m
[root@xueshen65 ~]# lvextend -L +30M /dev/vg01/lv01 扩容30M
扩容30m === -L +30M
扩容到30M -L 30 M
Rounding size to boundary between physical extents: 32.00 MiB.
Size of logical volume vg01/lv01 changed from 16.00 MiB (4 extents) to 48.00 MiB (12 extents).
Logical volume vg01/lv01 successfully resized.
[root@xueshen65 ~]# resize2fs /dev/vg01/lv01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /lv01; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg01/lv01 is now 49152 blocks long.
使用df -h /lv01/
掌握方法3 使用lvextend 命令中加入参数-r .它是支持多种不同的文件系统
比如 ext3, ext 4 xfs
扩容到80M
[root@xueshen65 ~]# lvextend -L 80M -r /dev/vg01/lv01 直接一步到位,不用在扩文件系统了
Size of logical volume vg01/lv01 changed from 48.00 MiB (12 extents) to 80.00 MiB (20 extents).
Logical volume vg01/lv01 successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/vg01-lv01 is mounted on /lv01; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/vg01-lv01 is now 81920 blocks long.
15.2.5 VG扩容
root@xueshen65 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 2 0 wz--n- 1020.00m 924.00m
vg02 1 0 0 wz--n- 1008.00m 1008.00m
场景 扩容的场景,vg 劵组中的空间不够,需要添加新的硬盘进来
pvcreate /dev/sdb3 场景pv
1)
[root@xueshen65 ~]# vgextend vg01 /dev/sdb3 扩容成功
Volume group "vg01" successfully extended
3)
[root@xueshen65 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 2 0 wz--n- 1.99g <1.90g
vg02 1 0 0 wz--n- 1008.00m 1008.00m
15.2.6 LVM 缩小
1) [root@xueshen65 ~]# lvreduce -L 20M /dev/vg01/lv01 缩小
WARNING: Reducing active and open logical volume to 20.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]: y
Size of logical volume vg01/lv01 changed from 80.00 MiB (20 extents) to 20.00 MiB (5 extents).
Logical volume vg01/lv01 successfully resized. 缩小成功
LVM 可以东岱增加,也可以动态缩小,但是xfs 不支持动态缩小,所以我们无法实现基于xfs的动态缩小 ,btrfs 文件系统可以支持在线缩小
但是文件系统没缩小成功
2)root@xueshen65 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 20.00m 看到已经缩小了
lv02 vg01 -wi-a----- 16.00m
3) root@xueshen65 ~]# df -h /lv01/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 77M 776K 73M 2% /lv01 并没有减小
4) root@xueshen65 ~]# lvextend -L 10M -r /dev/vg01/lv01 这个命令也不行
[root@xueshen65 ~]# resize2fs /dev/vg01/lv01 也不能执行成功
VG 的缩减,要保证你的物理卷是否被使用,是因为它无法缩减一个正在使用的PV
[root@xueshen65 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 2 0 wz--n- 1.99g <1.96g
vg02 1 0 0 wz--n- 1008.00m 1008.00m
[root@xueshen65 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 1020.00m 984.00m vg01 中只有sdb3 了
/dev/sdb2 vg02 lvm2 a-- 1008.00m 1008.00m
/dev/sdb3 vg01 lvm2 a-- 1020.00m 1020.00m
/dev/sdb4 lvm2 --- 1.00g 1.00g
复制一下数据
[root@xueshen65 ~]# cp -r /boot/grub /lv01/ 复制一些测试数据
互动 如果sdb1 是一个磁盘阵列,而这个磁盘阵列使用年代太久,我们必须移除怎么办
把sdb1 的数据移动到sdb3
1)[root@xueshen65 ~]# vgreduce vg01 /dev/sdb1 将sdb1 移除失败,因为sdb1 正在使用
Physical volume "/dev/sdb1" still in use
2)[root@xueshen65 ~]# pvmove /dev/sdb1 /dev/sdb3
/dev/sdb1: Moved: 22.22%
/dev/sdb1: Moved: 55.56%
3)[root@xueshen65 ~]# vgreduce vg01 /dev/sdb1
Removed "/dev/sdb1" from volume group "vg01
15.2.7 LVM 删除
创建LVM 流程
pvcreate pv -> vgcreate 创建卷组-》 lvcreate 创建逻辑卷 - mkfs.xfs lv 格式化,- 》
mount 挂载
删除 LVM 流程:
删除 LVM 流程
umount 卸载 -> lvremount lv 移除逻辑卷-> vgremove 移除卷组 -> pvremove 移除pv
1) [root@xueshen65 ~]# umount /lv01/
[root@xueshen65 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 2 0 wz--n- 1020.00m 984.00m
vg02 1 0 0 wz--n- 1008.00m 1008.00m
2)
[root@xueshen65 ~]# lvremove /dev/vg01/lv01
Do you really want to remove active logical volume vg01/lv01? [y/n]: y
Logical volume "lv01" successfully removed
[root@xueshen65 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv02 vg01 -wi-a----- 16.00m
3)
root@xueshen65 ~]# vgremove vg01
Do you really want to remove volume group "vg01" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume vg01/lv02? [y/n]: y
Logical volume "lv02" successfully removed
Volume group "vg01" successfully removed
4) [root@xueshen65 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg02 1 0 0 wz--n- 1008.00m 1008.00m
5)
[root@xueshen65 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 vg02 lvm2 a-- 1008.00m 1008.00m
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdb4 lvm2 --- 1.00g 1.00g
6)
[root@xueshen65 ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped.
7)
[root@xueshen65 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb2 vg02 lvm2 a-- 1008.00m 1008.00m
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdb4 lvm2 --- 1.00g 1.00g
15.3 实战-使用SSM 工具为公司的邮件服务器可动态扩容的存储池
安装ssm
1)
root ~ # yum -y install system-storage-manager
SSM :检查关于可用硬驱和LVM 劵的信息,显示关于现有磁盘存储设备,存储池,LVM 和存储块照的信息
2 )
[root@xueshen65 ~]# ssm list dev
------------------------------------------------------------
Device Free Used Total Pool Mount point
------------------------------------------------------------
/dev/sda 20.00 GB
/dev/sda1 200.00 MB /boot
/dev/sda2 10.00 GB /
/dev/sda3 2.00 GB SWAP
/dev/sdb 20.00 GB
/dev/sdb1 1.00 GB
/dev/sdb2 1008.00 MB 0.00 KB 1.00 GB vg02
/dev/sdb3 1.00 GB
/dev/sdb4 1.00 GB
3) 查看池
[root@xueshen65 ~]# ssm list pool
----------------------------------------------------
Pool Type Devices Free Used Total
----------------------------------------------------
vg02 lvm 1 1008.00 MB 0.00 KB 1008.00 MB
----------------------------------------------------
4) 查看劵组的信息
[root@xueshen65 ~]# ssm list vol
-------------------------------------------------------------
Volume Volume size FS FS size Free Mount point
-------------------------------------------------------------
/dev/sda1 200.00 MB xfs 196.66 MB 55.54 MB /boot
/dev/sda2 10.00 GB xfs 9.99 GB 4.83 GB /
------------------------------------------------------------
15.3.2 实战 : 为公司的邮件服务器厂家基于LVM 的邮件服务
实战场景:公司要搭建一台服务器,考虑到后期公司规模扩张,需要你创建一个名为mail的LVM
存储池,并在其创建名为mail-v 初始大小为1G 的LVM 劵,格式化为xfs文件系统,并将其挂载到/mail-lv 目录下,此存储池中的空间后期可以动态扩容
创建目录
mkdir /mail-lv
用的命令如下
ssm create -s lv 大小 -n lv名称 --fstype lv 文件系统类型 -p 卷组名 设备 挂载点
自动把设备变成pv,创建vg ,lv 格式化文件系统,自动挂载
1) 首先移除卷组
2 )
[root@xueshen65 ~]# ssm create -s 1G -n mail-lv --fstype xfs -p mail /dev/sdb[1-4] /mail-lv
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
Physical volume "/dev/sdb4" successfully created.
Volume group "mail" successfully created
WARNING: ext4 signature detected on /dev/mail/mail-lv at offset 1080. Wipe it? [y/n]: y
3 )
[root@xueshen65 ~]# df -h /mail-lv/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/mail-mail--lv 1014M 33M 982M 4% /mail-lv