标签: hpuxioinit更改instancenumber杂谈 |
分类: HPUX |
ioinit命令维护kernel IO结构与/etc/ioconfig文件的一致性. 系统启动时,按照/etc/inittab中的ioin项,init过程中会启动ioinit命令
ioin::sysinit:/sbin/ioinitrc > /dev/console 2>&1
其中ioinitrc是一个脚本,以-i和-r选项调用ioinit命令。
根据-i选项, ioinit检查kernel硬件结构(/stand/ioconfig)与/etc/ioconfig是否一致。 如果存在差异,ioinit调用insf为所有新设备安装设备文件。如果kernel信息与/etc/ioconfig不一致,ioinit用/etc/ioconfig更新/stand/ioconfig.如果指定了-r选面,它会重启动系统。
如果/etc/ioconfig不存在,或是信息不完整,ioinitrc将系统启动到单用户状态。用户需要从备份中恢复/etc/ioconfig文件,或是通过ioinit –c重新生成/etc/ioconfig文件。(这样导致的后果是实例号instance number可能被改变)
下一节描述了如何改实例号。
并不总是在集群环境下才需要更改实例号,后面列出的步骤可以用来达到这一目的。 实例号决定了设备文件名。ioconfig提供了硬件路径与操作系统核心中实例号的对应关系。ioconfig的信息有两份拷贝,/stand/ioconfig and /etc/ioconfig。
在系统启动时,ioconfig信息保存在io_tree数据结构中。Ioconfig是为了在系统没有运行时保存配置信息。即使之后部分硬件被拆除了,相关的映射信息仍然会保存。如果该硬件又被重新安装,ioconfig内的信息不会改变。
常见的情况是我们需要更改硬盘与网卡的Instance Number. 对于网卡直接更改其Instance number. 对于硬盘设备更改ext_bus实例号。这个实例号与设备文件名中的c#对应。看下面ioscan的例子:
ext_bus 3 2/0/1 c720 CLAIMED INTERFACE Built-in SCSI
target 0 2/0/1.3 tgt CLAIMED DEVICE
target 1 2/0/1.5 tgt CLAIMED DEVICE
disk 4 2/0/1.5.0 sdisk CLAIMED DEVICE SEAGATE ST15150N
/dev/dsk/c3t5d0 /dev/rdsk/c3t5d0
Ext_bus实例号(3)对应了c3t5d0中的’c3’. t5与d0不会改变,与底层硬件相关。
有三种方法可以用来更改实例号;简单快速的(procedure I) 和两种更复杂的 (procedure II and III). 通常procedure I 就够了,不需要用到II or III.当procedure I失败的情况下,才需要尝试其他两种方法。
Procedure II通常可以适应所有情况,但是它要求重起系统两次。
Procedure III可以适应所有情况,而且只需要重起一次。但是…,你需要使用ioconfig2infile工具,从htp://einstein.grc.hp.com/TOOLS/MISC下载。
NOTE: 确保ioinit(1M)补丁已安装:
· for UX 10.20 PHCO_16407 (or greater)
· for UX 11.00 PHCO_12555 (or greater)
只要不是老掉牙的系统都应该满足条件.
默认流程,要求重起一次,不需要额外工具。
1) 由ioscan输出生成一个配置模板
# ioscan -f | grep -e INTERFACE -e DEVICE | \
grep -v target | \
awk '{print $3, $1, $2}' > /infile
2)编辑/infile按需求更改ext_bus和lan instances.每一类(Class)每一instance只能有一行!
3) 将系统运行级别更改为1
# init 1
4)使ioconfig的变更生效
# /sbin/ioinit -f /infile -r
如果成功,系统会立即重起。类似“Input isidentical to kernel”这样的警告可以忽略。
如果不成功,可能的报错是这样:
“ioinit: Instance number X already exists for class XXX”
说明指定的instance number与现有的配置冲突,这可能有有些ioscan看不到的设备占用了该instance number,那你只能尝试procedure II or III.
5) 验证结果.有可能需要重新vgimport卷组(c#改掉了的话).
可靠流程,需要重起两次,不需要额外工具。
1)根据ioscan输出生成配置模板
# ioscan -f | grep -e INTERFACE -e DEVICE | \
grep -v target | \
awk '{print $3, $1, $2}' > /infile
2) 编辑/infile按需求更改ext_bus和lan instances.每一类(Class)每一instance只能有一行!
3) 把当前的ioconfig文件移走,然后
# mv /stand/ioconfig /stand/ioconfig.sav
# mv /etc/ioconfig /etc/ioconfig.sav
# shutdown -ry 0
4) 重新生成ioconfig文件。因为缺少 ioconfig文件,系统会自动到ioinitrc提示符下。重新生成ioconfig文件,这样肯定不会发生冲突。
(in ioinitrc)# /sbin/ioinit -c
5) 使ioconfig变更生效。
(in ioinitrc)# /sbin/ioinit -f /infile -r
系统会再次重起,警告 “Input isidentical to kernel”可以忽略。
6) 验证结果.有可能需要重新vgimport卷组(c#改掉了的话)
可靠流程,重起一次,要求ioconfig2infile 工具.
1)由ioconfig2infile生成配置模板
# ioconfig2infile /etc/ioconfig >/infile
2) 编辑/infile按需求更改ext_bus和lan instances.每一类(Class)每一instance只能有一行!
3) 将系统运行级别更改为1
# init 1
4)使ioconfig的变更生效
# /sbin/ioinit -f /infile -r
如果成功,系统会立即重起。类似“Input isidentical to kernel”这样的警告可以忽略。
5) 验证结果.有可能需要重新vgimport卷组(c#改掉了的话).
NOTE: 如果出了任何问题,都可以把/etc/ioconfig.sav和/stand/ioconfig.sav拷贝回原位重起来恢复原样.
生成infile文件
# cd /tmp
# ioscan -kNf | grep ^disk | awk '{printf "%s %s %s\n",$3,$1,$2}' > infile
# ioscan -kf | grep ^disk | awk '{printf "%s %s %s\n",$3,$1,$2}' >> infile
修改生成的infile文件,以64000/0xfa00/0x1e开始的行,除了需要修改设备名的,其它的都删除掉:
# vi infile
nodeBtmp/hpdisk#vi infile
"infile" 109 lines, 3144 characters
64000/0xfa00/0x1e disk 191
64000/0xfa00/0x1f disk 192
64000/0xfa00/0x20 disk 193
64000/0xfa00/0x21 disk 194
64000/0xfa00/0x22 disk 195
0/0/2/1.0.16 disk 3
0/3/1/0.1.21.0.0.0.0 disk 28
……
0/3/1/0.1.22.0.0.0.1 disk 118
0/3/1/0.1.22.0.0.0.2 disk 119
0/3/1/0.1.22.0.0.0.3 disk 120
0/3/1/0.1.22.0.0.0.4 disk 121
将阴影部分修改成以下内容:
64000/0xfa00/0x1e disk 216
64000/0xfa00/0x1f disk 217
64000/0xfa00/0x20 disk 218
64000/0xfa00/0x21 disk 219
64000/0xfa00/0x22 disk 220
0/0/2/1.0.16 disk 3
0/3/1/0.1.21.0.0.0.0 disk 28
……
0/3/1/0.1.22.0.0.0.1 disk 118
0/3/1/0.1.22.0.0.0.2 disk 119
0/3/1/0.1.22.0.0.0.3 disk 120
0/3/1/0.1.22.0.0.0.4 disk 121
3.初始化修改后设备文件
执行生成的文件:
nodeB #ioinit -f ./infile
ioinit: Input is identical to kernel, line ignored
Input line 2: 0/0/2/1.0.16 disk 3
……
ioinit: Input is identical to kernel, line ignored
Input line 83: 0/7/1/0.1.23.0.0.1.6 disk 176
4.删除之前旧的设备
nodeB#rmsf /dev/disk/disk191 /dev/rdisk/disk191
nodeB#rmsf /dev/disk/disk192 /dev/rdisk/disk192
nodeB#rmsf /dev/disk/disk193 /dev/rdisk/disk193
nodeB#rmsf /dev/disk/disk194 /dev/rdisk/disk194
nodeB#rmsf /dev/disk/disk195 /dev/rdisk/disk195
5.验证查询
nodeBtmp#ioscan -m dsf
Persistent DSF Legacy DSF(s)
========================================
/dev/rdisk/disk1 /dev/rdsk/c34t0d0
/dev/rdsk/c35t0d0
/dev/rdisk/disk41 /dev/rdsk/c34t0d2
/dev/rdsk/c35t0d2
.....
/dev/rdisk/disk216 /dev/rdsk/c37t0d0
/dev/rdsk/c36t0d0
/dev/rdsk/c38t0d0
/dev/rdsk/c39t0d0
/dev/rdisk/disk217 /dev/rdsk/c37t0d2
/dev/rdsk/c36t0d2
/dev/rdsk/c38t0d2
/dev/rdsk/c39t0d2
/dev/rdisk/disk218 /dev/rdsk/c37t0d4
/dev/rdsk/c36t0d4
/dev/rdsk/c38t0d4
/dev/rdsk/c39t0d4
/dev/rdisk/disk219 /dev/rdsk/c37t0d6
/dev/rdsk/c36t0d6
/dev/rdsk/c38t0d6
/dev/rdsk/c39t0d6
/dev/rdisk/disk220 /dev/rdsk/c37t1d0
/dev/rdsk/c36t1d0
/dev/rdsk/c38t1d0
/dev/rdsk/c39t1d0