Linux 无法在 emc 伪设备上正确拾取新分区

Linux 无法在 emc 伪设备上正确拾取新分区

我们有一个运行 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

相关内容