第 5 章 LVM 配置示例

第 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 镜像错误”。

 

你可能感兴趣的:(第 5 章 LVM 配置示例)