移动磁盘数据
磁盘维护
系列内容:
此内容是该系列 # 部分中的第 # 部分:
此内容是该系列的一部分:
敬请期待该系列的后续内容。
在谈到磁盘维护时,熟悉磁盘相关属性的一些常见缩略语很有好处,因为它可让谈话变得更简练。
- VG:卷组
- LV:逻辑卷
- LP:逻辑分区
- PP:物理分区
- PV:物理卷(磁盘)
许多时候,您刚到达办公室,就会听到所有用户和支持人员开始抱怨系统运行缓慢。常规的快速检查包括:
- 处理器限制
- 内存限制
- 磁盘访问
- 网络
- 进程侵扰
执行一些性能测试后您可能得出结论,是磁盘访问、数据在磁盘上的分散性导致了访问阻塞。没有人喜欢这样。所以,让我们假设您已通过分析来自 filemon、topas、nmon 或 lvmstat 等工具的输出,识别了磁盘上的热点。您需要将该数据移动到另一个磁盘,以缓解阻塞。另一个磁盘可能是一个新磁盘,更有可能是 VG 中一个未装满数据的现有磁盘。让我们通过两个场景,看看如何将数据从一个磁盘移动到另一个。但是,在此之前,最好了解一些命令,这样在查看 LV 和 PV 时就会很方便。
最重要的磁盘相关命令
以下是我认为您在执行数据迁移任务之前获取正确的信息,所需要知道的所有命令。
从一个 PV 获取信息
所关注磁盘的大小(以 MB 为单位)始终是需要知道的信息。假设磁盘名为 hdisk4
,使用 getconf
命令查找大小:
# getconf DISK_SIZE /dev/hdisk4 9216
使用 lspv
命令提取磁盘信息。
lspv -l <hdiskx>
:
上面的命令列出 LV 和 LP,以及 PP 和文件系统的挂载点(如果适用)。
lspv -m <hdiskx>
:
上面的命令列出 PV、PP 编号、LV 和 LP 编号。
从一个 VG 获取信息
使用 lsvg
命令获取一个(或多个)PV 所在的 VG 的布局。
lsvg <vg_name>:
上面的命令列出了有关 VG 属性的一般信息,主要是 PP 大小、总空间、空闲空间和已用空间。
lsvg -l <vg_name>:
上面的命令列出了文件系统的类型、LP 和 PV,以及 LV 状态(打开还是关闭)和文件系统挂载点(如果适用)。
lsvg -p <vg_name>:
上面的命令列出了属于该 VG 的 PV,以及总 PP 空间和空闲 PP 空间。
从 LV 获取信息
可使用 lslv 命令获取有关 LV 的信息。
lslv -l <lv_name>:
上面的命令列出了 LV 所在的 PV。
lslv -m <lv_name>:
上面的命令列出了 LP、分区编号和 PV,这些信息适用于 LV 所在的所有 PV。
上述命令的输出为您提供了充分的信息来确定是否适合使用以下迁移技术执行数据迁移:
- migratelp
- migratepv
- 磁盘镜像
在此演示中,我创建了小型文件系统,即小型 LV,因为我需要让输出尽可能的少。在现实中,正常应用程序的 LV 会很大。因此,LV 的 LP 清单会很长。一个技巧是打印出 LV 清单,然后使用一个标记笔确定要移动的 LP。
使用 migratelp
命令移动数据
如果需要移动 LP,也就是要将 LV 的一个部分从一个磁盘移动到另一个磁盘,那么可以使用 migratelp。您可指定一个或多个 LV 分段中您希望移动到另一个磁盘的部分。
LV 监视工具 lvmstat 的输出与您需要用于 migratelp
命令的输入格式很相似,这并不是巧合。
对于本演示,migratelp
命令的格式为:
migratelp <LV/LP> <destination_PV>
可能您希望移动的 LV 已建立镜像。这没有问题,只需选择您希望移动的副本即可。
假设我们拥有以下磁盘:
# lspv hdisk1 00c23bed42b3afff None hdisk2 00525c6a888e32cd vg00 active hdisk3 00c23bed32883598 None hdisk0 00c23bed42b3aefe rootvg active
我们认为 LV fslv00
的负担过重,这些负担可能源于磁盘读写。我们决定将另一个磁盘(也就是 VG vg00
)放入该 LV 中,将 LV fslv00 的一部分迁移到新磁盘中,以缓解阻塞。首先,让我们看看磁盘 hdisk2
,fslv00
目前位于其中:
# lspv -l hdisk2 hdisk2: LV NAME LPs PPs DISTRIBUTION MOUNT POINT fslv00 4 4 00..04..00..00..00 /devhold loglv00 1 1 00..01..00..00..00 N/A fslv01 4 4 00..04..00..00..00 /apps
现在,让我们看看实际的 VG, vg00
。
# lsvg -l vg00 vg00: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT loglv00 jfs2log 1 1 1 open/syncd N/A fslv00 jfs2 4 4 1 open/syncd /devhold fslv01 jfs2 4 4 1 open/syncd /apps
我们现在可以看到,该 LV fslv00
位于一个磁盘上。现在将另一个磁盘 hdisk3
添加到 VG 上:
# extendvg vg00 hdisk3
确认该磁盘已添加,我们知道已经添加了该磁盘,因为我们在扩展 VG 时未遇到任何错误:
# lsvg -p vg00 vg00: PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION hdisk2 active 542 533 109..99..108..108..109 hdisk3 active 2187 2187 438..437..437..437..438
现在,让我们看看我们的 LV 布局。同样的,我们可以看到所有 LP 都在位于 hdisk2
上的 LV fslv00
之上:
# lslv -m fslv00 fslv00:/devhold LP PP1 PV1 PP2 PV2 PP3 PV3 0001 0111 hdisk2 0002 0112 hdisk2 0003 0113 hdisk2 0004 0114 hdisk2
现在将前两个 LP(即 0001
和 0002
)从 fslv00
移动到新磁盘 hdisk3
。
# migratelp fslv00/1 hdisk3 migratelp: Mirror copy 1 of logical partition 1 of logical volume fslv00 migrated to physical partition 439 of hdisk3. # migratelp fslv00/2 hdisk3 migratelp: Mirror copy 1 of logical partition 2 of logical volume fslv00 migrated to physical partition 440 of hdisk3.
上述两个 migratelp
命令的运行很正常。现在通过再次查询 fslv00
确认这些 LP 已在新磁盘上:
# lslv -m fslv00 fslv00:/devhold LP PP1 PV1 PP2 PV2 PP3 PV3 0001 0439 hdisk3 0002 0440 hdisk3 0003 0113 hdisk2 0004 0114 hdisk2
和预期一样,该 LV 现在已分散在两个磁盘上:hdisk2
和 hdisk3
。
可以通过列出两个 hdisk 的内容来进一步确认这一点,如下所示:
# lspv -l hdisk3 hdisk3: LV NAME LPs PPs DISTRIBUTION MOUNT POINT fslv00 2 2 00..02..00..00..00 /devhold # lspv -l hdisk2 hdisk2: LV NAME LPs PPs DISTRIBUTION MOUNT POINT fslv00 2 2 00..02..00..00..00 /devhold loglv00 1 1 00..01..00..00..00 N/A fslv01 4 4 00..04..00..00..00 /apps
如果您在某一刻觉得迁移没有意义,不用担心,只需将它们迁移回来即可,如下所示:
# migratelp fslv00/1 hdisk2 migratelp: Mirror copy 1 of logical partition 1 of logical volume fslv00 migrated to physical partition 111 of hdisk2. # migratelp fslv00/2 hdisk2 migratelp: Mirror copy 1 of logical partition 2 of logical volume fslv00 migrated to physical partition 112 of hdisk2.
现在,如果我们查询 hdisk3
,就会发现 hdisk3
上的部分中应该没有 LV:
# lspv -l hdisk3
没有返回输出,这表明该磁盘上没有数据。
然而,对于 hdisk2,fslv00
的布局现在已完全还原到之前的状态:
# lspv -l hdisk2 hdisk2: LV NAME LPs PPs DISTRIBUTION MOUNT POINT fslv00 4 4 00..04..00..00..00 /devhold loglv00 1 1 00..01..00..00..00 N/A fslv01 4 4 00..04..00..00..00 /apps
如果需要进一步确认,只需查询 LV 即可:
# lslv -m fslv00 fslv00:/devhold LP PP1 PV1 PP2 PV2 PP3 PV3 0001 0111 hdisk2 0002 0112 hdisk2 0003 0113 hdisk2 0004 0114 hdisk2
镜像迁移
可通过许多方法移动数据。前面我们查看了 migratelp
命令。现在让我们看看磁盘镜像。在此演示中,想象我们有一个故障磁盘,需要将数据转移到新磁盘。我们装入了另一个磁盘,然后将 LV 镜像复制到新磁盘。完成镜像复制之后,将会删除原始副本。然后从 VG 中删除故障磁盘。我们假设已将一个磁盘装入 VG vg00
中。下一个任务是在新磁盘中创建这些 VG 的副本。
首先,让我们检查一下 VG vg00
的布局:
# lsvg -l vg00 vg00: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT loglv00 jfs2log 1 1 1 open/syncd N/A fslv00 jfs2 4 4 1 open/syncd /devhold fslv01 jfs2 4 4 1 open/syncd /apps
假设新磁盘 hdisk3
已添加到 VG vg00
中。接下来,在新添加的磁盘上创建所有 LV 的副本。在本演示中,mklvcopy
命令的格式为:
mklvcopy <LV_name> <copy_number> <destination__PV>
其中 copy_number
为 2
,即 LV 的第二个(副本),destination_PV
(在本演示中)为 hdisk3
。
# mklvcopy fslv00 2 hdisk3 # mklvcopy fslv01 2 hdisk3 # mklvcopy loglv00 2 hdisk3
现在我们在新磁盘上已经有了 LV 的副本。接下来,我们需要使用 syncvg
命令同步/镜像 LV:
# syncvg -l fslv00 # syncvg -l fslv01 # syncvg -l loglv00
我们现在已完成到新磁盘 hdisk3
的镜像。这可以通过列出 VG 中的 LV 来确认。请注意,PP 列是每个 LV 的 LP 的两倍。这意味着这些 LV 已完成镜像:
# lsvg -l vg00 vg00: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT loglv00 jfs2log 1 2 2 open/syncd N/A fslv00 jfs2 4 8 2 open/syncd /devhold fslv01 jfs2 4 8 2 open/syncd /apps
现在我们的数据已放在一个好的磁盘上,可以删除原始副本,即故障磁盘 hdisk2
上的 LV。在本演示中,rmlvcopy
命令的格式为:
rmlvcopy <LV_name> <copy_number> <PV_to_remove_copy>
其中,在 LV 第一次出现时或者在您更喜欢原始 LV 的时候,copy_number
将为 1
,在本演示中 PV_to_remove_copy
为 hdisk2
现在将这些 LV 副本从故障磁盘 hdisk2
中删除:
# rmlvcopy fslv00 1 hdisk2 # rmlvcopy fslv01 1 hdisk2 # rmlvcopy loglv00 1 hdisk2
来自 hisk2
的所有副本现在已删除。hdisk2 不应再有任何数据,这可以通过查看 VG 来确认。在以下输出中,请注意,对于 hdisk2
,TOTAL PP
和 FREE PP
值是相同的,这意味着该磁盘是空的:
# lsvg -p vg00 vg00: PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION hdisk2 active 542 542 109..108..108..108.. 109 hdisk3 active 2187 2178 438..428..437..437.. 438
可以通过列出两个磁盘进一步确认这一点。hdisk2
应该没有数据,但 hdisk3
上应有 LV。
# lspv -l hdisk2
没有返回任何输出,这表明该磁盘上没有数据。
# lspv -l hdisk3 hdisk3: LV NAME LPs PPs DISTRIBUTION MOUNT POINT fslv00 4 4 00..04..00..00..00 /devhold loglv00 1 1 00..01..00..00..00 N/A fslv01 4 4 00..04..00..00..00 /apps
现在,剩下的任务是从 VG 删除故障磁盘 hdisk2
:
# reducevg vg00 hdisk2
要确认 VG 现在仅包含好的 hdisk3
磁盘,请执行以下命令:
# lsvg -p vg00 vg00: PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION hdisk3 active 2187 2178 438..428..437..437..438
数据已成功从一个故障磁盘移动到 VG vg00
中的一个新磁盘。在某一时刻,故障磁盘与 VG 是没有关联的,应该在此时物理更换它。
使用 migratepv
命令复制 LV 中的数据
当有一个内容非常稠密的磁盘包含许多要迁移的 LV 时,有时使用 migratepv
命令复制数据很有效。您还可以使用此命令复制单独的 LV。假设我们需要将数据从 hdisk2
迁移到 hdisk3
。
目标磁盘的大小可能比来源磁盘更小,只要所有 LV 都能装入目标磁盘。
在本演示中,migratepv
命令的格式为:
migratepv < source_PV> <destination_PV> migratepv -l <LV> < source_PV> <destination_PV>
其中 <LV>
是您希望迁移的 LV 的名称。
在 VG vg00
的以下输出中,可以注意到 hdisk3
是空的。这可以通过查看 TOTAL PP
和 FREE PP
值来确认,这两个值是相同的。这意味着该磁盘上没有数据。
# lsvg -p vg00 vg00: PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION hdisk2 active 542 532 109..98..108..108..1 09 hdisk3 active 2187 2187 438..437..437..437.. 438
要进一步确认所有 LV 都在 hdisk2
上,可对每个 LV 运行 lslv
命令:
# lslv -m fslv00 fslv00:/apps LP PP1 PV1 PP2 PV2 PP3 PV3 0001 0111 hdisk2 0002 0112 hdisk2 0003 0113 hdisk2 0004 0114 hdisk2 0005 0115 hdisk2 # lslv -m fslv01 fslv01:/devhold LP PP1 PV1 PP2 PV2 PP3 PV3 0001 0116 hdisk2 0002 0117 hdisk2 0003 0118 hdisk2 0004 0119 hdisk2 # lslv -m loglv00 loglv00:N/A LP PP1 PV1 PP2 PV2 PP3 PV3 0001 0110 hdisk2
现在,让我们使用以下 migratepv
命令将 LV fslv00
从 hdisk2
迁移到 hdisk3
:
# migratepv -l fslv00 hdisk2 hdisk3
通过查看 LV,我们可以确定 LV fslv00
现在位于 hdisk3
上:
# lslv -m fslv00 fslv00:/apps LP PP1 PV1 PP2 PV2 PP3 PV3 0001 0439 hdisk3 0002 0440 hdisk3 0003 0441 hdisk3 0004 0442 hdisk3 0005 0443 hdisk3
假设您现在需要将其他所有 LV(也就是来自 hdisk2
的所有数据)复制到 hdisk3
上,可运行以下命令:
# migratepv hdisk2 hdisk3
成功完成 migratepv
命令后,hdisk2
上将没有任何数据,所有数据现在都位于 hdisk3
上:
# lspv -l hdisk2
上面的命令不会返回任何输出,这表明该磁盘上没有任何数据。
# lspv -l hdisk3 hdisk3: LV NAME LPs PPs DISTRIBUTION MOUNT POINT fslv00 5 5 00..05..00..00..00 /apps loglv00 1 1 00..01..00..00..00 N/A fslv01 4 4 00..04..00..00..00 /devhold
接下来,运行以下命令,确认该 VG 打开了这些 LV,并且没有出现任何问题。
# lsvg -l vg00 vg00: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT loglv00 jfs2log 1 1 1 open/syncd N/A fslv00 jfs2 5 5 1 open/syncd /apps fslv01 jfs2 4 4 1 open/syncd /devhold
设置卷组的分解因数
当可伸缩的大型 VG 成为 IBM® AIX® 内的一个主要功能之前,VG 被创建为正常或原始的 VG。要识别您拥有的 VG 的类型,可以查询该 VG 并查找 MAX PV 值。作为一条经验规则,可以使用以下数据。
- 如果有 32 个 PV,那么它是一个原始 VG。
- 如果有 128 个 PV,那么它是一个大型 VG。
- 如果有 1024 个 PV,那么它是一个可伸缩 VG。
但是,这里请注意,不是所有 VG 都返回了应有的值。这通常表明在创建原始 VG 后应该执行 VG 维护。
在过去,旧 VG 是原始 VG,分配了一组已定义的 PP。PP 和 PV 值具有直接关联。如果将一个磁盘(大得多)放入一个 VG(也就是一个原始 VG,其中的所有磁盘都具有较小的 PP 和 PV),您会遇到因数问题。其他一些情形也有可能遇到因数问题。因数问题不是真正的大问题。如果您更改了因数,那么您的 VG 支持的磁盘将会更少。这是因为,通过增加因数大小,可以增加 PP 大小,这会减少您可以包含在 VG 中的磁盘数量。这真的是个问题吗?在我看来不算。所以这里您有两个选择:
- 当 VG 变化时,使用
chvg -B
命令转换为一个大 VG。 - 当 VG 变化时,使用
chvg -G
命令转换为一个可伸缩 VG。
或者在未来,确保任何新 VG 创建为可伸缩的 VG,以防遇到因数问题。假设某种转换 VG 的情况并不可取,因为您不能让文件系统离线。要获得 VG 中的磁盘,则必须更改因数大小。以下是一个原始 VG 的一个因数错误的示例。假设我有一个名为 appsvg
的 VG,它有一个 17 GB 大的磁盘,我尝试向它添加一个 70 GB 的磁盘 (hdisk3
),会获得以下错误:
# extendvg appsvg hdisk3 0516-1162 extendvg: Warning, The Physical Partition Size of 32 requires the creation of 2187 partitions for hdisk3. The limitation for volume group appsvg is 1016 physical partitions per physical volume. Use chvg command with -t option to attempt to change the maximum Physical Partitions per Physical volume for this volume group. 0516-792 extendvg: Unable to extend volume group.
上面的输出一定程度上指明了存在的问题。无论如何,都需要更改因数大小。在本演示中,我选择一个因数 3:
# chvg -t3 appsvg 0516-1164 chvg: Volume group appsvg changed. With given characteristics appsvg can include upto 10 physical volumes with 3048 physical partitions each. # extendvg appsvg hdisk3
在更改因数后,现在我只能有 10 个磁盘,而不是最初的 32 个磁盘(原始 VG)。但是,这没有什么问题,因为至少我已经将我的大磁盘添加到了 VG 中。在此示例中,我需要更多磁盘空间并获得了这些空间。
结束语
在本文中,我演示了在遇到磁盘阻塞时移动 LV 或者从故障磁盘移动 LV 的不同方式。也可以使用其他工具来移动数据,但是,我重点介绍的是允许您在迁移数据时保持系统在线的数据迁移技术。
相关主题
- AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
- AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
- AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
- IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。