2024年3月29日发(作者:)
何为SCSI锁?
在一个共享存储的环境下,多台主机可能会同时访问同一台存储设备,如果此时多台主机在
同一时点上对一个Lun进行写的操作,那么可想而知这个Lun将不知道哪个数据先写,哪
个数据后写。为了防止这种情况发生而导致的数据损坏,于是就引入了SCSI锁的概念。如
下图中HostA对Lun进行读写时,对Lun加上SCSI锁,此时HostB将无法对该Lun进行
访问。
HostA HostB
/
/
Lun
1. SCSI锁的类型。
通常来讲目前SCSI锁有两种类型:SCSI-2Reservation和SCSI-3 Reservation,这里
SCSI-3Reservation也称之为Persistent Reservation。这两种类型的的锁是不能共存在一
个Lun上的。
SCSI-2 Reservation只允许设备被发出加锁的Initiator访问,这里Initiator一般指HBA。比
如HostA上的fcs0对访问的LUN加上SCSI-2锁,此时即使HostA上的fcs1也无法访问
该Lun。所以SCSI-2 Reservation有时也被称为single-pathreservation。
SCSI-3 Reservation(PersistentReservation)是使用PR Key来对设备进行加锁。通常一
台Host会有唯一的PR Key,不同的host,PRKey也不同。所以一般SCSI-3 Reservation
通常被应用在多通路的共享环境下面。
2. 什么情况下设备会被加锁?
一般设备被打开时将会被加上锁。比如varyonvg、dd等等,需要注意的是对于dd这种命
令当它运行时设备会被加锁,运行完成后会自动解锁。
注意:varyonvg -c不会对设备加锁。
另外,当vg varyon之后,只有varyoffvg或者varyonvg -b才会对vg相关的设备进行解锁。
直接用shutdown命令不会做varyoffvg的动作,因此不会解锁。
3. 处理SCSI-3锁
1) 查看SC_DISK_ERR* orFSCSI_ERR*的sense data.
01 – thisindicates the SCSI status field is valid
18 - SCSI device is reserved by anotherHost
For example:
SENSE DATA
0600 0000 0000 0000 0000 0000 0000 00000000 0000 0000 0000 0118 0000 0000 0000
This is usually seen in an SC_DISK_ERR* orFSCSI_ERR* error (errpt –a output).
2) 处理ESS/DS8000/DS6000上的persistent reservation。
lquerypr -vh /dev/vpathX可以查看persistentreservation。如果有PR的话,返回值将是PR
Key,可与uname -a相比较对应。
lquerypr -ch /dev/vpathX可以用来清除persistentreservation。注意:该命令慎用!!!
在SDDPCM的环境下用pcmquerypr。
3) 处理DS4000上的persistent reservation。
通过SM中Advanced->Maintenance->PersistentReservations查看与清除logical drive的
SCSI-3reservation。
4. 处理SCSI-2锁
有时我们用lquerypr无法看到vpath上有锁,或者SM的persistentreservation输出也显示
无锁,但hdisk/vpath就是无法访问。这时请检查是否有SCSI-2reservation。
注意:以下命令方式不仅限于SCSI-2锁,对SCSI-3锁也适用。
1) DS4000: hlmTestLunShow SSID查看。
hlmTestLunShow 8
LunNumber:0x8 LunInfo :0x6642c5c State:0x0
QuiescenceFlag:0x0 Owner:0x1 IsReady :0x1
reserveId:0xe resv3rdId:0xffff
value = 128 = 0x80
输出中reseveId表示SCSI-2 reservation,resv3rdId表示SCSI-3 reservation。值为0xffff
表示没有锁,0xe表示被hostid为0xe的host占用。
解锁方法:
ü hlmTestRelease reservId,SSID
ü 将Lun从一个控制器切换到另一个控制器
ü 在AIX上 ,使用HACMP的相关命令
/usr/sbin/cluster/events/utils/cl_flutereset /dev/hdiskXX
2) DS6800: catreef "fb/volstatuslss"查看
catreef "fb/volstatus 0x12"
Vol Rsv DA State FB Status Known Format Status
---- ----- ------------------ --------------------- -------------------------
1200 PPRC GOOD Ready formatted
1201 TRAD GOOD Ready formatted


发布评论