Gih's Blog

只言片语
Posts tagged as aix

有用的 AIX 链接

2011-07-28 by gihnius, tagged as aix

网上收集的AIX链接:

AIX书签 有些文件链接可能会失效, google文件名一般还可以找到镜像的. 

欢迎分享! 

欢迎补充!

mksysb时不备份镜像

2011-07-27 by gihnius, tagged as aix

当对已经做 mirror 的rootvg进行 mksysb 时, 备份文件里会保留rootvg的镜像信息. 有时只是克隆系统, 新系统可能只有一块内置盘, 还原时也只能用只备份一块盘的备份文件. 

可以通过配置 /image.data 文件, 让 mksysb 不保留镜像信息.创建 /image.data:

# mkszfile -m 
以上命令新建一个/image.data文件, 编辑:
# vi /image.data 
将每个 lv_data 段的 COPIES= 改为原来的一半, 并且修改 PPs 的数目等于 LPs的. 保存.然后备份系统:
# mksysb /dev/rmt0 
注意这里不能使用 "-i" 参数, 否则mksysb会创建新的/image.data, 覆盖之前创建的那个. 也不建议使用 smitty, smitty 会带 "-i" 参数.使用这个备份映像就可以恢复到单盘rootvg的系统.

smitty hacmp 配置 HA 备忘

2011-07-25 by gihnius, tagged as aix

配置2节点 HA cluster 的smitty配置过程:

准备:参考: HACMP规划的一般步骤步骤:

  • 创建cluster以及节点:
  • # smitty hacmp
    Initialization and Standard Configuration
    Configure an HACMP Cluster and Nodes 
    输入cluster的名字, 根据/etc/hosts的配置, 选择相应的节点.
  • 添加服务ip地址:
  • # smitty hacmp
    Initialization and Standard Configuration
    Configure Resources to Make Highly Available
    Configure Service IP Labels/Addresses
    Add a Service IP Label/Address 
    输入ip 地址以及网络名.
  • 建立资源组:
  • # smitty hacmp
    Initialization and Standard Configuration
    Configure HACMP Resource Groups
    Add a Resource Group 
    输入资源组名称. 习惯上给资源组的名称加上"_rg"方便识别. 同时选上所在的节点. Fallback Policy: 选 "Nerver Fallback", 这样当资源组已经在备节点运行时, 启动主节点就不会自动接管. 主备的次序取决于添加的节点名的次序.
  • 向资源组里添加服务ip地址:
  • # smitty hacmp
    Initialization and Standard Configuration
    Configure HACMP Resource Groups
    Change/Show Resources for a Resource Group (standard) 
    选择之前刚建立的资源组, 添加上服务ip地址.
  • 检验与同步:
  • # smitty hacmp
    Extended Configuration
    Extended Verification and Synchronization 
    结果显示"Ok"就ok. h还可以尝试选上 "Automatically correct errors".
  • 启动 HACMP cluster:
  • # smitty hacmp
    System Management (C-SPOC)
    Manage HACMP Services
    Start Cluster Services 
    选择要启动的节点, 同时启动 clinfo "Cluster Information Daemon".
  • 检查状态:
  • # clstat -ao
    # cldump 
    显示 cluster STABLE 以及节点 Up.扩展: 配置磁盘心跳在节点连接的 SAN 存储上选择一个比较小的 disk (hdisk OR vpath OR hdiskpower). 记下其 PVID.
  • 建立 concurrent VG:
  • # smitty hacmp
    System Management (C-SPOC)
    HACMP Concurrent Logical Volume Management
    Concurrent Volume Groups
    Create a Concurrent Volume Group 
    选择两个节点, 添加刚才选好disk的 PVID, 起一个vg名跟其它vg区别大一点, 比如 heartbeat_vg.
  • 添加磁盘心跳网络:
  • # smitty hacmp
    Extended Configuration
    Extended Topology Configuration
    Configure HACMP Networks
    Add a Network to the HACMP Cluster 
    选择刚才的"heartbeat_vg"为默认网络名.
  • 自动添加相关信息:
  • # smitty hacmp
    Extended Configuration
    Discover HACMP-related Information from Configured Nodes 
  • 添加磁盘:
  • # smitty hacmp
    Extended Configuration
    Extended Topology Configuration
    Configure HACMP Communication Interfaces/Devices
    Add Communication Interfaces/Devices
    Add Discovered Communication Interface and Devices Communication Devices 
    分别在两个节点上选相同的磁盘.
  • 同步配置:
  • # smitty hacmp
    Extended Configuration
    Extended Verification and Synchronization 
    结果显示"Ok"就ok. h还可以尝试选上 "Automatically correct errors".

    HACMP规划的一般步骤 备忘

    2011-07-25 by gihnius, tagged as aix

    简单介绍:

    HACMP初始规划:cluster由哪些结点组成?

    两个结点对于应用而言是什么关系? 

    cluster的名字和结点的名字是什么?

    是否会受到DLPAR的命名限制? 

    每个结点上面放什么应用?

    对于单个结点而言,它是否具备跑多个应用的能力? 

    每个结点有多少张网卡?

    网卡的线是怎样连接到网络上的? 

    IPAT的方式是什么?

    替换(IPAT via replacement)还是别名(IPAT via alias)? 

    当前有哪些IP地址可以使用?

    它们属于哪些网段? 

    结点之间的共享存储如何实现? 

    操作系统的vg用什么方式创建? 

    非TCP/IP网络(点对点网络)用什么方式实现? 

    结点本身的硬件是否实现了冗余性?

    是否存在SPOF? 

    AIX和HACMP的版本分别是多少? 

     接下来是针对各种环境的适应配置: 

    • 硬件规划 
    • 软件规划 
    • 安全性规划 
    • 网络规划 
    • 存储需求 
    • 应用规划 
    • 资源组规划 
    • 测试计划

    从nmon 数据里提取 cpu memory 使用率

    2011-07-19 by gihnius, tagged as aix

    监控主机性能时有个需求, 就是从nmon数据里提取出各个时间点的cpu内存使用率, 以便前端做报告. 使用Perl来干这种事再合适不过了:

    脚本 的使用很简单:

     ./nmon_show_perf.pl *.nmon 
    便输出所有的结果, 保存为 *.nmon_perf.txt.
    #!/usr/bin/env perl
    
    #
    ## Author: gihnius@gmail.com
    #
    
    use warnings;
    use strict;
    
    my @nmons = @ARGV;
    my %month_name = ("JAN"=>1, "FEB"=>2, "MAR"=>3, "APR"=>4, "MAY"=>5, "JUN"=>6, "JUL"=>7, "AUG"=>8, "SEP"=>9, "OCT"=>10, "NOV"=>11, "DEC"=>12);
    
    foreach my $nmon (@nmons) {
        if ($nmon !~ /\.nmon$/) {
            print "$nmon may be not a nmon data!\n";
            next;
        }
        my (@cpu_idle, @mem_used, @month, @day, @hour, @min);
        open (NM,"< $nmon") or die "Can not open $nmon . $!";
        while (<NM>) {
            chomp;
            if (/^CPU_ALL/) {
                my @temp = split/,/;
                if ($temp[1] =~ /T\d+/) {
                    push (@cpu_idle, 100.0 - $temp[5]);
                }
            }
            if (/^MEMNEW/) {
                my @temp = split/,/;
                if ($temp[1] =~ /T\d+/) {
                    push (@mem_used, 100.0 - $temp[5]);
                }
            }
            if (/^ZZZZ/) {
                my @temp = split/,/;
                if ($temp[1] =~ /T\d+/) {
                    if ($temp[2] =~ /(\d\d):(\d\d):\d\d/) {
                        push (@hour, $1);
                        push (@min, $2);
                    }
                    if ($temp[3] =~ /(\d\d)-([A-Z][A-Z][A-Z])-\d+/) {
                        push (@month, $month_name{$2});
                        push (@day, $1);
                    }
                }
            }
        }                           ## end while
        close NM;
        my $len = @cpu_idle;
        $nmon =~ s/\.nmon//;
        my $save_file = $nmon . "_perf.txt";
        if ($len == ($#mem_used + 1) && $len == ($#month + 1) && $len == ($#day + 1) && $len == ($#hour + 1) && $len == ($#min + 1)) {
            open (OUT, ">> $save_file") or die "Can not open $save_file for writing $!";
            for (my $i = 0; $i < $len; $i++) {
                select OUT;
                ##output format: month day time(xx.xx) cpu_perf mem_use
                printf ("%2s\t%2s\t%2s.%2s\t%2.1f\t%2.1f\n", $month[$i], $day[$i], $hour[$i], $min[$i], $cpu_idle[$i], $mem_used[$i]);
            }
            close OUT;
        }
    }
    

    从AIX的 mksysb 备份映像中恢复个别文件

    2011-07-19 by gihnius, tagged as aix

    从映像中查询要恢复的文件路径:

    # restore -T -q -l -f mscp1.mksysb | grep MY_FILE 
    恢复:
    # restore -x -q -f mscp1.mksysb /PATH/TO/MY_FILE 

    FIRMWARE_EVENT 报错

    2011-07-19 by gihnius, tagged as aix

    如果发现 FIRMWARE_EVENT 出现在 errpt 错误日志里, 而且没有相应的 FRU 或 位置码, 这通常可能归因于 AIX 内存页面的 deconfiguration , 就是系统微码检测到内存中存在单个的不可用的内存单元. 这个错误会通过 ECC 处理. 同时会通知系统发现这个错误.

    ECC是"Error Checking and Correcting"的简写, 中文名称是"错误检查和纠正". ECC是一种能够实现“错误检查和纠正”的技术.但AIX发现内存中有不可用的位"bit"时, 就会负责迁移内存中的数据以及释放相关的内存页面. 这个过程由 AIX RAS 功能提供, 在AIX 5.3中开始支持, 内存可自行纠正而不必产生告警或因为一些位错误而需要更换硬件.因此, 可以消除这种 FIRMWARE_EVENT 的错误日志, 执行下面的命令并重启分区使更改生效:

     # chdev -l sys0 -a log_pg_dealloc=false 
    确认更改的状态:
     # lsattr -El sys0 -a log_pg_dealloc 

    修改HMC的用户密码

    2011-07-19 by gihnius, tagged as aix

    使用ssh登录到 HMC:

    hscroot@hmc> chhmcusr -u hscroot -t passwd
    Enter the new password:
    Retype the new password: 

    AIX非交互式修改用户密码

    2011-07-19 by gihnius, tagged as aix

    AIX提供一个非交互式修改密码的命令: chpasswd

    # echo "user:password" | chpasswd 
    这在脚本中应用会非常方便, 但不爽的是 AIX 的这个功能默认非root用户不能使用! 普通用户改自己的密码有什么问题呀!?其它系统Linux/FreeBSD也有类似的方法:比如FreeBSD可以通过 pw来修改:
    # echo "newpassword" | pw mod user USER_NAME -h 0 
    要批量添加用户时, 把上面的 "mod" 改为 "add" 就可以了.

    更改AIX用户名长度限制

    2011-07-19 by gihnius, tagged as aix

    在AIX 5.2及之前版本,用户名长度不能超过8个字符. 从AIX 5.3 开始, 这个限制改为允许最长 255 个字符. 可以使用getconf确认当前设置的值:

    # getconf LOGIN_NAME_MAX
    12 
    或是查看系统属性:
    # lsattr -El sys0 -a max_logname
    max_logname 12 Maximum login name length at boot time   True
    
    在AIX 5.3及之后的版本, 要修改这个值,可以通过chdev设置 max_logname 参数:
    # chdev -l sys0 -a max_logname=129
    sys0 changed
    
    # getconf LOGIN_NAME_MAX
    128
    
    上面的命令是要设置用户名的长度最大为 128 个字符. 因为 max_logname 还包含一个字符串结束符, 所以执行chdev时要多加 1 : max_logname=129.