1. 概念
LVM是将很多物理设备逻辑成为一个逻辑组,这个逻辑组的大小是所有物理磁盘的容量之和,我们可以在这个逻辑组上面划分多个逻辑卷,这个逻辑卷的块可能是存在于多个磁盘的。
1.1 物理卷
lvm要使用必须要初始化物理卷pv,将块设备初始化为物理卷会在该设备的起始扇区附近放置一个标 签。默认情况下lvm标签放在第二个512字节扇区。lvm标签可以为物理设备提供正确的识别和设备排序。包含随意标识符UUID。它以字节为单位记录块设备的大小,并且记录lvm元数据在设备中的存储位置。现在,LVM 允许在每个物理卷中保存 0、1 或者 2 个元数据副本。默认是保存一个副本。一旦设置了在物理卷 中保存的元数据备份数目之后就无法再更改。第一个副本保存在设备的起始位置,紧挨着标签。如果有第二个 副本,会将其放在设备的末尾。如果不小心写入了不同于想要写入的磁盘,从而覆盖了磁盘的起始部分,那么 可以使用在设备末尾的元数据第二个副本恢复元数据。
PV物理卷的数据布局
1.2 卷组
物理卷合为卷组,在卷组中磁盘空间被划分为固定大小的单元,我们称为扩展,扩展是vg分配的最小的空间单元,称为物理扩展
1.2.1 PE
卷组中逻辑卷的扩展大小也是相同的,称为逻辑扩展(PE),PE只有在卷组创建出来之后,才可以显示,否则为0,PE默认为4MB
1.3 逻辑卷
1.3.1 线性卷
线性卷将一个或者多个物理卷整合称为一个逻辑卷。物理存储是连续的,物理扩展为4MB的卷组,pv1为800MB,就有200个物理扩展(PE),线性卷是按照顺序写数据,lv有200PE的话,会按顺序写数据,所以数据会先写入一个盘。
1.3.2 条带逻辑卷
和raid0一样,可以条带化存储,条带化数据,可以通过round-robin模式预定数目的物理卷写入数据,提高性能。使用条带模式,I/O可以平行执行。
1.3.4 RAID逻辑卷
lvm支持raid1/4/5/6/10:
通过利用MD内核驱动程序的lvm创建和管理raid逻辑卷 raid1影响可以临时从阵列中分离,并且稍后可以合并回该阵列 lvm raid卷支持快照
1.3.5 精简配置逻辑卷
逻辑卷可以通过精简配置,可以创建出超出可用扩展的逻辑卷。可以动态扩展精简池。如果有10位用户,为其程序分配100GB文件系统,则存储管理员可以为每个用户创建看似是100GB的文件系统,但是实际存储小于100GB,但要要监控卷的使用情况,如果块满的时候,为其添加更多容量。
1.3.6 快照卷
lvm支持在某个特定时刻,在不导致服务终端的情况下创建设备的虚拟镜像功能,在提取快照后,当对原始设备进行修改,快照功能可生成变化的数据区域的副本。如果一个快照要生成一个和原始卷相同大小,则快照应该至少要和原始卷同样大小才可以保存更改。如果一个卷是用来读的,则空间要比写的数据要大。
1.3.7 精简配置快照卷
精简快照可以将很多虚拟设备存储到一个数据卷中。语序快照中共享数据。
1.3.8 缓存卷
在redhat 7.1发行版本开始,lvm支持使用快速的块设备作为较大慢速块设备的回写和写入加速,用户创建缓存逻辑卷可以改进现有的逻辑卷的性能,或者创建又小且快速的设备作为慢设备的缓存加速,具体命令为lvmcache
2. lvm管理命令
创建lvm卷一般有几步 将分区作为物理卷进行管理 创建卷组 创建逻辑卷
2.1 创建物理卷
2.1.1 创建pvcreate
[root@ceph-node2 ~]# pvcreate /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
2.1.2 pvscan
pvscan在系统中物理卷扫描所有支持的lvm块设备。可以在lvm.conf中定义过滤,方便这个命令可以避免扫描特定物理卷。pvscan需要读取磁盘的lvm元数据来识别是否为pv,但是在使用lvmetad守护进程的时候,pvscan命令会有优化,lvmetad会lv的元数据进行缓存,那么pvscan就不需要重复的读取磁盘的元数据信息了。
The pvscan --cache command is typically run automatically by system services when a new device appears. Users do not generally need to run this command if the system and lvmetad are running properly
pvscan --cache
2.1.3 限制pv不被分配PE
一般pv故障,会做这种操作,执行下面语句会禁止分配PE
pvchange -x n /dev/sdk1
2.1.4 删除pv
pvremove会将lv的元数据归0,如果要删除的卷组是某个卷组的一部分,要先执行vgreduce将pv从卷组中删除出去。
### 如果在卷组中使用,想从卷组中删除
vgreduc myvg /dev/sdb
### 然后从pv中进行删除
pvremove /dev/sdb
2.2 创建卷组
2.2.1 创建卷组vgcreate
[root@ceph-node2 ~]# vgcreate myvgl /dev/sdb /dev/sdc
Volume group "myvgl" successfully created
2.2.2 vgscan扫描vg和lv信息
vgscan 命令扫描系统中的所有支持的磁盘设备以查找 LVM 物理卷和卷组。这样可在/etc/lvm/cache/.cache 文件中构建缓存,以保持当前 LVM 设备列表。
2.2.3 从vg中删除pv
2.2.3.1 非mirror
正常删除
vgreduce my_volume_group /dev/hda1
2.3 创建逻辑卷
[root@ceph-node2 ~]# lvcreate -L 10G -n mulv myvgl
Logical volume "mulv" created.
扩展卷的大小
扩容卷卷空间
lvextend [-L +size \ -l size] 逻辑卷名称
### 如果使用xfs文件系统
xfs_growfs /test
### 如果使用ext4
resize2fs /test
2.3.1 缩小卷空间
lvreduce [-L -size \ -l size] 逻辑卷名称
2.3.2 删除物理卷,如果上层有挂载的卷要先umount掉
$ umount /mulv
$ lvremove /dev/myvg/mylv
### 将/dev/sdb从vg中删除出去
$ vgreduce myvg /dev/sdb
2.3.3 逻辑卷备份
元数据备份和归档会在每次修改卷组和逻辑卷配置时候自动进行,除非在lvm.conf中禁用这个功能,默认情况下元数据备份是在/etc/lvm/backup文件中,元数据归档在/etc/lvm/archive文件中,这个保存时间备份在/etc/lvm目录中内容。也可以手动进行备份,使用vgcfgbackup,将元数据备份到/etc/lvm/backup文件中,可以使用vgcfgrestore恢复元数据。
2.3.4 元数据管理服务
元数据守护进程有两个主要目的,1、提高lvm命令性能。2、允许udev自动激活逻辑卷或者整个卷组中使用。元数据管理服务lvm2-lvmetad服务名称 lvmetad服务可以配置自动激活逻辑卷,等于lvchange -ay lvname。lvm.conf配置文件中为activation/auto_activation_volume_list选项配置。
[root@ceph-node2 ~]# systemctl status lvm2-lvmetad
● lvm2-lvmetad.service - LVM2 metadata daemon
Loaded: loaded (/usr/lib/systemd/system/lvm2-lvmetad.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2019-04-04 20:49:19 EDT; 17h ago
Docs: man:lvmetad(8)
Main PID: 504 (lvmetad)
CGroup: /system.slice/lvm2-lvmetad.service
└─504 /usr/sbin/lvmetad -f
Apr 04 20:49:19 ceph-node2 systemd[1]: Started LVM2 metadata daemon.
Apr 04 20:49:19 ceph-node2 systemd[1]: Starting LVM2 metadata daemon...
2.3.5 查看lvm命令
显示载入 etc/lvm/lvm.conf 文件及其他任何配置文件后的 LVM 配置信息。
lvm dumpconfig
显示可识别的内建块设备类型(Red Hat Enterprise Linux 发行本 6.6及之后的产品)
lvm devtypes
显示可识别元数据格式。
lvm formats
显示 LVM 帮助信息。
lvm help
显示可识别逻辑卷片段类型。
lvm segtypes
显示这个主机中定义的标签。有关 LVM 对象标签的详情, LVM 对象标签。
lvm tags
显示当前版本信息
lvm version
3. lv mirror
创建lv mirror
如果镜像卷比较大的话,创建时候不需要恢复镜像卷,可以使用--nosync参数,便是不需要根据第一个设备进行初始化,因为如果镜像卷很大的话,同步需要很长的时间。
lvcreate --type mirror -L 50G -m 1 -n mirrorlv vg0
LVM 将要复制的设备分成默认为 512KB 大小的区域。可使用 lvcreate 命令的 -R 参数以 MB 为单位指定区 域大小
注意 - 需要验证
由于集群架构的限制,无法使用默认的 512KB 区域大小创建大于 1.5TB 的镜像。需要较大镜像的用户应 将该区域大小从默认值调整为较大的值。无法增大区域大小将造成 LVM 创建操作停滞,同时还可能造 成其他 LVM 命令挂起。
为超过 1.5TB 的镜像指定区域大小的一般方法是取镜像的 TB 数,并四舍五入到 2 的下一次幂,使用该 数字作为 lvcreate 命令的 -R 参数值。例如:如果镜像大小为 1.5TB,则可以指定 -R 2。如果镜像 大小为3TB,则指定-R 4。如果镜像大小为5TB,则指定-R 8。
下面的命令创建区域大小为 2MB 的镜像逻辑卷:
lvcreate --type mirror -m 1 -L 2T -R 2 -n mirror vol_group
3.1
查看lv mirror信息,raid_sync_action和raid_mismatch_count两个参数表示同步状态和镜像卷数据不一致的情况。
[root@zhanghao ogg]# lvs -o +raid_sync_action,raid_mismatch_count vgmirror/lvmirror
WARNING: Not using lvmetad because a repair command was run.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches
lvmirror vgmirror rwi-aor--- 5.00g 100.00 idle 0
SyncAction字段理解 idle:已完成所有同步操作(什么也不做)
resync:初始化阵列或在机器失败后恢复
recover:替换阵列中的设备
check:查找阵列不一致的地方
repair:查找并修复阵列不一致的地方
故障模拟
原来状态
sdc 8:32 0 10G 0 disk
├─vgmirror-lvmirror_rmeta_0 253:2 0 4M 0 lvm
│ └─vgmirror-lvmirror 253:6 0 5G 0 lvm /ogg
└─vgmirror-lvmirror_rimage_0 253:3 0 5G 0 lvm
└─vgmirror-lvmirror 253:6 0 5G 0 lvm /ogg
sde 8:64 0 10G 0 disk
sdf 8:80 0 10G 0 disk
├─vgmirror-lvmirror_rmeta_1 253:4 0 4M 0 lvm
│ └─vgmirror-lvmirror 253:6 0 5G 0 lvm /ogg
└─vgmirror-lvmirror_rimage_1 253:5 0 5G 0 lvm
└─vgmirror-lvmirror 253:6 0 5G 0 lvm /ogg
删除lv mirror中的一块物理盘。
[root@zhanghao ogg]# lvs
WARNING: Not using lvmetad because a repair command was run.
Couldn't find device with uuid 5MM63i-87fQ-2xhO-E1vB-M0Op-5Lnb-fvgXeZ.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 49.80g
lvmirror vgmirror rwi-aor-p- 5.00g 100.00
#### 删除镜像中已经丢失的pv
vgreduce --removemissing --mirrorsonly --force vgmirror
恢复,不需要umount
#### 背景,三块盘做lv mirror,一块盘出现问题,执行repair可以自动恢复,故障盘被排除,因为元数据是分散配置的
#### 在磁盘没有丢元数据的情况下
#### 1. 将pv重新添加到vg中
vgextend vgmirror /dev/sdc
#### 2. 执行repair操作,可以根据元数据自动恢复
lvconvert --repair /dev/vgmirror/lvmirror
#### lvs观察同步进度
#### 如果另外一块磁盘恢复,需要手动将磁盘添加到lv中,将重新平衡数据。
lvconvert -m1 /dev/vgmirror/lvmirror /dev/sdc /dev/sde /dev/sdf




