【存储】AIX存储管理基本概念和操作(LVM)


AIX存储管理基本概念和操作    



【存储】AIX存储管理基本概念和操作(LVM)
【存储】AIX存储管理基本概念和操作(LVM)
【存储】AIX存储管理基本概念和操作(LVM)
【存储】AIX存储管理基本概念和操作(LVM)
【存储】AIX存储管理基本概念和操作(LVM)
【存储】AIX存储管理基本概念和操作(LVM)









AIX存储管理的基本概念包括(不限于)  

1.磁盘或者硬盘  
如何查看系统已有的磁盘及相关属性  

2.物理卷(Physical Volume,PV)  
物理卷和磁盘/硬盘有何关联,列出系统已有PV及相关属性,添加/删除/维护PV属性  

3.卷组(Volume Group,VG)  
VG的创建,删除,扩容,维护和导入导出迁移,查看相关属性  

4.物理分区(Physical Parttion,PP)  

什么是PP  

5.逻辑分区(Logical Partition,LP)  

什么是LP  

6.逻辑卷(Logical Volume,LV)  

lv的创建,删除,扩容,维护,查看相关属性  

7.逻辑卷的条带化和镜像  
     
如何设置逻辑卷的条带化和镜像  

8.文件系统(File System,FS)  

AIX支持哪些FS,如何创建、删除、挂载和自动挂载FS  

上述问题在文章中有具体答案.  


存储管理概念

LVM 使用的基本概念包括物理卷、卷组、物理分区、逻辑卷、逻辑分区、文件系统和原始设备。下面介绍它们的一些特征:

  • 每个单独的磁盘驱动器是一个命名的物理卷 (PV),并具有诸如 hdisk0 或 hdisk1 等名称。
  • 一个或多个 PV 可以构成一个卷组 (VG)。一个物理卷最多只能属于一个 VG。
  • 不能将某个 PV 的一部分分配到一个 VG。一个物理卷整体地分配到某个卷组。
  • 即使物理卷属于不同的类型,例如 SCSI 或 SSA,也可以将它们分配到同一个卷组。
  • 物理卷中的存储空间划分为物理分区 (PP)。在属于同一个 VG 的所有磁盘上,物理分区的大小完全相同。
  • 在每个卷组中,可以定义一个或多个逻辑卷 (LV)。从用户的角度看,逻辑卷上存储的数据似乎是连续的,但是可以分散在同一个卷组中的不同物理卷上。
  • 逻辑卷由一个或多个逻辑分区 (LP) 组成。每个逻辑分区至少有一个对应的物理分区。一个逻辑分区和一个物理分区始终具有相同的大小。最多可以将数据的三个副本定位在不同的物理分区上。通常,为了实现冗余,将存储相同数据的物理分区定位在不同的物理磁盘上。
  • 逻辑卷中的数据可以按有组织的方式进行存储,并具有位于有目录中的文件的形式。这种结构化和层次性的组织形式称为文件系统。
  • 还可以将逻辑卷中的数据视为一个连续的字节串。此类逻辑卷称为原始逻辑卷。使用该数据以正确地访问和解释它是应用程序的责任。
  • 卷组描述符区域 (VGDA) 是磁盘上的一个区域,其中包含有关该物理卷所在的卷组的信息。它还包括有关属于该卷组的所有物理和逻辑卷的属性和状态的信息。VGDA 中的信息由 LVM 命令使用和更新。每个物理卷至少有一个 VGDA。属于同一个卷组的所有磁盘的 VGDA 中的信息必须完全相同。VGDA 的内部体系结构及其在磁盘上的位置取决于卷组的类型(原始、大容量或可扩展)。
  • 卷组状态区域 (VGSA) 用于描述卷组中所有物理卷中的所有物理分区的状态。VGSA 指示某个物理分区是包含准确还是过时的信息。VGSA 用于监视和维护数据副本同步。VGSA 本质上是一个位图,其体系结构和在磁盘上的位置取决于卷组的类型。
  • 逻辑卷控制块 (LVCB) 包含有关逻辑卷的重要信息,例如逻辑分区数量或磁盘分配策略。其体系结构和在磁盘上的位置取决于它所在的卷组的类型。对于标准卷组,LVCB 驻留在 LV 中的第一个用户数据块上。对于大容量卷组,磁盘上的 VGDA 中存在额外的 LVCB 信息。对于可扩展卷组,所有的相关逻辑卷控制信息都作为 LVCB 信息区域和 LV 入口区域的一部分保留在 VGDA 中。

注意:硬盘驱动器的布局是由 /usr/include/sys/hd_psn.h 头文件定义的。LVM 记录从磁盘上的第 7 个扇区开始。所有 LVM 记录结构都是在 /usr/include/lvmrec.h 头文件中定义的。

逻辑卷存储的限制

AIX 5L Version 5.3 的 LVM 层提供了更高级别的磁盘管理灵活性。存在一些必须注意的限制,如表 1 所示。

表 1

VG 类型 最大 PV 数量 最大 LV 数量 每个 VG 的最大 PP 数量 最大 PP 大小
常规 VG 32 256 32512 (1016*32) 1 GB
大容量 VG 128 512 130048 (1016*128) 1 GB
可扩展 VG 1024 4096 2097152 128 GB

AIX 5L Version 5.3 的 LVM 限制

回页首

物理卷

在 最初将某个磁盘添加到系统时,系统将其视为一个简单设备。此时还不可以访问该磁盘以执行 LVM 操作。要使其可访问,必须将它分配到某个卷组,这意味着将其从磁盘更改为物理卷。对于每个磁盘,将会在 /dev 目录下创建两个设备驱动程序:一个块设备驱动程序和一个字符设备驱动程序。系统向磁盘驱动器分配一个 32 位唯一标识符,此标识符称为物理卷标识符 (PVID)。

不带任何参数使用的 lspv 命令将显示所有的物理卷、物理卷的 PVID、PV 所在的卷组,以及卷组的状态,如示例 1 所示。

示例 1 使用 lspv 命令显示物理卷

# lspv

hdisk0          00c478de09a40b16                    rootvg          active

hdisk1          00c478de09caf163                    rootvg          active

hdisk2          00c478de09caf37f                    None

hdisk3          00c478de49630c6a                    None

hdisk4          00c478de00655246                    None

hdisk5          00c478de008a399b                    None

hdisk6          00c478de008a3ba1                    None

hdisk7          00c478de6c9883b7                    None

 

PVID

在生成 PVID 时,系统使用自己的序列号和时间戳,以确保两个磁盘决不会具有相同的 PVID。

PVID 还存储在 ODM 中。它们由 LVM 命令使用,并且可能由诸如 HACMP 等外部应用程序引用。

下面的命令通过分配 PVID(如果还没有的话)将可用磁盘设备更改为物理卷:

chdev -l hdisk7 -a pv=yes

如果磁盘已经是物理卷,则此命令不起作用。

下面的命令从物理卷中清除 PVID:

chdev -l hdisk7 -a pv=clear

注意:可以使用诸如 lquerypv 等中间级别的命令列出磁盘的 PVID,如下所示:

# lquerypv -h /dev/hdisk2 80 10

00000080 00C478DE 09CAF37F 00000000 00000000 |..x.............|

列出有关物理卷的信息

可以使用 lspv 命令并作为参数传递物理卷的名称,以查找有关某个物理卷的更多详细信息,如示例 6-2 所示。

示例 2 使用 lspv 显示有关某个物理卷的详细信息

# lspv hdisk2

PHYSICAL VOLUME:hdisk2                   VOLUME GROUP:testvg

PV IDENTIFIER:00c478de09caf37f VG IDENTIFIER     00c478de00004c00000001078fc3497d

PV STATE:active

STALE PARTITIONS:0                        ALLOCATABLE:yes

PP SIZE:128 megabyte(s)          LOGICAL VOLUMES:  1

TOTAL PPs:546 (69888 megabytes)    VG DESCRIPTORS:   2

FREE PPs:542 (69376 megabytes)    HOT SPARE:no

USED PPs:4 (512 megabytes)        MAX REQUEST:256 kilobytes

FREE DISTRIBUTION:  110..105..109..109..109

USED DISTRIBUTION:  00..04..00..00..00

 

示例 2 中的字段含义如下:

PHYSICAL VOLUME 物理卷的名称。

PV IDENTIFIER 物理卷的标识符。

PV STATE 物理卷的状态:激活、丢失或已删除。可以使用 chpv 命令更改状态。

STALE PARTITIONS 过时分区的数量。

PP SIZE 物理分区的大小。

TOTAL PPs 驻留在该磁盘上的物理分区总数(空闲或已使用)。

FREE PPs 物理卷上可用的空闲分区数量。

USED PPs 物理卷上的已使用分区数量。

FREE DISTRIBUTION

每个物理内 (intra-physical) 卷区域上可用的空闲物理分区数量。

USED DISTRIBUTION

位于每个物理内卷区域上的已使用物理分区数量。

VOLUME GROUP 物理卷所在的卷组的名称。

VG IDENTIFIER 物理卷所在的卷组的标识符。

ALLOCATABLE 物理卷的分配权限确定了是否可以将空闲 PP 分配到逻辑卷。

LOGICAL VOLUMES 至少有一个 LP 位于此物理卷上的逻辑卷数量。

VG DESCRIPTORS 位于此物理卷上的 VGDA 数量。

HOT SPARE 是否将该物理卷定义为热后备 (hot spare)。

MAX REQUEST 此物理卷的 LTG 大小。

可 以将 lspv 命令与 -l 标志结合使用,以显示至少有一个分区位于该物理卷上的所有逻辑卷的名称、位于该物理卷上的分区总数、对应于 LP 的 PP 总数、对应于每个物理内 (intra-physical) 磁盘区域的 PP 分布、逻辑卷的安装点(如果存在的话)。 示例 6-3 显示了运行此命令时获得的输出的示例。

示例 3 使用 lspv -l 命令

# lspv -l hdisk0

hdisk0:

LV NAME               LPs   PPs   DISTRIBUTION          MOUNT POINT

hd3                   1     1     00..00..01..00..00    /tmp

hd10opt               1     1     00..00..01..00..00    /opt

hd5                   1     1     01..00..00..00..00    N/A

hd8                   1     1     00..00..01..00..00    N/A

hd6                   11    11    00..00..11..00..00    N/A

hd2                   8     8     00..00..08..00..00    /usr

hd9var                1     1     00..00..01..00..00    /var

hd1                   1     1     00..00..01..00..00    /home

hd4                   1     1     00..00..01..00..00    /

 

如果希望显示分区的数量、位置,以及它们对应的逻辑卷,可以使用 lspv –p 命令,如示例 4 所示。

示例 4 使用 lspv 来显示针对逻辑卷的 PP 分配

# lspv -p hdisk0

hdisk0:

PP RANGE  STATE   REGION        LV NAME             TYPE       MOUNT POINT

1-1     used    outer edge      hd5                 boot       N/A

2-110   free    outer edge

111-219   free    outer middle

220-220   used    center        hd8                 jfs2log    N/A

221-221   used    center        hd2                 jfs2       /usr

222-222   used    center        hd3                 jfs2       /tmp

223-223   used    center        hd10opt             jfs2       /opt

224-230   used    center        hd2                 jfs2       /usr

231-241   used    center        hd6                 paging     N/A

242-328   free    center

329-437   free    inner middle

438-546   free    inner edge

 

通过使用 lspv –M 命令,可以创建详细的磁盘布局图,并显示每个物理和逻辑分区之间的关系,如示例 5 所示。

示例 5 使用 lspv -M 命令显示物理卷的布局

# lspv -M hdisk0|more

hdisk0:1        hd5:1

hdisk0:2-110

hdisk0:111      lv1:1:1

hdisk0:112      lv1:2:1

hdisk0:113      lv1:3:1

hdisk0:114      lv1:4:1

hdisk0:115      lv1:5:1

hdisk0:116      lv1:6:1

hdisk0:117      lv1:7:1

hdisk0:118      lv1:8:1

hdisk0:119      lv1:9:1

hdisk0:120      lv1:10:1

hdisk0:121      lv1:11:1

hdisk0:122      lv1:12:1

hdisk0:123-219

hdisk0:220      hd8:1

hdisk0:221      hd2:1

hdisk0:222      hd3:1

hdisk0:223      hd10opt:1

hdisk0:224      hd2:2

hdisk0:225      hd2:3

hdisk0:226      hd2:4

hdisk0:227      hd2:5

hdisk0:228      hd2:6

hdisk0:229      hd2:7

hdisk0:230      hd2:8

hdisk0:231      hd6:1

hdisk0:232      hd6:2

hdisk0:233      hd6:3

hdisk0:234      hd6:4

hdisk0:235      hd6:5

hdisk0:236      hd6:6

hdisk0:237      hd6:7

hdisk0:238      hd6:8

hdisk0:239      hd6:9

hdisk0:240      hd6:10

hdisk0:241      hd6:11

hdisk0:242-546

 

更改物理卷的分配权限

物理卷的分配权限确定是否可以将位于该物理卷上还未分配到逻辑卷的物理分区分配到逻辑卷。驻留在该物理卷上的逻辑卷的操作不受影响。

在示例 6 中,我们禁用了将 hdisk2 中新的空闲物理分区分配到任何逻辑卷的能力。我们尝试创建一个将使用 hdisk2 中的 PP 的逻辑卷,并收到一条表明该物理卷中的分区不可分配的错误消息。

示例 6 禁用物理卷的分区分配

# chpv -an hdisk2

# lspv hdisk2

PHYSICAL VOLUME:hdisk2                   VOLUME GROUP:testvg

PV IDENTIFIER:00c478de09caf37f VG IDENTIFIER     00c478de00004c00000001078fc3497d

PV STATE:active

STALE PARTITIONS:0                        ALLOCATABLE:no

PP SIZE:128 megabyte(s)          LOGICAL VOLUMES:  1

TOTAL PPs:546 (69888 megabytes)    VG DESCRIPTORS:   2

FREE PPs:542 (69376 megabytes)    HOT SPARE:no

USED PPs:4 (512 megabytes)        MAX REQUEST:256 kilobytes

FREE DISTRIBUTION:  110..105..109..109..109

USED DISTRIBUTION:  00..04..00..00..00

# mklv -y test -t jfs2 testvg 10 hdisk2

0516-823 lquerypv:Physical Volume hdisk2 is not allocatable.

0516-848 lquerypv:Failure on physical volume hdisk2, it may be missing

or removed.

0516-822 mklv:Unable to create logical volume.

 

要启用分配权限,可以使用以下命令:

chpv -ay hdisk2

 

更改物理卷的可用性

物理卷的可用性定义了是否可以对指定的物理卷执行任何逻辑输入/输出操作。任何后续的 LVM 操作将不会考虑该物理卷上的 VGDA 和 VGSA 副本。而且,有关该物理卷的信息将从卷组中的其他物理卷的 VGDA 中删除。该物理卷将标记为“已删除”。

在示例 7 中,我们演示了“可用”的概念及其与 VGDA 的关系,如下所示:

lsvg testvg 命令显示 VG 是活动的,包含两个 PV,两个 PV 都是活动的,并且该 VG 有三个 VGDA。

lsvg -p testvg 命令显示 testvg 包含磁盘 hdisk2 和 hdisk3,并且两个磁盘都是活动的。

lspv hdisk3 显示 hdisk3 是活动的并具有两个 VGDA。

lspv hdisk2 显示 hdisk2 是活动的并具有一个 VGDA。

chpv -vr hdisk3 使 hdisk3 不可用。

lspv hdisk3 确认 hdisk3 已删除,并且其上没有任何 VGDA。

lspv hdisk2 确认 hdisk2 是活动的,并且现在包含两个 VGDA,因为任何卷组都必须至少包含一个 VGDA。

lsvg -p testvg 显示 hdisk3 已删除。

lsvg testvg 显示卷组仍然是活动的,两个 PV 中有一个是活动的,VGDA 总数已更改为两个。

chpv -va hdisk3 使 hdisk3 再次可用。

lspv hdisk3 显示 hdisk3 是活动的,并且仅包含一个 VGDA。

lsvg -p testvg 确认两个磁盘现在都是活动的。

示例 7 使用 chpv 命令更改物理卷的可用性

# lsvg testvg

VOLUME GROUP:testvg                   VG IDENTIFIER:00c478de00004c00000001078fc3497d

VG STATE:active                   PP SIZE:128 megabyte(s)

VG PERMISSION:read/write               TOTAL PPs:1092 (139776 megabytes)

MAX LVs:256                      FREE PPs:1092 (139776 megabytes)

LVs:0                        USED PPs:0 (0 megabytes)

OPEN LVs:0                        QUORUM:         2

TOTAL PVs:2                        VG DESCRIPTORS: 3

STALE PVs:0                        STALE PPs:      0

ACTIVE PVs:2                        AUTO ON:yes

MAX PPs per VG:     32512

MAX PPs per PV:1016                     MAX PVs:        32

LTG size (Dynamic):256 kilobyte(s)          AUTO SYNC:no

HOT SPARE:no                       BB POLICY:relocatable

# lsvg -p testvg

testvg:

PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION

hdisk2            active            546         546         110..109..109..109..109

hdisk3            active            546         546         110..109..109..109..109

# lspv hdisk3

PHYSICAL VOLUME:hdisk3                   VOLUME GROUP:testvg

PV IDENTIFIER:00c478de49630c6a VG IDENTIFIER     00c478de00004c00000001078fc3497d

PV STATE:active

STALE PARTITIONS:0                        ALLOCATABLE:yes

PP SIZE:128 megabyte(s)          LOGICAL VOLUMES:  0

TOTAL PPs:546 (69888 megabytes)    VG DESCRIPTORS:   2

FREE PPs:546 (69888 megabytes)    HOT SPARE:no

USED PPs:0 (0 megabytes)          MAX REQUEST:256 kilobytes

FREE DISTRIBUTION:  110..109..109..109..109

USED DISTRIBUTION:  00..00..00..00..00

# lspv hdisk2

PHYSICAL VOLUME:hdisk2                   VOLUME GROUP:testvg

PV IDENTIFIER:00c478de09caf37f VG IDENTIFIER     00c478de00004c00000001078fc3497d

PV STATE:active

STALE PARTITIONS:0                        ALLOCATABLE:yes

PP SIZE:128 megabyte(s)          LOGICAL VOLUMES:  0

TOTAL PPs:546 (69888 megabytes)    VG DESCRIPTORS:   1

FREE PPs:546 (69888 megabytes)    HOT SPARE:no

USED PPs:0 (0 megabytes)          MAX REQUEST:256 kilobytes

FREE DISTRIBUTION:  110..109..109..109..109

USED DISTRIBUTION:  00..00..00..00..00

# chpv -vr hdisk3

# lspv hdisk3

PHYSICAL VOLUME:hdisk3                   VOLUME GROUP:testvg

PV IDENTIFIER:00c478de49630c6a VG IDENTIFIER     00c478de00004c00000001078fc3497d

PV STATE:removed

STALE PARTITIONS:0                        ALLOCATABLE:yes

PP SIZE:128 megabyte(s)          LOGICAL VOLUMES:  0

TOTAL PPs:546 (69888 megabytes)    VG DESCRIPTORS:   0

FREE PPs:546 (69888 megabytes)    HOT SPARE:no

USED PPs:0 (0 megabytes)          MAX REQUEST:256 kilobytes

FREE DISTRIBUTION:  110..109..109..109..109

USED DISTRIBUTION:  00..00..00..00..00

# lspv hdisk2

PHYSICAL VOLUME:hdisk2                   VOLUME GROUP:testvg

PV IDENTIFIER:00c478de09caf37f VG IDENTIFIER     00c478de00004c00000001078fc3497d

PV STATE:active

STALE PARTITIONS:0                        ALLOCATABLE:yes

PP SIZE:128 megabyte(s)          LOGICAL VOLUMES:  0

TOTAL PPs:546 (69888 megabytes)    VG DESCRIPTORS:   2

FREE PPs:546 (69888 megabytes)    HOT SPARE:no

USED PPs:0 (0 megabytes)          MAX REQUEST:256 kilobytes

FREE DISTRIBUTION:  110..109..109..109..109

USED DISTRIBUTION:  00..00..00..00..00

# lsvg -p testvg

testvg:

PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION

hdisk2            active            546         546         110..109..109..109..109

hdisk3            removed           546         546         110..109..109..109..109

# lsvg testvg

VOLUME GROUP:testvg                   VG IDENTIFIER:00c478de00004c00000001078fc3497d

VG STATE:active                   PP SIZE:128 megabyte(s)

VG PERMISSION:read/write               TOTAL PPs:1092 (139776 megabytes)

MAX LVs:256                      FREE PPs:1092 (139776 megabytes)

LVs:0                        USED PPs:0 (0 megabytes)

OPEN LVs:0                        QUORUM:         2

TOTAL PVs:2                        VG DESCRIPTORS: 2

STALE PVs:0                        STALE PPs:      0

ACTIVE PVs:1                        AUTO ON:yes

MAX PPs per VG:     32512

MAX PPs per PV:1016                     MAX PVs:        32

LTG size (Dynamic):256 kilobyte(s)          AUTO SYNC:no

HOT SPARE:no                       BB POLICY:relocatable

# chpv -va hdisk3

# lspv hdisk3

PHYSICAL VOLUME:hdisk3                   VOLUME GROUP:testvg

PV IDENTIFIER:00c478de49630c6a VG IDENTIFIER     00c478de00004c00000001078fc3497d

PV STATE:active

STALE PARTITIONS:0                        ALLOCATABLE:yes

PP SIZE:128 megabyte(s)          LOGICAL VOLUMES:  0

TOTAL PPs:546 (69888 megabytes)    VG DESCRIPTORS:   1

FREE PPs:546 (69888 megabytes)    HOT SPARE:no

USED PPs:0 (0 megabytes)          MAX REQUEST:256 kilobytes

FREE DISTRIBUTION:  110..109..109..109..109

USED DISTRIBUTION:  00..00..00..00..00

# lsvg -p testvg

testvg:

PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION

hdisk2            active            546         546         110..109..109..109..109

hdisk3            active            546         546         110..109..109..109..109

 

在更改任何物理卷的可用性之前,必须关闭驻留在该磁盘上的任何逻辑卷,并确保卷组在删除该磁盘以后满足定额 (quorum) 要求。

清除物理卷中的引导记录

要清除位于物理卷 hdisk1 上的引导记录,可以使用以下命令:

chpv -c hdisk1

 

声明物理卷热后备

可以使用 chpv 命令将某个物理卷定义为热后备。此命令还禁用该物理卷的分配权限。该磁盘的大小必须至少等于卷组中已经存在的最小磁盘的大小。

要将 hdisk3 定义为热后备,可以使用以下命令:

chpv -hy hdisk3

 

要从 hdisk3 所在的卷组的热后备池中删除 hdisk3,可以使用以下命令:

chpv -hn hdisk3

 

迁移物理卷中的数据

可以将位于物理卷上的物理分区移动到同一个卷组中包含的一个或多个物理卷。

在示例 8 中,我们提供了迁移物理卷中的数据的示例,如下所示:

  • lsvg -p rootvg 显示 rootvg 中包含的所有 PV。
  • lsvg -M hdisk1 显示位于 hdisk1 上的所有物理分区的布局图。
  • lspv -M hdisk5 显示 hdisk5 的所有分区都未分配。
  • migratepv hdisk1 hdisk5 将数据从 hdisk1 迁移到 hdisk5。
  • lspv -M hdisk1 确认 hdisk1 的所有分区均为空闲。
  • chpv -c hdisk1 清除 hdisk1 中的引导记录。
  • lspv -M hdisk5 确认所有物理分区都已迁移到 hdisk5。

示例 8 将物理分区从一个磁盘迁移到另一个磁盘

# lsvg -p rootvg

rootvg:

PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION

hdisk0            active            546         523         109..109..87..109..109

hdisk1            active            546         538         109..105..106..109..109

hdisk5            active            546         546         110..109..109..109..109

# lspv -M hdisk1

hdisk1:1        hd5:1:2

hdisk1:2-122

hdisk1:123      fslv00:1

hdisk1:124      fslv00:2

hdisk1:125      fslv00:3

hdisk1:126      fslv00:4

hdisk1:127-219

hdisk1:220      hd4:1

hdisk1:221      hd9var:1

hdisk1:222      hd1:1

hdisk1:223-546

# lspv -M hdisk5

hdisk5:1-546

# migratepv hdisk1 hdisk5

0516-1011 migratepv:Logical volume hd5 is labeled as a boot logical volume.

0516-1246 migratepv:If hd5 is the boot logical volume, please run 'chpv -c hdisk1'

as root user to clear the boot record and avoid a potential boot

off an old boot image that may reside on the disk from which this

logical volume is moved/removed.

# lspv -M hdisk1

hdisk1:1-546

# chpv -c hdisk1

# lspv -M hdisk5

hdisk5:1        hd5:1:2

hdisk5:2-110

hdisk5:111      fslv00:1

hdisk5:112      fslv00:2

hdisk5:113      fslv00:3

hdisk5:114      fslv00:4

hdisk5:115-219

hdisk5:220      hd4:1

hdisk5:221      hd9var:1

hdisk5:222      hd1:1

hdisk5:223-546

 

如果迁移包含引导映像的物理卷中的数据,则还应该更新引导列表。

可以仅迁移属于某个特定逻辑卷的分区中的数据。要仅将属于逻辑卷 testlv 的物理分区从 hdisk1 迁移到 hdisk5,可以使用以下命令:

migratepv -l testlv hdisk1 hdisk5

 

迁移分区

可以将数据从位于一个物理磁盘上的一个分区迁移到不同磁盘上的另一个物理分区。

在示例 9 中,我们提供了将数据从一个物理分区迁移到另一个物理分区的示例,如下所示:

  • lspv -M hdisk1 显示位于 hdisk1 上的所有物理分区的布局图。请注意,逻辑卷 testlv 的逻辑分区号 1 的第二个副本驻留在物理分区 115 上。
  • lspv -M hdisk5 显示 hdisk5 的所有分区都未分配。
  • migratelp testlv/1/2 hdisk5/123 将逻辑卷的逻辑分区号 1 的第二个副本中的数据迁移到物理分区 123 上的 hdisk5。
  • lsvg -M hdisk1 显示位于 hdisk1 上的所有物理分区的布局图。请注意,物理分区 115 是空闲的。
  • lspv -M hdisk5 确认逻辑卷 testlv 的逻辑分区号 1 的第二个副本现在驻留在 hdisk5 的物理分区 123 上。

示例 9 将某个分区迁移到不同物理卷上的另一个分区

# lspv -M hdisk1

hdisk1:1        hd5:1:2

hdisk1:2-110

hdisk1:111      fslv00:1

hdisk1:112      fslv00:2

hdisk1:113      fslv00:3

hdisk1:114      fslv00:4

hdisk1:115      testlv:1:2

hdisk1:116-219

hdisk1:220      hd4:1

hdisk1:221      hd9var:1

hdisk1:222      hd1:1

hdisk1:223-546

# lspv -M hdisk5

hdisk5:1-546

# migratelp testlv/1/2 hdisk5/123

migratelp:Mirror copy 2 of logical partition 1 of logical volume

testlv migrated to physical partition 123 of hdisk5.

# lspv -M hdisk1

hdisk1:1        hd5:1:2

hdisk1:2-110

hdisk1:111      fslv00:1

hdisk1:112      fslv00:2

hdisk1:113      fslv00:3

hdisk1:114      fslv00:4

hdisk1:115-219

hdisk1:220      hd4:1

hdisk1:221      hd9var:1

hdisk1:222      hd1:1

hdisk1:223-546

# lspv -M hdisk5

hdisk5:1-122

hdisk5:123      testlv:1:2

hdisk5:124-546

 

确定 LTG 大小

逻辑磁道组 (LTG) 大小是 I/O 磁盘操作允许的最大传输大小。

可以使用 lquerypv 命令确定物理磁盘的 LTG 大小,如示例 6-10 所示。一个磁盘可以支持多种 LTG 大小,使用 ioctl 调用可以确定这些大小。

示例 10 使用 lquerypv 命令确定 LTG 大小

# lquerypv -M hdisk0

256

 

回页首

管理逻辑卷

逻辑卷使得应用程序在访问数据时能够将数据当作是连续存储的。逻辑卷由一个或多个带编号的逻辑分区的序列组成。每个逻辑分区至少有一个并且至多有三个对应的物理分区,这些物理分区可以定位在不同物理卷上。物理分区在磁盘上的位置由物理内和物理间分配策略确定。

对于每个逻辑卷,/dev 目录下存在两个对应的设备文件。第一个是字符设备,第二个是块设备。

创建逻辑卷

可以使用 mklv 命令创建逻辑卷。此命令允许指定逻辑卷的名称及其特征,例如逻辑分区的数量及其位置。

在示例 11 中,我们使用 mklv 命令在卷组 test1vg 中创建一个名为 lv3 的逻辑卷,其类型为 jfs2,并具有 10 个位于 hdisk5 上的逻辑分区。

示例 11 使用 mklv 命令

# mklv -y lv3 -t jfs2 -a im test1vg 10 hdisk5

lv3

# lslv lv3

LOGICAL VOLUME:lv3                    VOLUME GROUP:test1vg

LV IDENTIFIER:00c5e9de00004c0000000107a5b596ab.4 PERMISSION:read/write

VG STATE:active/complete        LV STATE:closed/syncd

TYPE:jfs2                   WRITE VERIFY:off

MAX LPs:512                    PP SIZE:512 megabyte(s)

COPIES:1                      SCHED POLICY:parallel

LPs:10                     PPs:            10

STALE PPs:0                      BB POLICY:relocatable

INTER-POLICY:minimum                RELOCATABLE:yes

INTRA-POLICY:inner middle           UPPER BOUND:    32

MOUNT POINT:N/A                    LABEL:无

MIRROR WRITE CONSISTENCY:on/ACTIVE

EACH LP COPY ON A SEPARATE PV ?:yes

Serialize IO ?:NO

 

在示例 12 中,我们使用 mklv 命令在卷组 test1vg 中创建一个名为 lv4 的逻辑卷,其类型为 sysdump 并具有两个逻辑分区,每个逻辑分区分别有三个位于三个不同磁盘(hdisk5、hdisk6 和 hdisk7)中心的副本;此逻辑卷的标签为 demo-label,最多可以有五个逻辑分区。

示例 12 使用 mklv 命令

# mklv -y lv4 -t sysdump -a c -e x -c3 -L demo-label -x5 test1vg 2 hdisk5 hdisk6 hdisk7

lv4

# lslv lv4

LOGICAL VOLUME:lv4                    VOLUME GROUP:test1vg

LV IDENTIFIER:00c5e9de00004c0000000107a5b596ab.5 PERMISSION:read/write

VG STATE:active/complete        LV STATE:closed/syncd

TYPE:sysdump                WRITE VERIFY:off

MAX LPs:5                    PP SIZE:512 megabyte(s)

COPIES:3                      SCHED POLICY:parallel

LPs:2                     PPs:            6

STALE PPs:0                      BB POLICY:relocatable

INTER-POLICY:maximum                RELOCATABLE:yes

INTRA-POLICY:center                 UPPER BOUND:    32

MOUNT POINT:N/A                    LABEL:demo-label

MIRROR WRITE CONSISTENCY:on/ACTIVE

EACH LP COPY ON A SEPARATE PV ?:yes

Serialize IO ?:NO

 

在示例 13 中,我们使用 mklv 命令在卷组 test1vg 中创建一个名为 lv5 的逻辑卷,其类型为 jfs2 并具有三个逻辑分区,每个分区分别有两个位于不同磁盘上的固定 (pinned) 副本,那两个磁盘上的读/写操作顺序地进行,启用了写校验,并将 I/O 操作序列化。

示例 13 使用 mklv 命令

# mklv -y lv5 -t jfs2 -c2 -rn -bn -ds -vy -oy test1vg 2 hdisk5 hdisk6

lv5

# lslv lv5

LOGICAL VOLUME:lv5                    VOLUME GROUP:test1vg

LV IDENTIFIER:00c5e9de00004c0000000107a5b596ab.6 PERMISSION:read/write

VG STATE:active/complete        LV STATE:closed/syncd

TYPE:jfs2                   WRITE VERIFY:on

MAX LPs:512                    PP SIZE:512 megabyte(s)

COPIES:2                      SCHED POLICY:sequential

LPs:3                     PPs:            6

STALE PPs:0                      BB POLICY:non-relocatable

INTER-POLICY:minimum                RELOCATABLE:no

INTRA-POLICY:middle                 UPPER BOUND:    32

MOUNT POINT:N/A                    LABEL:无

MIRROR WRITE CONSISTENCY:on/ACTIVE

EACH LP COPY ON A SEPARATE PV ?:yes

Serialize IO ?:YES

 

删除逻辑卷

rmlv 命令用于删除逻辑卷。???ü??仅删除逻辑卷,但不删除其他实体,例如使用该逻辑卷的文件系统或分页空间。

在示例 14 中,我们提供了使用 rmlv 删除逻辑卷的示例,如下所示:

  • lsvg -l test1vg 显示 test1vg 中包含的所有 LV。
  • rmlv lv7 提示用户确认,然后删除 lv7。
  • lslv -l lv1 显示 lv1 的位于 hdisk5、hdisk6 和 hdisk7 上的物理分区。
  • rmlv -p hdisk7 lv1 尝试删除 lv1 的位于 hdisk7 上的分区并提示用户确认。由于 lv1 已打开,该操作无法执行。
  • umount /fs1 关闭 lv1。
  • rmlv -p hdisk7 lv1 尝试删除 lv1 的位于 hdisk7 上的分区,提示用户确认,并成功完成。
  • lslv -l lv1 确认 lv1 的位于 hdisk7 上的物理分区已删除。

示例 14 删除逻辑卷

# lsvg -l test1vg

test1vg:

LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT

lv1                 jfs2       3     9     3    open/syncd    /fs1

lv2                 jfs2       2     4     2    closed/syncd  /fs2

logggg              jfs2log    2     2     1    open/syncd    N/A

lv3                 jfs2       10    10    1    closed/syncd  N/A

lv4                 sysdump    2     6     3    closed/syncd  N/A

lv5                 jfs2       3     6     2    closed/syncd  N/A

lv6                 jfs2       2     4     2    closed/syncd  N/A

lv7                 jfs2       2     4     2    closed/syncd  N/A

# rmlv lv7

Warning, all data contained on logical volume lv7 will be destroyed.

rmlv:Do you wish to continue? y(es) n(o)? y

rmlv:Logical volume lv7 is removed.

# lslv -l lv1

lv1:/fs1

PV                COPIES        IN BAND       DISTRIBUTION

hdisk5            003:000:000   100%          000:003:000:000:000

hdisk6            003:000:000   100%          000:003:000:000:000

hdisk7            003:000:000   100%          000:003:000:000:000

# rmlv -p hdisk7 lv1

0516-914 rmlv:Warning, all data belonging to logical volume

lv1 on physical volume hdisk7 will be destroyed.

rmlv:Do you wish to continue? y(es) n(o)? y

0516-1008 rmlv:Logical volume lv1 must be closed.If the logical

volume contains a filesystem, the umount command will close

the LV device.

# umount /fs1

# rmlv -p hdisk7 lv1

0516-914 rmlv:Warning, all data belonging to logical volume

lv1 on physical volume hdisk7 will be destroyed.

rmlv:Do you wish to continue? y(es) n(o)? y

# lslv -l lv1

lv1:/fs1

PV                COPIES        IN BAND       DISTRIBUTION

hdisk5            003:000:000   100%          000:003:000:000:000

hdisk6            003:000:000   100%          000:003:000:000:000

 

增加逻辑卷的大小

可 以使用 extendlv 命令将额外的逻辑分区添加到已经存在的逻辑卷。缺省情况下,逻辑卷在扩展时将保留其特征。可以使用标志来仅更改要添加的分区的这些特征。整个卷组的初始特 征将保留不变。可以指定一个或多个磁盘,这些磁盘将容纳新定义的分区。不能超出为该卷组定义的最大分区数量。还可以指定块,其大小以 KB、MB 或 GB 为单位。系统将自动确定满足请求所需要的最小分区数量。

在示例 15 中,我们使用 extendlv 命令,通过三个位于 hdisk5 和 hdisk6 内边缘的逻辑分区扩展逻辑卷 lv1。

示例 15 使用 extendlv 命令

# lslv -l lv1

lv1:/fs1

PV                COPIES        IN BAND       DISTRIBUTION

hdisk5            003:000:000   100%          000:003:000:000:000

hdisk6            003:000:000   100%          000:003:000:000:000

# extendlv -a ie -ex lv1 3 hdisk5 hdisk6

# lslv -l lv1

lv1:/fs1

PV                COPIES        IN BAND       DISTRIBUTION

hdisk5            006:000:000   50%           000:003:000:000:003

hdisk6            006:000:000   50%           000:003:000:000:003

 

复制逻辑卷

可以将逻辑卷的内容复制到新的或已经存在的逻辑卷。为了保留数据完整性,应该确保目标逻辑卷的大小至少等于源逻辑卷的大小。

下面的示例演示了如何使用 cplv 命令将逻辑卷 lv1 复制到 dumpvg 卷组中名为 lv8 的逻辑卷:

cplv -v dumpvg -y lv8 lv1

 

创建逻辑卷的副本

可以使用 mklvcopy 命令增加逻辑分区的副本数量。逻辑卷将保留其特征。可以手动或自动对新副本进行同步。

在示例 16 中,我们使用 mklvcopy 命令创建并同步逻辑卷 lv1 的每个逻辑分区的一个额外副本。新创建的副本将位于 hdisk7 上。

示例 16 使用 mklvcopy 创建并同步逻辑分区的额外副本

# lslv -m lv1

lv1:/fs1

LP    PP1  PV1               PP2  PV2               PP3  PV3

0001  0029 hdisk5            0029 hdisk6

0002  0030 hdisk5            0030 hdisk6

0003  0031 hdisk5            0031 hdisk6

0004  0110 hdisk5            0111 hdisk6

0005  0110 hdisk6            0112 hdisk5

0006  0111 hdisk5            0112 hdisk6

0007  0113 hdisk5            0113 hdisk6

0008  0114 hdisk5            0114 hdisk6

0009  0115 hdisk5            0115 hdisk6

# mklvcopy -k lv1 3 hdisk7 &

# lslv -m lv1

lv1:/fs1

LP    PP1  PV1               PP2  PV2               PP3  PV3

0001  0029 hdisk5            0029 hdisk6            0110 hdisk7

0002  0030 hdisk5            0030 hdisk6            0111 hdisk7

0003  0031 hdisk5            0031 hdisk6            0112 hdisk7

0004  0110 hdisk5            0111 hdisk6            0113 hdisk7

0005  0110 hdisk6            0112 hdisk5            0114 hdisk7

0006  0111 hdisk5            0112 hdisk6            0115 hdisk7

0007  0113 hdisk5            0113 hdisk6            0116 hdisk7

0008  0114 hdisk5            0114 hdisk6            0117 hdisk7

0009  0115 hdisk5            0115 hdisk6            0118 hdisk7

 

更改逻辑卷的特征

可以使用 chlv 命令更改已经存在的逻辑卷的特征。如果更改了影响物理分区位置的属性,这些属性不会影响已经存在的分区,而是仅影响将在随后添加或删除的分区。如果所做的更改影响到驻留在该逻辑卷上的文件系统,则还必须更新文件系统特征。

在示例 17 中,我们使用 chlv 命令将逻辑卷 lv1 的最大逻辑分区数量更改为 1000,将 I/O 操作的调度策略更改为“并行/循环 (parallel /round-robin)”。

示例 17 更改逻辑卷特征

# lslv lv1

LOGICAL VOLUME:lv1                    VOLUME GROUP:test1vg

LV IDENTIFIER:00c5e9de00004c0000000107a5b596ab.1 PERMISSION:read/write

VG STATE:激活/complete        LV STATE:opened/syncd

TYPE:jfs2                   WRITE VERIFY:off

MAX LPs:512                    PP SIZE:512 megabyte(s)

COPIES:3                      SCHED POLICY:parallel

LPs:9                     PPs:            27

STALE PPs:0                      BB POLICY:relocatable

INTER-POLICY:minimum                RELOCATABLE:yes

INTRA-POLICY:inner edge             UPPER BOUND:    32

MOUNT POINT:/fs1                   LABEL:None

MIRROR WRITE CONSISTENCY:on/ACTIVE

EACH LP COPY ON A SEPARATE PV ?:yes

Serialize IO ?:NO

# chlv -x 1000 -d pr lv1

# lslv lv1

LOGICAL VOLUME:lv1                    VOLUME GROUP:test1vg

LV IDENTIFIER:00c5e9de00004c0000000107a5b596ab.1 PERMISSION:read/write

VG STATE:active/complete        LV STATE:closed/syncd

TYPE:jfs2                   WRITE VERIFY:off

MAX LPs:1000                    PP SIZE:512 megabyte(s)

COPIES:3                      SCHED POLICY:parallel/round robin

LPs:9                     PPs:            27

STALE PPs:0                      BB POLICY:relocatable

INTER-POLICY:minimum                RELOCATABLE:yes

INTRA-POLICY:inner edge             UPPER BOUND:    32

MOUNT POINT:/fs1                   LABEL:None

MIRROR WRITE CONSISTENCY:on/ACTIVE

EACH LP COPY ON A SEPARATE PV ?:yes

Serialize IO ?:NO

 

拆分逻辑卷

可以使用 splitlvcopy 命令将至少有每个逻辑分区的两个副本的逻辑卷拆分为两个不同的逻辑卷。新创建的逻辑卷将具有与原始逻辑卷相同的特征。建议关闭要拆分的逻辑卷。如果原始逻辑卷包含文件系统,则必须将新创建的逻辑卷中的数据作为不同的文件系统进行访问。

在示例 18 中,我们使用 splitlvcopy 命令将一个逻辑卷拆分为两个副本,如下所示(不保留文件系统数据):

  • lsvg -l testvg 显示 testvg 包含逻辑卷 testlv,其类型为 jfs2 并将 /test 作为安装点。
  • lslv -m testlv 显示 testlv 具有三个分别位于 hdisk5、hdisk6 和 hdisk7 上的镜像副本。
  • splitlvcopy -y copylv testlv 2 尝试拆分该逻辑卷并提示用户确认,因为 testlv 是打开的,数据可能被破坏。
  • umount /test 关闭逻辑卷 testlv。
  • splitlvcopy -y copylv testlv 2 拆分该逻辑卷。
  • lsvg -l testvg 显示新的逻辑卷 copylv 已创建完成。
  • lslv -m testlv 显示 testlv 现在只有两个镜像副本,分别位于 hdisk5 和 hdisk6 上。
  • lslv -m copylv 显示 copylv 包含 hdisk7 中的分区。
  • lslv copylv 显示了新创建的逻辑卷 copylv 的特征。请注意,该逻辑卷没有安装点。
  • crfs -v jfs2 -d /dev/copylv -m /copy 为 copylv 创建文件系统结构。请注意,此命令不会破坏任何文件系统数据。

如果希望保留原始逻辑卷上的文件系统数据,则不应该在上一步中运行 crfs 命令,而是执行下列命令:

  • mkdir /copy 创建副本目录。
  • mount /dev/copylv /copy 安装复制的文件系统。
  • 手动编辑 /etc/filesystems 文件,并为 /copy 安装点添加一个条目。

示例 18 使用 splitlvcopy

# lsvg -l testvg

testvg:

LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT

testlv              jfs2       3     9     3    open/syncd    /test

loglv00             jfs2log    1     1     1    open/syncd    N/A

# lslv -m testlv

testlv:/test

LP    PP1  PV1               PP2  PV2               PP3  PV3

0001  0056 hdisk5            0056 hdisk6            0056 hdisk7

0002  0057 hdisk5            0057 hdisk6            0057 hdisk7

0003  0058 hdisk5            0058 hdisk6            0058 hdisk7

# splitlvcopy -y copylv testlv 2

splitlvcopy:WARNING!The logical volume being split, testlv, is open.

Splitting an open logical volume may cause data loss or corruption

and is not supported by IBM.IBM will not be held responsible for

data loss or corruption caused by splitting an open logical volume.

Do you wish to continue? y(es) n(o)? n

# umount /test

# splitlvcopy -y copylv testlv 2

copylv

# lsvg -l testvg

testvg:

LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT

testlv              jfs2       3     6     2    closed/syncd  /test

loglv00             jfs2log    1     1     1    closed/syncd  N/A

copylv              jfs2       3     3     1    closed/syncd  N/A

# lslv -m testlv

testlv:/test

LP    PP1  PV1               PP2  PV2               PP3  PV3

0001  0056 hdisk5            0056 hdisk6

0002  0057 hdisk5            0057 hdisk6

0003  0058 hdisk5            0058 hdisk6

# lslv -m copylv

copylv:N/A

LP    PP1  PV1               PP2  PV2               PP3  PV3

0001  0056 hdisk7

0002  0057 hdisk7

0003  0058 hdisk7

# lslv copylv

LOGICAL VOLUME:copylv                 VOLUME GROUP:testvg

LV IDENTIFIER:00c478de00004c0000000107c4419ccf.3 PERMISSION:read/write

VG STATE:active/complete        LV STATE:closed/syncd

TYPE:jfs2                   WRITE VERIFY:off

MAX LPs:512                    PP SIZE:256 megabyte(s)

COPIES:1                      SCHED POLICY:parallel

LPs:3                     PPs:            3

STALE PPs:0                      BB POLICY:relocatable

INTER-POLICY:minimum                RELOCATABLE:yes

INTRA-POLICY:middle                 UPPER BOUND:    32

MOUNT POINT:N/A                    LABEL:/test

MIRROR WRITE CONSISTENCY:on/ACTIVE

EACH LP COPY ON A SEPARATE PV ?:yes

Serialize IO ?:NO

# crfs -v jfs2 -d /dev/copylv -m /copy

File system created successfully.

786204 kilobytes total disk space.

New File System size is 1572864

 

删除逻辑卷的副本

可以使用 rmlvcopy 命令删除逻辑卷的逻辑分区副本。

在示例 19 中,我们使用 rmlvcopy 命令删除逻辑分区 testlv 的一组副本,如下所示:

lslv -m testlv 显示 testlv 具有三个分别位于 hdisk5、hdisk6 和 hdisk7 上的镜像副本。

rmlvcopy testlv 2 hdisk6 删除位于 hdisk6 上的副本并保留两个镜像副本。

lslv -m testlv 显示 testlv 现在有两个位于 hdisk5 和 hdisk7 上的镜像副本。

示例 19 使用 rmlvcopy

# lslv -m testlv

testlv:/test

LP    PP1  PV1               PP2  PV2               PP3  PV3

0001  0056 hdisk5            0056 hdisk6            0059 hdisk7

0002  0057 hdisk5            0057 hdisk6            0060 hdisk7

0003  0058 hdisk5            0058 hdisk6            0061 hdisk7

# rmlvcopy testlv 2 hdisk6

# lslv -m testlv

testlv:/test

LP    PP1  PV1               PP2  PV2               PP3  PV3

0001  0056 hdisk5            0059 hdisk7

0002  0057 hdisk5            0060 hdisk7

0003  0058 hdisk5            0061 hdisk7

 

回页首

LVM 命令总结

所有 LVM 命令在 SMIT 中都有对应的菜单。

表 2 提供了 LVM 命令的摘要、它们的对应 SMIT 快速路经和每个命令的简要描述。

表 2 LVM 命令摘要

命令 SMIT 快速路经 > 简要说明
chpv smit chpv 更改物理卷的特征。
lspv smit lspv 列出有关物理卷的信息。
migratepv smit migratepv 将物理分区从一个物理卷迁移到其他物理卷。
mkvg smit mkvg 创建卷组。
lsvg smit lsvg 列出有关卷组的信息。
reducevg smit reducevg 从卷组中删除某个物理卷。
chvg smit chvg 更改卷组的特征。
importvg smit importvg 将卷组的定义导入系统。
exportvg smit exportvg 从系统中删除某个卷组的定义。
varyonvg smit varyonvg 激活某个卷组。
varyoffvg smit varyoffvg 禁用某个卷组。
mklv smit mklv 创建逻辑卷。
lslv smit lslv 列出有关某个逻辑卷的信息。
chlv smit chlv 更改逻辑卷的特征。
rmlv smit rmlv 删除逻辑卷。
extendlv smit extendlv 扩展逻辑卷。
mklvcopy smit mklvcopy 创建逻辑卷的副本。
rmlvcopy smit rmlvcopy 删除逻辑卷的副本。


 
 




 https://www.ibm.com/developerworks/cn/linux/l-lvm2/index.html  


逻辑卷管理(LVM)指系统将物理卷管理抽象到更高的层次,常常会形成更简单的管理模式。通过使用 LVM,所有物理磁盘和分区,无论它们的大小和分布方式如何,都被抽象为单一存储(single storage)源。例如,在图 1 所示的物理到逻辑映射布局中,最大的磁盘是 80GB 的,那么用户如何创建更大(比如 150GB)的文件系统呢?

图 1. 物理到逻辑的映射  【存储】AIX存储管理基本概念和操作(LVM)

LVM 可以将分区和磁盘聚合成一个虚拟磁盘(virtual disk),从而用小的存储空间组成一个统一的大空间。这个虚拟磁盘在 LVM 术语中称为卷组(volume group)。

建立比最大的磁盘还大的文件系统并不是这种高级存储管理方法的惟一用途。还可以使用 LVM 完成以下任务:

  • 在磁盘池中添加磁盘和分区,对现有的文件系统进行在线扩展
  • 用一个 160GB 磁盘替换两个 80GB 磁盘,而不需要让系统离线,也不需要在磁盘之间手工转移数据
  • 当存储空间超过所需的空间量时,从池中去除磁盘,从而缩小文件系统
  • 使用快照(snapshot)执行一致的备份(本文后面会进一步讨论)

LVM2 是一个新的用户空间工具集,它为 Linux 提供逻辑卷管理功能。它完全向后兼容原来的 LVM 工具集。在本文中,将介绍 LVM2 最有用的特性以及几种简化系统管理任务的方法。(随便说一句,如果您正在寻找关于 LVM 的基本指南,那么可以看看 参考资料 中列出的 LVM HowTo。)

我们来看看 LVM 的结构是什么样子的。

LVM 的结构

LVM 被组织为三种元素:

  • 卷(Volume):物理 和逻辑卷 和卷组
  • 区段(Extent):物理 和逻辑区段
  • 设备映射器(Device mapper):Linux 内核模块

Linux LVM 组织为物理卷(PV)、卷组(VG)和逻辑卷(LV)。物理卷 是物理磁盘或物理磁盘分区(比如 /dev/hda 或 /dev/hdb1)。卷组 是物理卷的集合。卷组 可以在逻辑上划分成多个逻辑卷。

图 2 显示一个三个磁盘构成的布局。

图 2. 物理到逻辑卷的映射  【存储】AIX存储管理基本概念和操作(LVM)

物理磁盘 0 上的所有四个分区(/dev/hda[1-4])以及完整的物理磁盘 1(/dev/hdb)和物理磁盘 2(/dev/hdd)作为物理卷添加到卷组 VG0 中。

卷组是实现 n-to-m 映射的关键(也就是,将 n 个 PV 看作 m 个 LV)。在将 PV 分配给卷组之后, 就可以创建任意大小的逻辑卷(只要不超过 VG 的大小)。在图 2 的示例中,创建了一个称为 LV0 的卷组,并给其他 LV 留下了一些空间(这些空间也可以用来应付 LV0 以后的增长)。

LVM 中的逻辑卷就相当于物理磁盘分区;在实际使用中,它们就是 物理磁盘分区。

在创建 LV 之后,可以使用任何文件系统对它进行格式化并将它挂载在某个挂载点上,然后就可以开始使用它了。图 3 显示一个经过格式化的逻辑卷 LV0 被挂载在 /var。

图 3. 物理卷到文件系统的映射  【存储】AIX存储管理基本概念和操作(LVM)

区段

为了实现 n-to-m 物理到逻辑卷映射,PV 和 VG 的基本块必须具有相同的大小;这些基本块称为物理区段(PE)和逻辑区段(LE)。尽管 n 个物理卷映射到 m 个逻辑卷,但是 PE 和 LE 总是一对一映射的。

在使用 LVM2 时,对于每个 PV/LV 的最大区段数量并没有限制。默认的区段大小是 4MB,对于大多数配置不需要修改这个设置,因为区段的大小并不影响 I/O 性能。但是,区段数量太多会降低 LVM 工具的效率,所以可以使用比较大的区段,从而降低区段数量。但是注意,在一个 VG 中不能混用不同的区段大小,而且用 LVM 修改区段大小是一种不安全的操作,会破坏数据。所以建议在初始设置时选择一个区段大小,以后不再修改。

不同的区段大小意味着不同的 VG 粒度。例如,如果选择的区段大小是 4GB,那么只能以 4GB 的整数倍缩小或扩展 LV。

图 4 用 PE 和 LE 显示与前一个示例相同的布局(VG0 中的空闲空间也由空闲 LE 组成,尽管图中没有显示它们)。

图 4. 物理到逻辑区段的映射  【存储】AIX存储管理基本概念和操作(LVM)

另外,请注意图 4 中的区段分配策略。LVM2 并非总是连续分配 PE;细节参见关于 lvm 的 Linux 手册页(见 参考资料 中的链接)。系统管理员可以设置不同的分配策略,但是一般不需要这么做,因为默认策略(名为一般分配策略(normal allocation policy))使用符合常规的规则,比如不把并行的条带放在同一物理卷上。

如果决定创建第二个 LV(LV1),那么最终的 PE 布局可能像图 5 这样。

图 5. 物理到逻辑区段的映射  【存储】AIX存储管理基本概念和操作(LVM)

设备映射器

设备映射器(也称为 dm_mod)是一个 Linux 内核模块(也可以是内置的),最早出现在 2.6.9 内核中。它的作用是对设备进行映射 —— LVM2 必须使用这个模块。

在大多数主流发行版中,设备映射器会被默认安装,常常会在引导时或者在安装或启用 LVM2/EVMS 包时自动装载(EVMS 是一种替代 LVM 的工具,更多信息见 参考资料)。如果没有启用这个模块,那么对 dm_mod 执行 modprobe 命令,在发行版的文档中查找在引导时启用它的方法:modprobe dm_mod。

在创建 VG 和 LV 时, 可以给它们起一个有意义的名称(而不是像前面的示例那样使用 VG0、LV0 和 LV1 等名称)。设备映射器的作用就是将这些名称正确地映射到物理设备。对于前面的示例,设备映射器会在 /dev 文件系统中创建下面的设备节点:

  • /dev/mapper/VG0-LV0
    • /dev/VG0/LV0 是以上节点的链接
  • /dev/mapper/VG0-LV1
    • /dev/VG0/LV1 是以上节点的链接

(注意名称的格式标准:/dev/{vg_name}/{lv_name} -> /dev/mapper/{vg_name}{lv_name})。

与物理磁盘相反,无法直接访问卷组(这意味着没有 /dev/mapper/VG0 这样的文件,也不能执行 dd if=/dev/VG0 of=dev/VG1)。常常使用lvm(8) 命令访问卷组。

常见任务

在使用 LVM2 时常常执行的任务包括系统检验(是否安装了 LVM2)以及创建、扩展和管理卷。

回页首

系统准备好运行 LVM2 了吗?

检查您的 Linux 发行版是否安装了 LVM2 软件包。如果还没有,就安装它(最好安装发行版附带的软件包)。

设备映射器模块必须在系统启动时装载。用 lsmod | grep dm_mod 命令检查当前是否装载了这个模块。如果没有装载,那么可能需要安装并配置更多的软件包(文档会说明如何启用 LVM2)。

如果只是想测试一下(或者挽救某个系统),那么可以使用以下命令启动 LVM2:

清单 1. 启动 LVM2 的基本命令  

#this should load the Device-mapper module
modprobe dm_mod

#this should find all the PVs in your physical disks
pvscan

#this should activete all the Volume Groups
vgchange -ay

 

如果打算将根文件系统放在一个 LVM LV 中,那么还要注意 initial-ramdisk 映像。同样,发行版常常会负责处理这个问题 —— 在安装 LVM2 包时,它们常常会重新构建或更新 initrd 映像,在其中添加适当的内核模块和启动脚本。但是,可能需要查看发行版的文档,确保系统支持 LVM2 根文件系统。

注意,通常只有当探测到根文件系统在一个 VG 中时,initial-ramdisk 映像才会启用 LVM。这种探测常常是通过分析 root= 内核参数执行的。不同的发行版以不同的方式判断根文件系统是否在卷组中。细节参见发行版的文档。如果不确定的话,就需要检查 initrd 或 initramdisk 的配置。

回页首

创建新的卷

使用您喜欢的分区工具(比如 fdisk、parted 或 gparted),创建一个供 LVM 使用的新分区。尽管 LVM 支持在整个磁盘上使用 LVM,但是不 建议这么做:其他操作系统可能认为这个磁盘没有初始化,可能会破坏它!更好的方法是创建一个覆盖整个磁盘的分区。

大多数分区工具常常默认使用分区 ID 0x83(或 Linux)来创建新分区。可以使用这个默认 ID,但是为了便于组织,最好将它改为 0x8e(或 Linux LVM)。

在创建分区之后,应该会在分区表中看到一个(或多个)Linux LVM 分区:

root@klausk:/tmp/a# fdisk -l

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        1623    13036716    7  HPFS/NTFS
/dev/hda2            1624        2103     3855600   8e  Linux LVM
/dev/hda3            2104        2740     5116702+  83  Linux
/dev/hda4            3000        9729    54058725    5  Extended
/dev/hda5            9569        9729     1293232+  82  Linux swap / Solaris
/dev/hda6            3000        4274    10241374+  83  Linux
/dev/hda7            4275        5549    10241406   83  Linux
/dev/hda8            5550        6824    10241406   83  Linux
/dev/hda9            6825        8099    10241406   83  Linux
/dev/hda10           8100        9568    11799711   8e  Linux LVM

Partition table entries are not in disk order
root@klausk:/tmp/a#

 

现在用 pvcreate 对每个分区进行初始化:

清单 2. 分区初始化  

root@klausk:/tmp/a# pvcreate /dev/hda2 /dev/hda10
  Physical volume "/dev/hda2" successfully created
  Physical volume "/dev/hda10" successfully created
root@klausk:/tmp/a#

 

在一个步骤中同时创建 PV 和 VG:vgcreate:

清单 3. 创建 PV 和 VG  

root@klausk:~# vgcreate test-volume /dev/hda2 /dev/hda10
  Volume group "test-volume" successfully created
root@klausk:~#

 

上面的命令创建一个称为 test-volume 的逻辑卷,它使用 /dev/hda2 和 /dev/hda10 作为最初的 PV。

在创建 VG test-volume 之后,使用 vgdisplay 命令查看刚创建的 VG 的基本信息:

清单 4. 查看刚创建的 VG 的基本信息  

root@klausk:/dev# vgdisplay -v test-volume
    Using volume group(s) on command line
    Finding volume group "test-volume"
  --- Volume group ---
  VG Name               test-volume
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               14.93 GB
  PE Size               4.00 MB
  Total PE              3821
  Alloc PE / Size       0 / 0   
  Free  PE / Size       3821 / 14.93 GB
  VG UUID               lk8oco-ndQA-yIMZ-ZWhu-LtYX-T2D7-7sGKaV
   
  --- Physical volumes ---
  PV Name               /dev/hda2     
  PV UUID               8LTWlw-p1OJ-dF6w-ZfMI-PCuo-8CiU-CT4Oc6
  PV Status             allocatable
  Total PE / Free PE    941 / 941
   
  PV Name               /dev/hda10     
  PV UUID               vC9Lwb-wvgU-UZnF-0YcE-KMBb-rCmU-x1G3hw
  PV Status             allocatable
  Total PE / Free PE    2880 / 2880
   
root@klausk:/dev#

 

在清单 4 中,可以看到有两个 PV 被分配给这个 VG,总大小为 14.93GB,有 3,821 个 4MB 的 PE,这些 PE 都是空闲的!

既然卷组已经准备好了,就可以像使用磁盘一样用它创建分区(LV)、删除分区和重新设置分区大小 —— 注意,卷组是一个抽象实体,只有 LVM 工具集能够看到它们。使用 lvcreate 创建一个新的逻辑卷:

清单 5. 创建新的逻辑卷(分区)  

root@klausk:/# lvcreate -L 5G -n data test-volume
  Logical volume "data" created
root@klausk:/#

 

清单 5 创建一个名为 data 的 5GB LV。创建这个 LV 之后,可以检查它的设备节点:

清单 6. 检查 LV 的设备节点  

root@klausk:/# ls -l /dev/mapper/test--volume-data 
brw-rw---- 1 root disk 253, 4 2006-11-28 17:48 /dev/mapper/test--volume-data
root@klausk:/# ls -l /dev/test-volume/data 
lrwxrwxrwx 1 root root 29 2006-11-28 17:48 /dev/test-volume/data -> 
/dev/mapper/test--volume-data
root@klausk:/#

 

还可以用 lvdisplay 命令查看 LV 的属性:

清单 7. 查看 LV 的属性  

root@klausk:~# lvdisplay /dev/test-volume/data 
  --- Logical volume ---
  LV Name                /dev/test-volume/data
  VG Name                test-volume
  LV UUID                FZK4le-RzHx-VfLz-tLjK-0xXH-mOML-lfucOH
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                5.00 GB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:4
   
root@klausk:~#

 

在这里可以看到,在实际使用时 LV 的名称/路径是 /dev/{VG_name}/{LV_name},比如 /dev/test-volume/data。除了用作 /dev/{VG_name}/{LV_name} 链接的目标之外,不应该在其他地方使用 /dev/mapper/{VG_name}-{LV_name} 文件。大多数 LVM 命令要求以 /dev/{vg-name}/{lv-name} 格式指定操作的目标。

建立逻辑卷之后,可以使用任何文件系统对它进行格式化,然后将它挂载在某个挂载点上:

清单 8. 挂载 LV  

root@klausk:~# mkfs.reiserfs /dev/test-volume/data 
root@klausk:~# mkdir /data
root@klausk:~# mount -t reiserfs /dev/test-volume/data /data/
root@klausk:~# df -h /data
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/test--volume-data
                      5.0G   33M  5.0G   1% /data
root@klausk:~#

 

还可以编辑 fstab(5) 文件,从而在引导时自动挂载这个文件系统:

清单 9. 自动挂载 LV  

#mount Logical Volume 'data' under /data
/dev/test-volume/data   /data   reiserfs        defaults        0 2

 

在实际使用中,逻辑卷的表现就像一个块设备,比如可以将它用作数据库的原始分区。实际上,如果希望对数据库执行一致的备份,那么使用 LVM 快照是标准的最佳实践。

回页首

扩展卷

扩展卷是非常容易的。如果卷组中有足够的空闲空间,那么只需使用 lvextend 来扩展卷,不需要卸载它。然后,还要扩展逻辑卷中的文件系统(请记住,它们是两回事儿)。根据所用文件系统的不同,也可以进行在线扩展(即在挂载状态下进行扩展)。

如果 VG 中没有足够的空间,那么首先需要添加更多的物理磁盘。步骤如下:

  • 使用一个物理磁盘创建一个分区。建议将分区类型改为 0x8e(Linux LVM),这样便于识别 LVM 分区/磁盘。使用 pvcreate 对物理磁盘进行初始化:pvcreate /dev/hda3。
  • 然后,使用 vgextend 将它添加到现有的 VG 中:vgextend test-volume /dev/hda2。

还可以同时创建或添加多个物理磁盘:

pvcreate /dev/hda2 /dev/hda3 /dev/hda5
vgextend test-volume /dev/hda2 /dev/hda3 /dev/hda5

 

添加了 PV 之后,就有了足以扩展逻辑卷的空间,就可以使用 lvextend 扩展逻辑卷了:lvextend -L 8G /dev/test-volume/data。这个命令将 /dev/test-volume/data LV 的大小扩展到 8GB。

lvextend 有一些有用的参数:

  • 如果希望让 LV 增加 5GB,那么可以使用 -L +5G。
  • 可以指定扩展部分的位置(也就是,用哪些 PV 提供新的空间);只需将希望使用的 PV 附加在命令后面。
  • 还可以以 PE 为单位指定绝对/相对扩展大小。

细节参见 lvextend(8)。

在扩展 LV 之后,不要忘记扩展文件系统(这样才能实际使用增加的空间)。根据文件系统类型,这个操作可以在文件系统挂载状态下在线执行。

清单 10 是一个用 resize_reiserfs 重新设置 LV 大小的示例(随便说一句,可以在挂载的文件系统上使用这个命令):resize_reiserfs /dev/test-volume/data。

回页首

管理卷

为了管理卷,需要知道如何减小 LV 和删除 PV。

减小逻辑卷
可以按照扩展 LV 的方式使用 lvreduce 命令减小 LV。从 LVM 的角度来说,这个操作可以在卷在线的情况下执行;但是,大多数文件系统不支持缩小在线文件系统。清单 10 给出这个过程的示例:

清单 10. 减小 LV  

#unmount LV
umount /path/to/mounted-volume
#shrink filesystem to 4G
resize_reiserfs -s 4G /dev/test-volume/data
#reduce LV
lvreduce -L 4G /dev/vg00/test

 

请注意大小和单位:文件系统不应该比 LV 大!

删除物理卷
假设出现了以下情况:一个卷组包含两个 80GB 的磁盘,希望将它们替换为 160GB 的磁盘。在使用 LVM 时,可以按照添加 PV 的方式从 VG 中删除 PV(即在在线情况下执行删除)。但是注意,不能删除 LV 中正在使用的 PV。对于这些情况,可以使用 pvmove,它可以释放在线的 PV,这样就可以轻松地替换它们。在热交换环境中,甚至可以交换所有磁盘,而根本不需要停机!

pvmove 的惟一要求是,VG 中连续空闲区段的数量必须等于要从 PV 中删除的区段数量。没有直接判断连续空闲 PE 的最大数量的简便方法,但是可以使用 pvdisplay -m 显示 PV 分配图:

清单 11. 显示 PV 分配图  

#shows the allocation map
pvdisplay -m
  --- Physical volume ---
  PV Name               /dev/hda6
  VG Name               test-volume
  PV Size               4.91 GB / not usable 1.34 MB
  Allocatable           yes (but full)
  PE Size (KByte)       4096
  Total PE              1200
  Free PE               0
  Allocated PE          1200
  PV UUID               BA99ay-tOcn-Atmd-LTCZ-2KQr-b4Z0-CJ0FjO

  --- Physical Segments ---
  Physical extent 0 to 2367:
    Logical volume      /dev/test-volume/data
    Logical extents     5692 to 8059
  Physical extent 2368 to 2499:
    Logical volume      /dev/test-volume/data
    Logical extents     5560 to 5691

  --- Physical volume ---
  PV Name               /dev/hda7
  VG Name               test-volume
  PV Size               9.77 GB / not usable 1.37 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              2500
  Free PE               1220
  Allocated PE          1280
  PV UUID               Es9jwb-IjiL-jtd5-TgBx-XSxK-Xshj-Wxnjni

  --- Physical Segments ---
  Physical extent 0 to 1279:
    Logical volume      /dev/test-volume/LV0
    Logical extents     0 to 1279
  Physical extent 1280 to 2499:
    FREE

 

清单 11 显示有 2,499-1,280 = 1,219 个连续空闲区段,这表示最多能够将 1,219 个区段从另一个 PV 转移到 /dev/hda7。

如果希望释放一个 PV 以便进行替换,那么最好禁止它的分配,这样就可以在从卷组中删除它之前确保它一直是空闲的。在转移数据之前,执行以下命令:

清单 12. 在释放之前禁止 PV 的分配  

#Disable /dev/hda6 allocation
pvchange -xn /dev/hda6

 

释放之后,PV /dev/hda6 的大小为 1,200 个区段,没有空闲区段了。使用以下命令将数据转移出这个 PV:

清单 13. 从释放的 PV 移出数据  

#Move allocated extents out of /dev/hda6
pvmove -i 10 /dev/hda6

 

清单 13 中的 -i 10 参数指示 pvmove 每 10 秒报告一次状态。根据要转移的数据量,这个操作可能要花费几分钟(甚至几小时)。还可以使用-b 参数将这个操作转到后台执行。在后台执行的情况下,状态报告会发送到系统日志。

如果没有足以进行 pvmove 操作的连续空闲区段,那么可以在 VG 中添加 一个或多个磁盘/分区,从而形成 pvmove 所需的连续空间。

其他有用的 LVM 操作
关于下面这些 LVM 操作的细节,请查阅手册页:

  • pvresize:如果底层分区也已经扩展了,那么可以用这个操作扩展 PV;如果分配图允许的话,它也可以缩小 PV。
  • pvremove:销毁 PV(清空它的元数据)。只有在用 vgreduce 从 VG 中删除 PV 之后,才能使用这个操作。
  • vgreduce:从卷组中删除未分配的 PV,这会减小 VG。
  • vgmerge:将两个 VG 合并成一个。目标 VG 可以是在线的!
  • vgsplit:分割一个卷组。
  • vgchange:修改一个 VG 的属性和权限。
  • lvchange:修改一个 LV 的属性和权限。
  • lvconvert:在线性卷和镜像或快照之间进行转换。

回页首

用快照执行备份

如果在备份过程期间数据没有发生变化,那么就能够获得一致的备份。如果不在备份期间停止系统,就很难保证数据没有变化。

Linux LVM 实现了一种称为快照(Snapshot)的特性,它的作用就像是 “拍摄” 逻辑卷在某一时刻的照片。通过使用快照, 可以获得同一 LV 的两个拷贝 —— 一个可以用于备份,另一个继续用于日常操作。

快照有两大优点:

  1. 快照的创建非常快,不需要停止生产环境。
  2. 建立两个拷贝,但是它们的大小并不一样。快照使用的空间仅仅是存储两个 LV 之间的差异所需的空间。

快照由一个例外列表(exception list)来实现,每当 LV 之间出现差异时就会更新这个列表(正式的说法是 CoW,Copy-on-Write)。

创建新的快照

创建新的快照 LV 也是使用 lvcreate 命令,但是要指定 -s 参数和原来的 LV。在这种情况下,-L size 指定例外列表的大小,这影响快照支持的最大差异量,如果差异超过这个量,就无法保持一致性。

清单 14. 建立快照  

#create a Snapshot LV called 'snap' from origin LV 'test'
lvcreate -s -L 2G -n snap/dev/test-volume/test

 

可以使用 lvdisplay 查询特殊信息,比如 CoW 的大小和使用情况:

清单 15. CoW 的大小和使用情况  

lvdisplay /dev/vg00/snap


  --- Logical volume ---
  LV Name                /dev/vg00/snap
  VG Name                vg00
  LV UUID                QHVJYh-PR3s-A4SG-s4Aa-MyWN-Ra7a-HL47KL
  LV Write Access        read/write
  LV snapshot status     active destination for /dev/vg00/test
  LV Status              available
  # open                 0
  LV Size                4.00 GB
  Current LE             1024
  COW-table size         2.00 GB
  COW-table LE           512
  Allocated to snapshot  54.16%
  Snapshot chunk size    8.00 KB
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           254:5

 

清单 15 表明这个 CoW 的大小为 2GB,其中的 54.16 % 已经使用了。

对于所有日常操作,快照看起来就是 原 LV 的一个拷贝。如果已经建立了文件系统的话,可以用以下命令挂载它:

#mount snapshot volume
mount -o ro /dev/test-volume/test /mnt/snap

 

在这个命令中,ro 标志表示将它挂载为只读的。可以在 lvcreate 命令后面加上 -p r,这样就在 LVM 级将它设置为只读的。

挂载文件系统之后,就可以用 tar、rsync 或其他备份工具执行备份。如果 LV 不包含文件系统,或者需要原始备份,那么也可以在这个设备节点上直接使用 dd。

复制过程完成之后,就不需要快照了,这时只需用 lvremove 卸载并销毁它:

#remove snapshot
lvremove /dev/test-volume/snap

 

如果数据库建立在 LV 上,并且需要一个一致的备份,那么一定要刷新表并在获得读取锁(read-lock)的情况下建立快照卷(见下面的伪代码):

SQL> flush tables read lock
{create Snapshot}
SQL> release read lock
{start copy process from the snapshot LV}

 

备份脚本示例

清单 16 中的脚本直接取自我的笔记本电脑,我在这个脚本中使用 rsync 向一台远程服务器执行每日备份。这个脚本并不适合企业环境;在企业环境中,带历史记录的增量备份更合适,但概念是相同的。

清单 16. 简单的备份脚本示例  

#!/bin/sh

# we need the dm-snapshot module
modprobe dm-snapshot
if [ -e /dev/vg00/home-snap ]
then
  # remove left-overs, if any
  umount -f /mnt/home-snap && true
  lvremove -f /dev/vg00/home-snap
fi
# create snapshot, 1GB CoW space
# that should be sufficient for accommodating changes during copy
lvcreate -vs -p r -n home-snap -L 1G /dev/vg00/home
mkdir -p /mnt/home-snap
# mount recently-created snapshot as read-only
mount -o ro /dev/vg00/home-snap /mnt/home-snap
# magical rsync command__rsync -avhzPCi --delete -e "ssh -i /home/klausk/.ssh/id_rsa" \
      --filter '- .Trash/' --filter '- *~' \
      --filter '- .local/share/Trash/' \
      --filter '- *.mp3' --filter '- *Cache*' --filter '- *cache*' \
      /mnt/home-snap/klausk klausk2@pokgsa.ibm.comThis e-mail address is being protected 
      from spam bots, you need JavaScript enabled to view it :bkp/
# unmount and scrap snapshot LV
umount /mnt/home-snap
lvremove -f /dev/vg00/home-snap

 

在某些特殊情况下,无法估计备份周期或者复制过程很长,那么脚本可以用 lvdisplay 查询 Snapshot CoW 的使用情况并根据需要扩展这个 LV。在极端情况下, 可以让快照与原 LV 同样大 —— 这样就不需要执行查询,因为变化量不会比整个卷更大!

回页首

其他 LVM2 系统管理技巧

最后, 我要介绍一些可以用 LVM2 执行的系统管理任务,包括按需虚拟化、用镜像提高容错能力以及透明地对块设备执行加密。

快照和虚拟化

在使用 LVM2 时,快照可以不是只读的。这意味着,在创建快照之后, 可以像常规块设备一样挂载和读写快照。

因为流行的虚拟化系统(比如 Xen、VMWare、Qemu 和 KVM)可以将块设备用作 guest 映像,所以可以创建这些映像的完整拷贝,并根据需要使用它们,它们就像是内存占用量很低的虚拟机。这样做的好处是部署迅速(创建快照的时间常常不超过几秒)和节省空间(guest 共享原映像的大多数数据)。

设置的步骤如下:

  1. 为原映像创建一个逻辑卷。
  2. 使用这个 LV 作为磁盘映像安装 guest 虚拟机。
  3. 暂停这个虚拟机。内存映像可以是一个常规文件,所有其他快照都放在里面。
  4. 为原 LV 创建一个可读写的快照。
  5. 使用快照卷作为磁盘映像生成一个新的虚拟机。如果需要的话,要修改网络/控制台设置。
  6. 登录已经创建的虚拟机,修改网络设置/主机名。

完成这些步骤之后, 就可以让用户访问刚创建的虚拟机了。如果需要另一个虚拟机,那么只需重复步骤 4 到 6(所以不需要重新安装虚拟机)。还可以用一个脚本自动执行这些步骤。

在使用完虚拟机之后, 可以停止虚拟机并销毁快照。

更好的容错能力

最近的 LVM2 开发成果为逻辑卷提供了高可用性。逻辑卷可以有两个或更多的镜像,镜像可以放在不同的物理卷(或不同的设备)上。当在设备上发现 I/O 错误时,可以使用 dmeventd 让一个 PV 离线,而不会影响服务。更多信息请参考 lvcreate(8)、lvconvert(8) 和 lvchange(8)手册页。

如果硬件能够支持的话,可以用 dm_multipath 通过不同的通道访问同一设备,这样的话在一个通道发生故障时,可以转移到另一个通道。更多细节请参考 dm_multipath 和 multipathd 的文档。

透明的设备加密

可以用 dm_crypt 对块设备或逻辑卷执行透明的加密。更多信息请参考 dm_crypt 的文档和 cryptsetup(8) 手册页。


上一篇:Vue v-for提示Cannot use v-for on stateful component root element because it renders multiple elements.


下一篇:DOI输出excel单元格的填充颜色修改