地址:http://www.ibm.com/developerworks/cn/aix/library/au-alt_disk_copy/
简介
大多数系统管理员都遇到过以下情况:
- 一次 ML 升级失败了。
- 问题一直持续到快下班时。
- 您无法解决问题。
- 叫第三方支持来解决它已经太晚了。
- 您要下班了。
通常,这种情况下需要 rootvg 恢复,无论是使用磁带 mksysb 恢复,还是网络引导恢复。毫无疑问,这是让人难受的!使用 alt_disk_copy 方法复制 rootvg 所需的时间很少,与重新引导以将 rootvg 恢复到升级之前的状态所需的时间差不多。本文讲解在应用 AIX 升级时如何使用 alt_disk_copy 以及如何恢复 rootvg。还可以使用 alt_disk_copy 测试两个不同版本的 AIX。只需升级一个磁盘,然后从它引导;当需要返回到另一个版本时,只需从另一个磁盘引导。对于 rootvg 的定期在线备份,常常使用 alt_disk_copy 把 rootvg 克隆到空闲磁盘上。它还可以作为 rootvg 的硬件迁移工具。
本文主要关注典型的 rootvg 两磁盘软件镜像设置。但是,alt_disk_copy 不仅适用于这种两磁盘设置;相同的原理也可以应用于多种软件镜像解决方案。
alt_disk 实用程序由以下命令组成:
-
alt_disk_copy
执行磁盘克隆。 -
alt_rootvg_op
在克隆的 rootvg 上执行维护操作。 -
alt_disk_mysysb
执行 mksysb 复制。
本文不讨论 alt_disk_mysysb。
这些 alt 命令需要的文件如下:
bos.alt_disk_install.boot_images
bos.alt_disk_install.rte
bos.msg.en_US.alt_disk_install.rte
概述
因为 alt_disk_copy 命令把当前正在运行的 rootvg 复制到另一个磁盘,所以一定要挂载希望克隆的所有文件系统。alt_disk_copy 只复制 rootvg 中当前挂载的文件系统。执行 rootvg 不需要停止进程;但是,这个过程要花费一段时间,所以最好在午餐时或晚上执行(请记住,它复制正在运行的 rootvg)。复制完成之后,就有了两个 rootvg 卷组:
rootvg
altinst_rootvg
其中的 altinst_rootvg
是克隆的非活跃/不变的 rootvg。在克隆的 rootvg 中,所有逻辑卷名前面有 ‘alt’ 前缀。引导列表也改为从 altinst_rootvg 引导。AIX 喜欢这样做;它假设您希望从克隆的 rootvg 而不是真实的 rootvg 引导。如果现在重新引导系统,当系统运行起来之后,原来的 rootvg 将变成:
old_rootvg
altinst_rootvg 变成:
rootvg
如果决定从 old_rootvg 重新引导,当系统运行起来之后,old_rootvg 变成:
rootvg
rootvg 变成:
altinst_rootvg
不必担心原来的和克隆的 rootvg 的重命名。稍后讨论这个问题。
在成功地完成升级之后,可以使用 alt_rootvg_op 销毁包含克隆的 rootvg 的磁盘,重新建立镜像。如果升级失败,也没问题 —— 只需制作第三方支持所需的快照,然后从原来的 rootvg 引导。对于登录的用户来说,没有什么影响。
当从第三方支持收到修复建议时,只需从克隆的 rootvg 重新引导并纠正问题。不需要重新应用升级,因为在克隆的 rootvg 上已经应用了升级。测试升级结果,如果一切正常,就销毁原来的 rootvg,重新建立镜像。
在克隆的 rootvg 上不要使用 importvg 或 exportvg;而是应该使用 alt 命令。
对于克隆的 rootvg,可以使用 alt_rootvg_op 唤醒它,从而挂载文件系统。可以在克隆的文件系统上执行所需的任何操作,比如纠正链接、为第三方支持收集信息等,然后让这个磁盘继续休眠,这也会卸载文件系统。
在执行克隆时排除某些目录
在执行克隆时,可以通过创建 /etc/exclude.rootvg
文件排除某些目录。文件中的条目应该以 ^./ 开头。‘^’ 表示搜索行开头的字符串,‘./’ 表示相对于当前目录。建议您这么做,因为 alt_disk_copy 使用 grep 搜索字符串,这么做它就不会误解命令。例如,要想排除以下目录,就要提供完整的路径名并加上前缀 ‘^.’:
/home/reps
/opt/installs
可以在 /etc/exclude.rootvg 文件中插入:
^./home/reps
^./opt/installs
要确保最后一个条目后面没有空行。
开始克隆吧!
现在,我们先看看典型的克隆。假设您有 rootvg 的两磁盘(hdisk0 和 hdisk1)软件镜像,将在这个系统上进行 ML 升级(或对安装在 rootvg 中的应用程序进行升级)。我将讲解如何执行克隆,以及在成功地升级之后,如何让这个磁盘回到 rootvg 中并重新建立镜像。还会讲解在升级失败时可以采取的措施。
操作前检查
在取消 rootvg 的镜像之前,首先花些时间确认镜像是正确的,没有过时的 LV,因为如果有这种情况,unmirrorvg 命令会失败。当然,如果 unmirrorvg 失败,可以使用 migratepv 在两个磁盘之间相互复制缺少的 LV。检查镜像是否正确的简单方法是执行以下命令:
lsvg -l rootvg
对于每个数据输出行,检查 PPs 列的输出是否是 LPs 列的两倍。
另一种检查方法是使用 lspv -l <hdiskx>
,通过对比输出确认两个磁盘上都有每个 LV 的条目。
接下来,执行 bosboot 命令。我自己在执行重新引导或涉及 rootvg 的磁盘操作之前总是这么做;这是一个好习惯:
# bosboot -a
bosboot: Boot image is 35803 512 byte blocks.
本文使用的磁盘如下:
# lspv
hdisk0 0041a97b0622ef7f rootvg active
hdisk1 00452f0b2b1ec84c rootvg active
接下来,取消 rootvg 的镜像,选择将用来克隆 rootvg 的磁盘。这里使用 hdisk1 克隆 rootvg,所以执行以下 unmirrorvg 命令:
# unmirrorvg rootvg hdisk1
0516-1246 rmlvcopy: If hd5 is the boot logical volume, please run 'chpv -c <disk
name>'
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.
0516-1804 chvg: The quorum change takes effect immediately.
0516-1144 unmirrorvg: rootvg successfully unmirrored, user should perform
bosboot of system to reinitialize boot records. Then, user must modify
bootlist to just include: hdisk0.
接下来,让 hdisk1 脱离 rootvg 以准备克隆:
# reducevg rootvg hdisk1
确认这个磁盘目前没有分配给任何卷组:
# lspv
hdisk0 0041a97b0622ef7f rootvg active
hdisk1 00452f0b2b1ec84c None
运行 alt_disk_copy
现在可以执行 alt_disk_copy 了。只需通过命令参数指定 hdisk1。基本格式为:
alt_disk_copy -d <hdisk to clone rootvg>
使用排除列表的基本格式为:
alt_disk_copy -e /etc/exclude.rootvg -d <hdisk to clone rootvg>
alt_disk_copy 命令的输出如下(已经做了删节):
# alt_disk_copy -d hdisk1
Calling mkszfile to create new /image.data file.
Checking disk sizes.
Creating cloned rootvg volume group and associated logical volumes.
Creating logical volume alt_hd5
Creating logical volume alt_hd6
Creating logical volume alt_hd8
Creating logical volume alt_hd4
Creating logical volume alt_hd2
Creating logical volume alt_hd9var
Creating logical volume alt_hd3
Creating logical volume alt_hd1
Creating logical volume alt_hd10opt
Creating /alt_inst/ file system.
Creating /alt_inst/home file system.
Creating /alt_inst/opt file system.
Creating /alt_inst/tmp file system.
…......
…......
for backup and restore into the alternate file system...
Backing-up the rootvg files and restoring them to the
alternate file system...
Modifying ODM on cloned disk.
Building boot image on cloned disk.
forced unmount of /alt_inst/var
forced unmount of /alt_inst/usr
forced unmount of /alt_inst/tmp
forced unmount of /alt_inst/opt
forced unmount of /alt_inst/home
…..
…..
Changing logical volume names in volume group descriptor area.
Fixing LV control blocks...
Fixing file system superblocks...
Bootlist is set to the boot disk: hdisk1
现在,有了一个克隆的 rootvg,它的名称是 altinst_rootvg。注意,前面的输出表明,alt_disk_copy 已经把引导列表改为从克隆的 rootvg(现在是 hdisk1)引导。
# lspv
hdisk0 0041a97b0622ef7f rootvg active
hdisk1 00452f0b2b1ec84c altinst_rootvg
可以通过执行 bootlist 命令确认这一点。
# bootlist -m normal -o
hdisk1 blv=hd5
现在,可以安装 ML 升级了。在执行 ML 升级之后,需要重新引导系统。对于这个示例,ML 升级将安装在真正的 rootvg(即 hdisk0)上,所以现在需要修改引导列表,希望系统在升级之后能够运行正常。
# bootlist -m normal hdisk0
确认对引导列表的修改:
# bootlist -m normal -o
hdisk0 blv=hd5
接下来,安装 ML 升级,然后重新引导。在重新引导之后,系统上有 rootvg 和克隆的 rootvg。可以看到根卷组没有改名,因为我们是从真正的 rootvg (hdisk0) 引导的:
# lspv
hdisk0 0041a97b0622ef7f rootvg active
hdisk1 00452f0b2b1ec84c altinst_rootvg
接下来,假设升级过程一切正常,用户和系统管理员可以顺利地登录。现在可以销毁克隆的 rootvg,让磁盘回到 rootvg *镜像使用。使用带 X 参数的 alt_rootvg_op 命令销毁克隆的 rootvg。基本格式为:
alt_rootvg_op -X < cloned rootvg to destroy> # alt_rootvg_op -X altinst_rootvg
Bootlist is set to the boot disk: hdisk0
接下来,让 hdisk1 回到 rootvg 中,然后用这个磁盘重新建立镜像:
# extendvg -f rootvg hdisk1
# mirrorvg rootvg hdisk1
0516-1804 chvg: The quorum change takes effect immediately.
0516-1126 mirrorvg: rootvg successfully mirrored, user should perform
bosboot of system to initialize boot records. Then, user must modify
bootlist to include: hdisk0 hdisk1.
修改引导列表,在其中包含这两个磁盘,运行 bosboot:
# bootlist -m normal -o hdisk0 hdisk1
hdisk0 blv=hd5
hdisk1
# bosboot -a
bosboot: Boot image is 35803 512 byte blocks.
# bootlist -m normal -o
hdisk0 blv=hd5
hdisk1 blv=hd5
对于这个示例,任务完成了。升级的安装非常顺利。系统又可以正常操作了。如果一切顺利,用 alt_disk_copy 做这么多工作确实没什么用。但是,如果升级失败了呢?我们有什么办法?我们继续讨论。
请恢复原状
现在假设刚安装了 ML 升级并重新引导,在运行 AIX 时发现了问题。请记住,磁盘目前处于以下状态:
# lspv
hdisk0 0041a97b0622ef7f rootvg active
hdisk1 00452f0b2b1ec84c altinst_rootvg
既然出现了问题,您以后一定会联系第三方支持,所以现在应该制作正在运行的系统的快照。再次重申,当前的状态是:
-
rootvg
:升级后有问题的拷贝。 -
altinst_rootvg
:升级前的正常拷贝。
恢复原状
要想返回到升级前的状态,只需把引导列表改为从 hdisk1 (altinst_rootvg) 引导,然后重新引导。就这么简单:
# bootlist -m normal -o hdisk1
hdisk1 blv=hd5
# bootlist -m normal -o
hdisk1 blv=hd5
# shutdown -Fr
重新引导之后,rootvg 磁盘如下:
# lspv
hdisk0 0041a97b0622ef7f old_rootvg
hdisk1 00452f0b2b1ec84c rootvg active
接下来,执行 bosboot 并检查引导列表:
# bosboot -a
bosboot: Boot image is 35803 512 byte blocks.
# bootlist -m normal -o
hdisk1 blv=hd5
系统现在已经回到了升级前的状态。
修复升级后问题
得到第三方支持提供的信息之后,在方便的时候(并得到最终用户同意),可以从 ML 升级失败的磁盘 (hdisk0) 引导,应用解决问题的修复措施。因此,把引导列表改为从 hdisk0 (old_rootvg) 引导并重新引导:
# bootlist -m normal -o hdisk0
# shutdown -Fr
重新引导(准备应用修复措施)之后,现在的 rootvg 磁盘如下:
# lspv
hdisk0 0041a97b0622ef7f rootvg active
hdisk1 00452f0b2b1ec84c altinst_rootvg
接下来,应用补丁或按指示执行纠正措施。假设系统现在又可以正常操作了。
测试系统之后,使用前面介绍的命令把 hdisk1 重新放回 rootvg 中:
# alt_rootvg_op -X altinst_rootvg
Bootlist is set to the boot disk: hdisk0
# extendvg -f rootvg hdisk1
# mirrorvg rootvg hdisk1
bootlist -m normal -o hdisk0 hdisk1
hdisk0 blv=hd5
hdisk1
# bosboot -a bosboot: Boot image is 35803 512 byte blocks.
# bootlist -m normal -o
hdisk0 blv=hd5
hdisk1 blv=hd5
# lspv
hdisk0 0041a97b0622ef7f rootvg active
hdisk1 00452f0b2b1ec84c rootvg active
唤醒磁盘
在克隆的 rootvg 环境中,可以唤醒克隆的 rootvg,这会挂载其中的所有文件系统。这非常有用,因为您有一个运行良好的系统,同时可以挂载克隆的 rootvg 上的文件系统以进一步研究或修改文件。在唤醒克隆的 rootvg 时,它被改名为:
altinst_rootvg
在仍然挂载着克隆的 rootvg 文件系统时,不要执行重新引导,因为这会产生出乎意料的结果。还可以修改克隆的 rootvg 的名称,这在有多个克隆的 rootvg 时有用:
假设磁盘处于以下状态:
# lspv
hdisk0 0041a97b0622ef7f old_rootvg
hdisk1 00452f0b2b1ec84c rootvg active
唤醒磁盘的基本命令格式是:
alt_rootvg_op -W -d < hdisk>
现在,我们来唤醒 old_rootvg (hdisk0):
# alt_rootvg_op -W -d hdisk0
Waking up old_rootvg volume group ...
检查磁盘的状态,可以发现 old_rootvg 已经改名为 altinst_rootvg 并已经激活。
# lspv
hdisk0 0041a97b0622ef7f altinst_rootvg active
hdisk1 00452f0b2b1ec84c rootvg active
克隆的文件系统已经挂载,它们的名称带 /alt_ 前缀:
# df -m
Filesystem MB blocks Free %Used Iused %Iused Mounted on
/dev/hd4 128.00 102.31 21% 2659 11% /
/dev/hd2 1968.00 111.64 95% 40407 58% /usr
/dev/hd9var 112.00 77.82 31% 485 3% /var
/dev/hd3 96.00 69.88 28% 330 3% /tmp
/dev/hd1 208.00 118.27 44% 1987 7% /home
/proc - - - - - /proc
/dev/hd10opt 1712.00 1445.83 16% 6984 3% /opt
/dev/alt_hd4 128.00 102.16 21% 2645 11% /alt_inst
/dev/alt_hd1 208.00 33.64 84% 1987 21% /alt_inst/home
/dev/alt_hd10opt 1712.00 1445.77 16% 6984 3% /alt_inst/opt
/dev/alt_hd3 96.00 72.38 25% 335 2% /alt_inst/tmp
/dev/alt_hd2 1968.00 100.32 95% 40407 59% /alt_inst/usr
/dev/alt_hd9var 112.00 77.53 31% 477 3% /alt_inst/var
现在,可以在克隆的 rootvg 上修改文件或进一步进行研究。现在可以访问克隆的文件系统。完成这些任务之后,让克隆的 rootvg 恢复休眠状态,同时对这个磁盘执行 bosboot。基本命令格式为:
alt_rootvg_op -S -t <hdisk>
现在,我们让 altinst_rootvg 休眠:
# alt_rootvg_op -S -t hdisk0
Putting volume group altinst_rootvg to sleep ...
Building boot image on cloned disk.
forced unmount of /alt_inst/var
forced unmount of /alt_inst/usr
forced unmount of /alt_inst/tmp
forced unmount of /alt_inst/opt
forced unmount of /alt_inst/home
forced unmount of /alt_inst
forced unmount of /alt_inst
Fixing LV control blocks...
Fixing file system superblocks...
磁盘的当前状态是:
# lspv
hdisk0 0041a97b0622ef7f altinst_rootvg
hdisk1 00452f0b2b1ec84c rootvg active
可以看到克隆的 rootvg 的名称仍然是 altinst_rootvg
。
为了避免混淆,有时候最好恢复磁盘原来的状态,尤其是在有多个克隆的 rootvg 的情况下。所以把 altinst_rootvg 改名为 old_rootvg。基本格式是:
alt_rootvg_op -v <new cloned rootvg name> -d <hdisk>
所以对于这个示例,应该执行:
# alt_rootvg_op -v old_rootvg -d hdisk0
# lspv
hdisk0 0041a97b0622ef7f old_rootvg
hdisk1 00452f0b2b1ec84c rootvg active
当然,如果愿意,可以把克隆的 rootvg 改为更有意义的名称。
# alt_rootvg_op -v bad_rootvg -d hdisk0
bash-2.05a# lspv
hdisk0 0041a97b0622ef7f bad_rootvg
hdisk1 00452f0b2b1ec84c rootvg active
不能把克隆的 rootvg 改名为 altinst_rootvg;这是一个保留的名称。
现在,系统操作是否正常取决于应用的修复措施是否有效。
如果在 hdisk0 (old_rootvg) 上应用的修复措施是有效的,就用新的 ML 版本运行系统。
确认系统将从 hdisk0 引导:
# bootlist -m normal -o hdisk0
重新引导:
# shutdown -Fr
销毁克隆的磁盘 hdisk1(我们从 old_rootvg 重新引导;它现在变成 altinst_rootvg):
# alt_rootvg_op -X altinst_rootvg
让 hdisk1 回到 rootvg *镜像使用:
# extendvg -f rootvg hdisk1
# mirrorvg rootvg hdisk1
# bosboot -a
# bootlist -m normal -o hdisk0 hdisk1
如果修复无效,就仍然使用原来的 ML 版本,以后再修复:
确认系统将从 hdisk1 引导:
# bootlist -m normal -o hdisk1
销毁克隆的磁盘 hdisk0 (old_rootvg):
# alt_rootvg_op -X old_rootvg
让 hdisk0 回到 rootvg *镜像使用:
# extendvg -f rootvg hdisk0
# mirrorvg rootvg hdisk0
# bosboot -a
# bootlist -m normal -o hdisk0 hdisk1