我们有一个运行 oracle rac 的数据库服务器。最近,它所连接的主 LUN 上的空间不足了。我创建了一个新的 100GB LUN,并将其连接到现有 LUN,从而创建一个新的 MetaLUN。经过一番折腾,我终于让 Linux 识别了新空间。然后,我在伪设备上创建了一个新分区,以使用新空间。以前,当我在其他系统上执行此操作时,下一步是在新分区上创建一个 ASM 磁盘,并将此磁盘添加到 oracle 磁盘组。但这失败了。我知道 ASM 和 powerpath 存在各种问题,但我不认为这是这里的问题。在调查问题时,我发现其中一个底层逻辑设备没有反映大小变化。见下文;
Powermt 显示所有底层逻辑单元
[root@XXXXX~]# powermt display dev=emcpowerd
Pseudo name=emcpowerd
CLARiiON ID=CKM00091500009 [VFRAC2]
Logical device ID=6006016030312200787502866C65DE11 [LUN 30]
state=alive; policy=CLAROpt; priority=0; queued-IOs=0
Owner: default=SP A, current=SP A Array failover mode: 1
`==============================================================================`
---------------- Host --------------- - Stor - -- I/O Path - -- Stats ---
`### HW Path I/O Paths Interf. Mode State Q-IOs Errors`
`==============================================================================`
3 qla2xxx sde SP A0 active alive 0 0
3 qla2xxx sdj SP B0 active alive 0 0
4 qla2xxx sdo SP A1 active alive 0 0
4 qla2xxx sdt SP B1 active alive 0 0
**Fdisk on the pseudo device shows correct space.**
[root@XXXXX ~]# fdisk -l /dev/emcpowerd
Disk /dev/emcpowerd: 429.4 GB, 429496729600 bytes
255 heads, 63 sectors/track, 52216 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/emcpowerd1 1 39162 314568733+ 83 Linux
/dev/emcpowerd2 39163 52216 104856255 83 Linux
**fdisk on one of the logical units is wrong**
[root@XXXXX~]# fdisk -l /dev/sde
Disk /dev/sde: 322.1 GB, 322122547200 bytes
255 heads, 63 sectors/track, 39162 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sde1 1 39162 314568733+ 83 Linux
/dev/sde2 39163 52216 104856255 83 Linux
**fdisk on the rest of the units is fine**
[root@XXXXX ~]# fdisk -l /dev/sdj
Disk /dev/sdj: 429.4 GB, 429496729600 bytes
255 heads, 63 sectors/track, 52216 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdj1 1 39162 314568733+ 83 Linux
/dev/sdj2 39163 52216 104856255 83 Linux
另外,当我创建分区时,Linux 没有在 /dev 目录中为第二个分区创建任何条目,因此我手动创建了这些条目
[root@XXXXX dev]# mknod sde2 b 8 66
[root@XXXXX dev]# ls -al sd[ejot]?
brw-r----- 1 root disk 8, 65 Dec 29 14:20 sde1
brw-r--r-- 1 root disk 8, 66 Apr 8 20:31 sde2
brw-r----- 1 root disk 8, 145 Dec 29 14:19 sdj1
brw-r--r-- 1 root disk 8, 146 Apr 8 20:33 sdj2
brw-r----- 1 root disk 8, 225 Apr 6 23:12 sdo1
brw-r--r-- 1 root disk 8, 226 Apr 8 20:33 sdo2
brw-r----- 1 root disk 65, 49 Dec 29 14:19 sdt1
brw-r--r-- 1 root disk 65, 50 Apr 8 20:33 sdt2
这是一个我们无法轻易重启的生产服务器。
任何想法都将不胜感激。
J
答案1
除此之外partprobe
,尝试使用 blockdev 实用程序重新读取设备的分区表:
blockdev --rereadpt /dev/sde
那么,问题可能在于 LUN 本身尚未正确更新。
您可以尝试通过文件系统对光纤通道或 SCSI 主机发出重新扫描命令/sys
。
前段时间,我编写了这个scsi_rescan_bus.sh
脚本来应对我们的 EMC Clariion 设备:
#!/bin/sh
host_number="$1"
echo "1" > /sys/class/fc_host/host${host_number}/issue_lip
sleep 10
echo "- - -" > /sys/class/scsi_host/host${host_number}/scan
我不完全确定它是否仍能与现代内核和设备兼容。在生产中尝试之前,请务必在专用测试环境中进行测试!
有许多陷阱,因此请务必阅读这些相关主题:
http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=1454807
以及官方的Red Hat文档(“在线存储重新配置指南”): http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/index.html
答案2
尝试运行/sbin/partprobe /dev/emcpowerd
partprobe
告诉你的内核重新扫描分区
答案3
我一直在与 EMC 一起调查这个问题,似乎没有办法解决这个问题,除非重新启动。但是,作为一种解决方法,我创建了一个全新的 lun,并动态地拾取了它,并能够让 oracle 识别这一点。J