linux磁盘重启乱序问题处理linux
最近到客户那去巡检时,客户提到一个问题,他们的rac在重启的时候,原来的sda一、sdb一、sdc1会对应变成sdd一、sde一、sdf1,因为他们使用的是盘符来绑定裸设备,因此启动后,常常要手动执行如下命令
[root@ractest1 ~]# raw /dev/raw/raw1 /dev/sda1
[root@ractest1 ~]# raw /dev/raw/raw2 /dev/sdb1
[root@ractest1 ~]# raw /dev/raw/raw3 /dev/sdc1
而且,比较奇怪的事,两边有时认得的盘彻底不同,一边是sda\b\c,另外一边是sdd\e\f,这样,使oracle rac的共享盘出现问题。oracle
在了解了他们的状况后,我基本上明白是什么缘由,这种盘序错乱,与linux对磁盘的扫描机制有关,因此咱们只能从另外一角度去规避这样的问题,使用id号去绑定,这样就没有问题。在告诉他后,他赞成咱们对他原来的绑定方式进行修改,具体操做以下:ui
[root@ractest1 ~]# fdisk -lspa
Disk /dev/sdd: 429.4 GB, 429496729600 bytes
255 heads, 63 sectors/track, 52216 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes.net
Device Boot Start End Blocks Id System
/dev/sdd1 1 52216 419424988+ 83 Linuxblog
Disk /dev/sde: 209 MB, 209715200 bytes
7 heads, 58 sectors/track, 1008 cylinders
Units = cylinders of 406 * 512 = 207872 bytesip
Device Boot Start End Blocks Id System
/dev/sde1 1 1008 204595 83 Linuxci
Disk /dev/sdf: 209 MB, 209715200 bytes
7 heads, 58 sectors/track, 1008 cylinders
Units = cylinders of 406 * 512 = 207872 bytesget
Device Boot Start End Blocks Id System
/dev/sdf1 1 1008 204595 83 Linuxinput
能够看到,刚重启的节点1是sdd/sde/sdf
另外一个节点的状况是:
[root@ractest2 ~]# fdisk -l
Disk /dev/sda: 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/sda1 1 52216 419424988+ 83 Linux
Disk /dev/sdb: 209 MB, 209715200 bytes
7 heads, 58 sectors/track, 1008 cylinders
Units = cylinders of 406 * 512 = 207872 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 1008 204595 83 Linux
Disk /dev/sdc: 209 MB, 209715200 bytes
7 heads, 58 sectors/track, 1008 cylinders
Units = cylinders of 406 * 512 = 207872 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 1008 204595 83 Linux
分别在两台机子上执行以下命令:
[root@ractest2 ~] /usr/lib/udev/scsi_id -g -s /block/sda
360080e500017ff06000004054c47bd4a
[root@ractest2 ~] /usr/lib/udev/scsi_id -g -s /block/sdb
360080e500017fdd8000004c74c6344ef
[root@ractest2 ~] /usr/lib/udev/scsi_id -g -s /block/sdc
360080e500017ff060000044f4c63446e
[root@ractest1 ~] /usr/lib/udev/scsi_id -g -s /block/sdd
360080e500017ff06000004054c47bd4a
[root@ractest1 ~] /usr/lib/udev/scsi_id -g -s /block/sde
360080e500017fdd8000004c74c6344ef
[root@ractest1 ~] /usr/lib/udev/scsi_id -g -s /block/sdf
360080e500017ff060000044f4c63446e
能过对比,能够看到sda与sdd,sdb与sde,sdc与sdf是对应用的,因此咱们启用udev,经过绑定id来规避这个问题!
[root@ractest1 ~]# cd /etc/udev/rules.d/
[root@ractest1 rules.d]# ls -a
. 50-udev.rules 60-pcmcia.rules 61-uinput-wacom.rules 90-hal.rules
.. 51-hotplug.rules 60-raw.rules 85-pcscd_ccid.rules 95-pam-console.rules
05-udev-early.rules 60-libsane.rules 60-wacom.rules 90-alsa.rules 98-kexec.rules
40-multipath.rules 60-net.rules 61-uinput-stddev.rules 90-dm.rules bluetooth.rules
[root@ractest1 rules.d]# vi 60-raw.rules
# Enter raw device bindings here.
#
# An example would be:
# ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
# ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.
ACTION=="add", KERNEL=="sd*1", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="360080e500017ff060000044f4c63446e", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sd*1", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="360080e500017fdd8000004c74c6344ef", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sd*1", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="360080e500017ff06000004054c47bd4a", RUN+="/bin/raw /dev/raw/raw3 %N"
KERNEL=="raw[1-3]", OWNER="oracle", GROUP="dba", MODE="660"
[root@ractest1 rules.d]# start_udev
Starting udev: [ OK ]
[root@ractest1 rules.d]#
[root@ractest1 rules.d]# raw -qa
/dev/raw/raw1: bound to major 8, minor 81
/dev/raw/raw2: bound to major 8, minor 65
/dev/raw/raw3: bound to major 8, minor 49
同理,在另外一台机,也进行一样的操做。
通过如上操做后,全部问题都解决了,无论怎么重启都不会有问题!