我最近回想起这篇 2009 年发表的文章,作者在其中探讨了重命名 AIX 设备时遇到的一些挑战。这个可怜的家伙不得不老老实实逐一命名了一个群集 AIX (Oracle RAC) 环境中的一些磁盘和网络设备。我牢牢记住了这段话:
“让网络适配器与磁盘名称在系统间匹配的简便途径将会是运行类似于下面的内容:
1
|
# chdev – l old_name – n new_name
|
但这个命令选项其实并不存在。
此后,我就一直在寻找一条重命名 AIX 中设备的简便途径。特别是在大型的群集化环境中,跨群集中所有节点让相同磁盘与网络设备名称保持同步有时候是很重要的。而且除此之外,如果 hdisk 名称完全相同,验证群集配置就会容易很多。
匹配 PVID 是一种有效的做法,但它要求的工作量较大!例如,如果知道 hdisk123 在所有节点上都是相同的设备,则不必扫描 PVID 的 lspv 输出,比如 00f6048868b4gead,这样做无疑会轻松很多。当然,您可以编写脚本来简化这些工作,但是,如果您能够根据需要重命名设备,同时不采用不受支持的方法,效果将会更好。
一种更好的方法
好了,这对于 AIX 不再是一个问题。从 AIX 7.1 (和 AIX 6.1 TL6)开始,您可以轻松地重命名设备。它引入了一个名叫 rendev 的新命令,允许管理员在必要时重命名设备。以下内容摘自 AIX 的主页:
“rendev 命令支持对设备进行重命名。
...rendev 命令必须在进行重命名之前取消设备的配置。”
这项功能可以帮助简化 AIX 7.1 中通过 Cluster Aware AIX (CAA) 新功能完成的群集设备配置工作。
下面给出了一些在 AIX 7.1 (GA) 系统上使用 rendev 命令的例子。在第一个例子中,我将 hdisk3 重命名为 hdisk300。请注意:hdisk3 并未处于使用(繁忙)状态。如果已将磁盘分配到某个卷组,则需要首先卸载该卷组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# lspv
hdisk0 00f61ab2f73e46e2 rootvg
active
hdisk1 00f61ab20bf28ac6 None
hdisk2 00f61ab2202f7c0b None
hdisk4 00f61ab20b97190d None
hdisk3 00f61ab2202f93ab None
# rendev -l hdisk3 -n hdisk300
# lspv
hdisk0 00f61ab2f73e46e2 rootvg
active
hdisk1 00f61ab20bf28ac6 None
hdisk2 00f61ab2202f7c0b None
hdisk4 00f61ab20b97190d None
hdisk300 00f61ab2202f93ab None
|
很容易吧!接下来,我将重命名一个虚拟的 SCSI 适配器。我将 vscsi0 重命名为 vscsi2,并在重命名设备之前,将适配器 vscsi0 设置为 Defined 状态:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# rmdev -Rl vscsi0
# lsdev -Cc adapter
ent0 Available Virtual I/O Ethernet Adapter (l-lan)
ent1 Available Virtual I/O Ethernet Adapter (l-lan)
vsa0 Available LPAR Virtual Serial Adapter
vscsi0 Defined Virtual SCSI Client Adapter
vscsi1 Available Virtual SCSI Client Adapter
# rendev -l vscsi0 -n vscsi2
# lsdev -Cc adapter
ent0 Available Virtual I/O Ethernet Adapter (l-lan)
ent1 Available Virtual I/O Ethernet Adapter (l-lan)
vsa0 Available LPAR Virtual Serial Adapter
vscsi1 Available Virtual SCSI Client Adapter
vscsi2 Defined Virtual SCSI Client Adapter
|
现在,我将把一个网络适配器从 ent0 重命名为 ent10。我在修改设备名称之前禁用了该接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# lsdev -Cc adapter
ent0 Available Virtual I/O Ethernet Adapter (l-lan)
ent1 Available Virtual I/O Ethernet Adapter (l-lan)
vsa0 Available LPAR Virtual Serial Adapter
vscsi1 Available Virtual SCSI Client Adapter
vscsi2 Defined Virtual SCSI Client Adapter
# ifconfig en0
en0:
flags=1e080863,480<
UP
,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,
GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),CHAIN >
inet 10.1.20.19 netmask 0xffff0000 broadcast
10.153.255.255
tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
# ifconfig en0 down detach
# rendev -l ent0 -n ent10
# lsdev -Cc adapter
ent1 Available Virtual I/O Ethernet Adapter (l-lan)
ent10 Available Virtual I/O Ethernet Adapter (l-lan)
vsa0 Available LPAR Virtual Serial Adapter
vscsi1 Available Virtual SCSI Client Adapter
vscsi2 Defined Virtual SCSI Client Adapter
# rendev -l en0 -n en10
# chdev -l en10 -a state=up
en10 changed
# ifconfig en10
en10:
flags=1e080863,480<
UP
,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST
,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),CHAIN >
inet 10.1.20.19 netmask 0xffff0000 broadcast
10.153.255.255
tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
|
您甚至可以添加一些创意,将设备重命名为任何您喜欢的名称(只要名称长度不超过 15 个字符)。我将 vscsi2 重命名为 myvscsiadapter:
1
2
3
4
5
6
7
|
# rendev -l vscsi2 -n myvscsiadapter
# lsdev -Cc adapter
ent1 Available Virtual I/O Ethernet Adapter (l-lan)
myadapter Available Virtual I/O Ethernet Adapter (l-lan)
myvscsiadapter Defined Virtual SCSI Client Adapter
vsa0 Available LPAR Virtual Serial Adapter
vscsi1 Available Virtual SCSI Client Adapter
|
而最后,我将演示在一个正在运行的系统上修改虚拟 SCSI 适配器设备名称。这是当的磁盘系统 (hdisk0),带有两个 vscsi 适配器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# lspv
hdisk0 00f6048868b4deee rootvg
active
# lspath
Enabled hdisk0 vscsi0
Enabled hdisk0 vscsi1
# lsdev -Cc adapter
ent0 Available Virtual I/O Ethernet Adapter (l-lan)
ent1 Available Virtual I/O Ethernet Adapter (l-lan)
vsa0 Available LPAR Virtual Serial Adapter
vscsi0 Available Virtual SCSI Client Adapter
vscsi1 Available Virtual SCSI Client Adapter
|
我们要在重命名适配器之前确保它处于 Defined 状态,否则重命名将会失败:
1
2
3
4
5
|
# rmdev -Rl vscsi1
vscsi1 Defined
# lsdev -Cc adapter | grep vscsi
vscsi0 Available Virtual SCSI Client Adapter
vscsi1 Defined Virtual SCSI Client Adapter
|
接下来,我们将适配器 vscsi1 重命名为 vscsi3:
1
2
3
4
5
|
# rendev -l vscsi1 -n vscsi3
# lsdev -Cc adapter | grep vscsi
vscsi0 Available Virtual SCSI Client Adapter
vscsi3 Defined Virtual SCSI Client Adapter
|
现在,我需要使用 cfgmgr 启用适配器与路径。lspath 输出显示了通向 vscsi3 的另一条路径:
1
2
3
4
5
6
7
8
9
10
11
12
|
# lspath
Enabled hdisk0 vscsi0
Defined hdisk0 vscsi1
# cfgmgr
Method error (/etc/methods/cfgscsidisk -l hdisk0 ):
0514-082 The requested function could only be performed for some of the specified paths.
# lspath
Enabled hdisk0 vscsi0
Defined hdisk0 vscsi1
Enabled hdisk0 vscsi3
|
接下来,我需要删除通向 vscsi1 的原有路径。适配器 vscsi3 处于 Available 状态。这都是正常的。
1
2
3
4
5
6
7
8
9
10
|
# rmpath -l hdisk0 -p vscsi1 -d
path Deleted
# lspath
Enabled hdisk0 vscsi0
Enabled hdisk0 vscsi3
# lsdev -Cc adapter | grep vscsi
vscsi0 Available Virtual SCSI Client Adapter
vscsi3 Available Virtual SCSI Client Adapter
|
我们需要对 vscsi0 适配器重复相同的步骤。将它重命名为 vscsi2。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# rmdev -Rl vscsi0
vscsi0 Defined
# lsdev -Cc adapter | grep vscsi
vscsi0 Defined Virtual SCSI Client Adapter
vscsi3 Available Virtual SCSI Client Adapter
# rendev -l vscsi0 -n vscsi2
# lsdev -Cc adapter | grep vscsi
vscsi2 Defined Virtual SCSI Client Adapter
vscsi3 Available Virtual SCSI Client Adapter
# lspath
Defined hdisk0 vscsi0
Enabled hdisk0 vscsi3
# cfgmgr
Method error (/etc/methods/cfgscsidisk -l hdisk0 ):
0514-082 The requested function could only be performed for some of the specified paths.
# lspath
Defined hdisk0 vscsi0
Enabled hdisk0 vscsi2
Enabled hdisk0 vscsi3
# rmpath -l hdisk0 -p vscsi0 -d
path Deleted
# cfgmgr
# lspath
Enabled hdisk0 vscsi2
Enabled hdisk0 vscsi3
|
到这里我们就完成了所有操作。两个适配器都已经被重命名,而在使用该系统时不需要停机。
1
2
3
4
5
6
7
|
# lsdev -Cc adapter | grep vscsi
vscsi2 Available Virtual SCSI Client Adapter
vscsi3 Available Virtual SCSI Client Adapter
# lspath
Enabled hdisk0 vscsi2
Enabled hdisk0 vscsi3
|