暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

lvm基础

小胖运维 2022-05-14
791


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



文章转载自小胖运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论