第 5 章 LVM 配置示例
本章提供了一些基本 LVM 配置示例。
5.1. 在三个磁盘中创建 LVM 逻辑卷
在这个示例中是要创建一个名为 new_logical_volume 的逻辑卷,它由磁盘 /dev/sda1、/dev/sdb1 和 /dev/sdc1 组成。
5.1.1. 创建物理卷
要在某个卷组中使用磁盘,需要将其标记为 LVM 物理卷。
警告
这个命令会破坏 /dev/sda1、/dev/sdb1 和/dev/sdc1 中的所有数据。
# pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1
Physical volume "/dev/sda1" successfully created
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
5.1.2. 创建卷组
下面的命令可创建卷组 new_vol_group。
# vgcreate new_vol_group /dev/sda1 /dev/sdb1 /dev/sdc1
Volume group "new_vol_group" successfully created
可以使用 vgs 命令显示新卷组的属性。
# vgs
VG #PV #LV #SN Attr VSize VFree
new_vol_group 3 0 0 wz--n- 51.45G 51.45G
5.1.3. 创建逻辑卷
下面的命令可在卷组 new_vol_group 中创建逻辑卷 new_logical_volume。本示例创建的逻辑卷使用了卷组的 2GB 容量。
# lvcreate -L 2 G -n new_logical_volume new_vol_group
Logical volume "new_logical_volume" created
5.1.4. 创建文件系统
下面的命令在逻辑卷中创建了一个 GFS2 文件系统。
# mkfs.gfs2 -plock_nolock -j 1 /dev/new_vol_group/new_logical_volume
This will destroy any data on /dev/new_vol_group/new_logical_volume.
Are you sure you want to proceed? [y/n] y
Device: /dev/new_vol_group/new_logical_volume
Blocksize: 4096
Filesystem Size: 491460
Journals: 1
Resource Groups: 8
Locking Protocol: lock_nolock
Lock Table:
Syncing...
All Done
下面的命令将挂载逻辑卷并报告文件系统磁盘空间用量。
# mount /dev/new_vol_group/new_logical_volume /mnt
[root@tng3-1 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/new_vol_group/new_logical_volume
1965840 20 1965820 1% /mnt
5.2. 创建条带逻辑卷
本示例为创建一个名为 striped_logical_volume 的条带逻辑卷,并可在磁盘 /dev/sda1、/dev/sdb1 和 /dev/sdc1 间跨磁盘条带分配数据。
5.2.1. 创建物理卷
将卷组中要使用的磁盘标记为 LVM 物理卷。
警告
这个命令会破坏 /dev/sda1、/dev/sdb1 和/dev/sdc1 中的所有数据。
# pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1
Physical volume "/dev/sda1" successfully created
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
5.2.2. 创建卷组
以下命令可创建卷组 volgroup01。
# vgcreate volgroup01 /dev/sda1 /dev/sdb1 /dev/sdc1
Volume group "volgroup01" successfully created
可以使用 vgs 命令显示新卷组的属性。
# vgs
VG #PV #LV #SN Attr VSize VFree
volgroup01 3 0 0 wz--n- 51.45G 51.45G
5.2.3. 创建逻辑卷
以下命令可使用卷组 volgroup01 创建条带逻辑卷 striped_logical_volume。本示例创建的逻辑卷的大小为 2GB,有三个条带,每个条带的大小为 4Kb。
# lvcreate -i 3 -a I 4 -L 2 G -nstriped_logical_volume volgroup01
Rounding size (512 extents) up to stripe boundary size (513 extents)
Logical volume "striped_logical_volume" created
5.2.4. 创建文件系统
下面的命令在逻辑卷中创建了一个 GFS2 文件系统。
# mkfs.gfs2 -plock_nolock -j 1 /dev/volgroup01/striped_logical_volume
This will destroy any data on /dev/volgroup01/striped_logical_volume.
Are you sure you want to proceed? [y/n] y
Device: /dev/volgroup01/striped_logical_volume
Blocksize: 4096
Filesystem Size: 492484
Journals: 1
Resource Groups: 8
Locking Protocol: lock_nolock
Lock Table:
Syncing...
All Done
下面的命令将挂载逻辑卷并报告文件系统磁盘空间用量。
# mount /dev/volgroup01/striped_logical_volume /mnt
[root@tng3-1 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
13902624 1656776 11528232 13% /
/dev/hda1 101086 10787 85080 12% /boot
tmpfs 127880 0 127880 0% /dev/shm
/dev/volgroup01/striped_logical_volume
1969936 20 1969916 1% /mnt
5.3. 分割卷组
在本示例中,现有卷组由三个物理卷组成。如果在物理卷中有足够的未使用空间,就可在不添加新磁盘的情况下创建新的卷组。
在初始设定中,逻辑卷 mylv 是从卷组 myvol 中分割出来的,它依次包含三个物理卷 /dev/sda1、/dev/sdb1 和 /dev/sdc1。
完成这个步骤后,卷组 myvg 将包含 /dev/sda1 和 /dev/sdb1。第二个卷组 yourvg 将包含 /dev/sdc1。
5.3.1. 确定剩余空间
可以使用 pvscan 命令确定目前在卷组中有多少可用的剩余空间。
# pvscan
PV /dev/sda1 VG myvg lvm2 [17.15 GB / 0 free]
PV /dev/sdb1 VG myvg lvm2 [17.15 GB / 12.15 GB free]
PV /dev/sdc1 VG myvg lvm2 [17.15 GB / 15.80 GB free]
Total: 3 [51.45 GB] / in use: 3 [51.45 GB] / in no VG: 0 [0 ]
5.3.2. 移动数据
可以使用 pvmove 将 /dev/sdc1 中所有使用的物理扩展移动到 /dev/sdb1 中。执行 pvmove 会消耗较长时候。
# pvmove /dev/sdc1 /dev/sdb1
/dev/sdc1: Moved: 14.7%
/dev/sdc1: Moved: 30.3%
/dev/sdc1: Moved: 45.7%
/dev/sdc1: Moved: 61.0%
/dev/sdc1: Moved: 76.6%
/dev/sdc1: Moved: 92.2%
/dev/sdc1: Moved: 100.0%
移动数据后,可以看到 /dev/sdc1 中的所有空间都可用了。
# pvscan
PV /dev/sda1 VG myvg lvm2 [17.15 GB / 0 free]
PV /dev/sdb1 VG myvg lvm2 [17.15 GB / 10.80 GB free]
PV /dev/sdc1 VG myvg lvm2 [17.15 GB / 17.15 GB free]
Total: 3 [51.45 GB] / in use: 3 [51.45 GB] / in no VG: 0 [0 ]
5.3.3. 分割卷组
要创建新卷组 yourvg,请使用 vgsplit 命令分割卷组 myvg。
在可以分割卷组前,必须停用该逻辑卷。如果挂载了文件系统,必须在停用该逻辑卷之前卸载文件系统。
可以使用 lvchange 命令或者 vgchange 命令使逻辑卷失活。以下命令可以使逻辑卷 mylv 失活并从卷组 myvg 中分割出卷组 yourvg,将物理卷 /dev/sdc1 移动到新的卷组 yourvg 中。
# lvchange -a n /dev/myvg/mylv
# vgsplit myvg yourvg /dev/sdc1
Volume group "yourvg" successfully split from "myvg"
可以使用 vgs 查看两个卷组的属性。
# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 2 1 0 wz--n- 34.30G 10.80G
yourvg 1 0 0 wz--n- 17.15G 17.15G
5.3.4. 创建新逻辑卷
创建新的卷组后,可以创建新的逻辑卷 yourlv。
# lvcreate -L 5 G -n yourlv yourvg
Logical volume "yourlv" created
5.3.5. 生成一个文件系统并挂载到新的逻辑卷
可以在新的逻辑卷中生成一个文件系统并挂载它。
# mkfs.gfs2 -plock_nolock -j 1 /dev/yourvg/yourlv
This will destroy any data on /dev/yourvg/yourlv.
Are you sure you want to proceed? [y/n] y
Device: /dev/yourvg/yourlv
Blocksize: 4096
Filesystem Size: 1277816
Journals: 1
Resource Groups: 20
Locking Protocol: lock_nolock
Lock Table:
Syncing...
All Done
[root@tng3-1 ~]# mount /dev/yourvg/yourlv /mnt
5.3.6. 激活并挂载原来的逻辑卷
因为必须停用逻辑卷 mylv,所以需要在挂载它之前再次激活它。
# lvchange -a y /dev/myvg/mylv
[root@tng3-1 ~]# mount /dev/myvg/mylv /mnt
[root@tng3-1 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/yourvg/yourlv 24507776 32 24507744 1% /mnt
/dev/myvg/mylv 24507776 32 24507744 1% /mnt
5.4. 从逻辑卷中删除磁盘
本示例演示了如何从现有逻辑卷中删除磁盘。可以替换磁盘,也可以用这个磁盘作为不同卷的一部分。要删除磁盘,必须首先将 LVM 物理卷中的扩展移动到不同的磁盘或者一组磁盘中。
5.4.1. 将扩展移动到现有物理卷中
在本示例中,逻辑卷是在卷组 myvg 中的四个物理卷中进行分配的。
# pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda1 myvg lvm2 a- 17.15G 12.15G 5.00G
/dev/sdb1 myvg lvm2 a- 17.15G 12.15G 5.00G
/dev/sdc1 myvg lvm2 a- 17.15G 12.15G 5.00G
/dev/sdd1 myvg lvm2 a- 17.15G 2.15G 15.00G
要移动 /dev/sdb1 的扩展,以便可以将其从卷组中删除。
如果在该卷组的其他物理卷中没有足够的剩余扩展,则可以在想要删除的设备中执行不带选项的 pvmove 命令,那么就会在其他设备中分配扩展。
# pvmove /dev/sdb1
/dev/sdb1: Moved: 2.0%
...
/dev/sdb1: Moved: 79.2%
...
/dev/sdb1: Moved: 100.0%
完成 pvmove 命令后,扩展的分配如下:
# pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda1 myvg lvm2 a- 17.15G 7.15G 10.00G
/dev/sdb1 myvg lvm2 a- 17.15G 17.15G 0
/dev/sdc1 myvg lvm2 a- 17.15G 12.15G 5.00G
/dev/sdd1 myvg lvm2 a- 17.15G 2.15G 15.00G
使用 vgreduce 命令从卷组中删除物理卷 /dev/sdb1。
# vgreduce myvg /dev/sdb1
Removed "/dev/sdb1" from volume group "myvg"
[root@tng3-1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda1 myvg lvm2 a- 17.15G 7.15G
/dev/sdb1 lvm2 -- 17.15G 17.15G
/dev/sdc1 myvg lvm2 a- 17.15G 12.15G
/dev/sdd1 myvg lvm2 a- 17.15G 2.15G
现在可以物理删除这个磁盘或者将其分配给其他用户。
5.4.2. 将扩展移动到新磁盘中
在本示例中,在卷组 myvg 的三个物理卷中按以下方法分配逻辑卷:
# pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda1 myvg lvm2 a- 17.15G 7.15G 10.00G
/dev/sdb1 myvg lvm2 a- 17.15G 15.15G 2.00G
/dev/sdc1 myvg lvm2 a- 17.15G 15.15G 2.00G
要将 /dev/sdb1> 的扩展移动到新设备 /dev/sdd1 中。
5.4.2.1. 创建新物理卷
在 /dev/sdd1 中创建新物理卷。
# pvcreate /dev/sdd1
Physical volume "/dev/sdd1" successfully created
5.4.2.2. 在卷组中添加新物理卷
将 /dev/sdd1 添加到现有卷组 myvg 中。
# vgextend myvg /dev/sdd1
Volume group "myvg" successfully extended
[root@tng3-1]# pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda1 myvg lvm2 a- 17.15G 7.15G 10.00G
/dev/sdb1 myvg lvm2 a- 17.15G 15.15G 2.00G
/dev/sdc1 myvg lvm2 a- 17.15G 15.15G 2.00G
/dev/sdd1 myvg lvm2 a- 17.15G 17.15G 0
5.4.2.3. 移动数据
使用 pvmove 将数据从 /dev/sdb1 转移到 /dev/sdd1 中。
# pvmove /dev/sdb1 /dev/sdd1
/dev/sdb1: Moved: 10.0%
...
/dev/sdb1: Moved: 79.7%
...
/dev/sdb1: Moved: 100.0%
[root@tng3-1]# pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda1 myvg lvm2 a- 17.15G 7.15G 10.00G
/dev/sdb1 myvg lvm2 a- 17.15G 17.15G 0
/dev/sdc1 myvg lvm2 a- 17.15G 15.15G 2.00G
/dev/sdd1 myvg lvm2 a- 17.15G 15.15G 2.00G
5.4.2.4. 删除卷组中的旧物理卷
将数据从 /dev/sdb1 中移走后,就可以将其从卷组中删除。
# vgreduce myvg /dev/sdb1
Removed "/dev/sdb1" from volume group "myvg"
现在可以将这个磁盘重新分配给其他卷组,或者将其从系统中删除。
5.5. 在集群中创建镜像 LVM 逻辑卷
在集群中创建镜像 LVM 逻辑卷与在单一节点中使用 mirror 片段类型创建镜像 LVM 逻辑卷所使用的命令和过程相同。但要在集群中创建镜像 LVM 逻辑卷,该集群和集群镜像必须处于运行状态,该集群必须可以仲裁,且必须在 lvm.conf 文件中正确设定锁定类型以便启用集群锁定,可以是直接锁定,也可以如 第 3.1 节 “在集群中创建 LVM 卷” 所述使用 lvmconf 命令锁定。
在 Red Hat Enterprise Linux 7 中使用 Pacermaker 管理集群。只有与 Pacemaker 集群联合使用方可支持集群的 LVM 逻辑卷,且必须将其配置为集群资源。
下面是在集群中创建镜像 LVM 卷的步骤。
安装集群软件及 LVM 软件包,启动该集群软件,并创建该集群。必须为该集群配置 fencing。文档《高可用附加组件管理》中提供了创建集群及为集群中的节点配置 fencing 的步骤示例。文档《高可用附加组件管理》还提供更多有关集群组件配置的详情。
要创建可为集群中所有节点共享的镜像逻辑卷,则必须在该集群每个节点的 lvm.conf 文件中正确设定锁定类型。默认情况下是将锁定类型设定为 local。要更改这个设置,请在集群的每个节点中执行以下命令启用集群的锁定:
# /sbin/lvmconf --enable-cluster
为集群设定 dlm 资源。将该资源作为克隆的资源创建,以便其可在该集群的每个节点中运行。
# pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true
将 clvmd 配置为集群资源。创建资源时只将 dlm 资源作为克隆资源创建,以便其可在该集群的所有节点中运行。注:必须设定 with_cmirrord=true 参数,以便在所有运行 clvmd 的节点中启用 cmirrord 守护进程。
# pcs resource create clvmd pcf:heartbeat:clvm with_cmirrord=true op monitor interval=30s on-fail=fence clone interleave=true ordered=true
如果已配置 clvmd 资源,但没有指定 with_cmirrord=true 参数,则可以使用下面的命令更新该资源以便其包含该参数:
# pcs resource update clvmd with_cmirrord=true
设定 clvmd 和 dlm 相依性及启动顺序。必须在 dlm 之后启动clvmd,且必须在 dlm 所在的同一节点中运行。
# pcs constraint order start dlm-clone then clvmd-clone
# pcs constraint colocation add clvmd-clone with dlm-clone
创建镜像。第一步是创建物理卷。下面的命令创建三个物理卷,其中两个物理卷将作为镜像的分支,第三个物理卷将包含镜像日志。
# pvcreate /dev/xvdb1
Physical volume "/dev/xvdb1" successfully created
[root@doc-07 ~]# pvcreate /dev/xvdb2
Physical volume "/dev/xvdb2" successfully created
[root@doc-07 ~]# pvcreate /dev/xvdc1
Physical volume "/dev/xvdc1" successfully created
创建卷组。这个示例创建了由前一步创建的三个物理卷组成的卷组 vg001。
# vgcreate vg001 /dev/xvdb1 /dev/xvdb2 /dev/xvdc1
Clustered volume group "vg001" successfully created
请注意:vgcreate 命令的输出结果表示卷组是集群的。可以使用 vgs 命令确认卷组是集群的,该命令可显示卷组属性。如果卷组是集群的,它会显示 c 属性。
vgs vg001
VG #PV #LV #SN Attr VSize VFree
vg001 3 0 0 wz--nc 68.97G 68.97G
创建镜像逻辑卷。这个示例在卷组 vg001 中创建逻辑卷 mirrorlv。这个卷有一个镜像分支。这个示例指定使用物理卷的哪些扩展作为逻辑卷。
# lvcreate --type mirror -l 1000 -m 1 vg001 -n mirrorlv /dev/xvdb1:1-1000 /dev/xvdb2:1-1000 /dev/xvdc1:0
Logical volume "mirrorlv" created
可以使用 lvs 命令显示创建镜像的过程。以下示例显示 47% 的镜像被同步,然后是 91%,当镜像完成时为 100%。
# lvs vg001/mirrorlv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mirrorlv vg001 mwi-a- 3.91G vg001_mlog 47.00
[root@doc-07 log]# lvs vg001/mirrorlv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mirrorlv vg001 mwi-a- 3.91G vg001_mlog 91.00
[root@doc-07 ~]# lvs vg001/mirrorlv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mirrorlv vg001 mwi-a- 3.91G vg001_mlog 100.00
在系统日志中会记录镜像完成:
May 10 14:52:52 doc-07 [19402]: Monitoring mirror device vg001-mirrorlv for events
May 10 14:55:00 doc-07 lvm[19402]: vg001-mirrorlv is now in-sync
可以使用 lvs 命令的 -o +devices 选项显示镜像的配置,其中包括组成镜像分支的设备。可以看到在这个示例中逻辑卷是由两个线性映像和一个日志组成。
# lvs -a -o +devices
LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices
mirrorlv vg001 mwi-a- 3.91G mirrorlv_mlog 100.00 mirrorlv_mimage_0(0),mirrorlv_mimage_1(0)
[mirrorlv_mimage_0] vg001 iwi-ao 3.91G /dev/xvdb1(1)
[mirrorlv_mimage_1] vg001 iwi-ao 3.91G /dev/xvdb2(1)
[mirrorlv_mlog] vg001 lwi-ao 4.00M /dev/xvdc1(0)
可以使用 lvs 命令的 seg_pe_ranges 选项显示数据布局。可以使用这个选项验证您的布局是正确的冗余。这个命令的输出会显示 PE 范围,格式与 lvcreate 和 lvresize 命令的输入格式相同。
# lvs -a -o +seg_pe_ranges --segments
PE Ranges
mirrorlv_mimage_0:0-999 mirrorlv_mimage_1:0-999
/dev/xvdb1:1-1000
/dev/xvdb2:1-1000
/dev/xvdc1:0-0
注意
有关从 LVM 镜像卷的一个分支失败中恢复的详情请参考 第 6.3 节 “恢复 LVM 镜像错误”。