LoveUnix » 编程开发 & Rational » 实现Mirror rootvg状况下修改image.data的脚本
让LU留住您的每

一天 让LU博客留住您的每一天
2008-7-14 18:12 tyrone.dev
#!/usr/bin/perl
#

my $copies = 1 ;
while( <> ) {
        if ( (s/COPIES=([0-9]+)/COPIES=1/) == 1 ) {
                $copies = $1 ;
        }

        s/PP=([0-9]+)/"PP=" . $1\/$copies/e;
        print $_;
}

2008-7-15 18:07 八神
任重道远

2008-7-15 20:11 心中日月
收藏!!!!

2008-7-15 23:29 murphy1981
看不懂呀,还要继续学习阿!

2008-7-17 15:18 datagram
我也 看不懂,呵呵,还要多努力:D

2008-7-22 15:24 炸鸡
出问题了。

mksysb老是做不了,但如果不改image.data就非常的顺利。

2008-7-22 15:28 老农
不应该啊,不就是个文件么,系统会检查内容?不会吧:o

2008-7-22 15:34 updownman
:lu11: :lu11: :lu11:

2008-7-22 15:35 炸鸡
还是老问题,修改过后错位,少了前面的tab,就出错了。

2008-7-22 15:41 炸鸡
在print出来的那里出问题,脚本用直接替换的方法去替换了值,但写回去的时侯没有写出tab。

2008-7-22 15:50 beginner-bj
diff对比结果是什么?

2008-7-22 16:04 炸鸡
大概是这样


61c61
< COPIES= 1
---
>       COPIES= 2
74c74
< PP= 1
---
>       PP= 2
95c95
< COPIES= 1
---
>       COPIES= 2
108c108

2008-7-22 16:06 炸鸡
我找了台机器测试,发现52与53的结果不同(使用老师以前教我的脚本)
我等会测试在52上这个用新脚本。

2008-7-22 16:08 炸鸡
新脚本在52和53都会出现错位。

2008-7-22 16:18 beginner-bj
awk '{a[$1]=$2} /COPIES=/{$1="\t"$1;$2=1} /PP=/{$1="\t"$1;$2=a["LPs="]};{print}' /image.data >/image.data.new

2008-7-22 16:20 炸鸡
好了,我刚才直接加\t还是不行,跟老师的差距很大。:L

2008-7-22 16:41 beginner-bj
当时没有AIX环境,所以没用真正的/image.data测试。看别人回复说没问题,我第二天到公司也就没测试了。不好意思啊!

2008-7-22 16:58 炸鸡
假设把分隔符去掉tab,就只保留空格,那也可以用原来的脚本。
但不知能否做到这样,呵呵。

恢复正在测试中,不过看样子都正常。

2008-7-22 17:12 炸鸡
恢复测试完成,一切正常。

恢复后连镜像也没有了,rootvg里面只有一个pv,唯一要搞搞的就是quorum=1。

2008-7-22 17:15 beginner-bj
脚本这东西,能用就行了,没必要非要追求所谓的简洁,对一直正常工作的脚本改来改去的。

我反正是懒得想、懒得改,直接照搬过去的。不就是看着字多点儿吗,性能差异其实不大。
[url]http://www.cublog.cn/u/739/showart.php?id=583173[/url]
看了楼主的帖子,才激发我去想想新的方法。现在既然有了新方法,那就等部署新环境时,再用吧,过去的依旧保持现状。:D

/image.data就是个文本文件,用diff做下前后对比,有没有问题自然就知道了。

2008-7-22 17:21 beginner-bj
[quote]原帖由 [i]炸鸡[/i] 于 2008-7-22 17:12 发表 [url=http://www.loveunix.net/redirect.php?goto=findpost&pid=811423&ptid=86964][img]http://www.loveunix.net/images/common/back.gif[/img][/url]
恢复测试完成,一切正常。

恢复后连镜像也没有了,rootvg里面只有一个pv,唯一要搞搞的就是quorum=1。 [/quote]

quorum不用改吧?

新系统lsvg rootvg看看,如果没问题,那就肯定不用改。

2008-7-22 17:51 炸鸡
它quorum的信息还是保留原来rootvg镜像时的数字,所以是1。

这是个小问题,可以忽略的。

我没有测试rootvg跨pv的情况,但quorum对系统也没啥大影响。

2008-7-22 21:03 gelf123
[quote]原帖由 [i]炸鸡[/i] 于 2008-7-22 15:35 发表 [url=http://bbs.loveunix.net/redirect.php?goto=findpost&pid=811327&ptid=86964][img]http://bbs.loveunix.net/images/common/back.gif[/img][/url]
还是老问题,修改过后错位,少了前面的tab,就出错了。 [/quote]


就是为了回避这个问题,所以才采用了ed命令行编辑的方法(最近正好也想研究一下ed的用法,以便更方便的完成自动化操作,呵呵。。)。

因为shell的echo命令会丢掉tab符号。但是看各位老大的帖子,awk应该是可以完成不丢tab符号的。等有机会测试一下。

[[i] 本帖最后由 gelf123 于 2008-7-22 21:09 编辑 [/i]]

2008-7-22 23:16 炸鸡
beginner老师的命令已经解决了tab的问题。

awk '{a[$1]=$2} /COPIES=/{$1="\t"$1;$2=1} /PP=/{$1="\t"$1;$2=a["LPs="]};{print}'

意思是把每一行的信息做个数组,第一个参数作为名字,第二个参数作为值
当行里有COPIES=这个字符串的时侯,把tab加上第一个参数合起来赋予第一个参数,第二个参数直接变成1。为什么这样呢?因为在awk里面的默认分隔符号是tab和空格,所以写回去的时侯,要用到$1="\t"$1,这里\t就是tab。第二个参数直接为1,因为我们的目的就是让它变成只有一个copy。

当行里有PP的时侯,老师舍弃了以前用当前值除以copies的做法,而利用数组的记忆功能,直接取LPs=那一行的值,这个方法真意想不到。

再次感谢beginner老师为我们做的非常好的范例。

页: 1 [2] 3


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.