在谈论磁盘维护时,建议您习惯一些与磁盘相关的属性的常用缩写,因为它可以减少混乱的情况。
- VG:卷组
- LV:逻辑卷
- LP:逻辑分区
- PP:物理分区
- PV:物理卷(磁盘)
很多时候,您刚来到办公室,所有用户和支持人员开始抱怨系统运行缓慢。 通过数字快速检查包括:
- 处理器绑定
- 内存绑定
- 磁盘存取
- 网络
- Craft.io猎犬
在进行了一些质量测试之后,您可能已经得出结论,那就是磁盘访问,磁盘上的数据传播在访问时引起了拥塞。 没有人喜欢它,但是当您需要移动或迁移LV时,通常不会受到太大的注意。 因此,让我们假设您已经通过解释诸如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>:
上面的命令列出了LV所驻留的所有PV的LP,分区号和PV。
在处理以下迁移技术时,上述命令的输出为您提供足够的信息,以确定数据迁移是否适合进行:
- migrationlp
- 迁移电视
- 磁盘镜像
在本演示中,我创建了小型文件系统,这意味着LV的尺寸较小,这是因为我可以使输出保持最小,实际上,正常应用程序的LV将会很大,因此,列出了LP的LP。 LV很长。提示是打印出LV列表,然后使用荧光笔标识要移动的LP。
使用migratelp
命令移动数据
如果您需要将LP(属于LV的一部分)从一个磁盘移到另一个磁盘,那么migrationlp是您的朋友。 您可以指定要移至另一个磁盘的一个或多个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
正在承受压力,可能是由于对磁盘的读写fslv00
。 已经决定在其中放置另一个磁盘(即VG vg00
),并将部分LV fslv00迁移到新磁盘以缓解拥塞。 首先,让我们看一下fslv00
当前所在的磁盘hdisk2
:
# 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
移至新磁盘hdisk2
。
# 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
命令,一切看起来都不错。 现在,通过再次查询LV 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 hdisk3:
# 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
。 下一个任务是在新磁盘中创建LV的副本。
首先,让我们回顾一下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列是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
因此,让我们从故障磁盘hdisk2
删除那些LV副本:
# 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
。
The size of the destination disk can be smaller than the source disk,
as long as the total of the LVs will all fit into the destination disk.
在此演示中,使用的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运行lslv
命令,我们可以进一步确认所有LV都驻留在hdisk2
上:
# 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
到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
分解卷组
在IBM®AIX®的主要功能是可伸缩和大型VG之前,VG是作为普通或原始VG创建的。 您可以通过查询VG并查找MAX PV值来确定您拥有的VG类型。 根据经验,请使用以下数据。
- 如果32个PV,则它是原始VG。
- 如果有128个PV,那么这是一个很大的VG。
- 如果为1024 PV,则它是可扩展的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分解因数错误的示例。 假设我有一个名为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的不同方法。 您还可以使用其他工具来移动数据,但是,我专注于数据迁移技术,可让您在迁移数据时保持系统在线。
翻译自: https://www.ibm.com/developerworks/aix/library/au-aix-disk-maintenance/index.html