HardBirch

iSCSI协定对多User同时写一个target device的互斥问题讨论

时间:10-01-05 栏目:系统技术篇 作者:鲁智森也有文化 评论:0 点击: 2,740 次

问题发起:

LZ:

现在我用的iscsi target的实现是 iSCSI enterprise target-0.4.14
, 现在对于单用户操作(也就是只有一个用户initiator 连接target ,并自动mount ,并进行写操作) ,是没有问题的,
performance也很好 ,速度也很快,比较稳定。

但是现在麻烦的多用户的问题: 当多个Initiator同时连接到一个target device的时候,
并且同时写同一块磁盘的一个目录的时候(分别创建子目录) ,我发现只有第一个连接的Initiator的写操作才能生效
,其他的Initiator的写操作都lost 了。

由此, 我想到了和samba 相对比 , 我们知道 对于samba ,支持多个用户同时写是没有任何问题 , 一个用户创建了一个目录 , 另外一个用户马上就能看见 。 我想知道 smb/cifs 是如何实现的呢?

肯定也与具体的文件系统有关:因为比如具体的文件系统ext3 ,也可以多个用户同时在本地写,而且不会相互覆盖 ,有先有后,不会corruption 。 这样看起来 ,本地的文件系统也必须实现互斥和同步的操作。 这个又是如何做到呢?

我粗略的查了查 iscsi protocol : http://www.faqs.org/rfcs/rfc3720.html

并没有看到同步和互斥这方面的规定 , 难道真的是由具体的文件来实现互斥和同步的吗?

我现在试验的情况是: Linux iscsi server端挂两块硬盘(一个系统harddisk , 另外一个就全是ntfs格式的分区,把这块share出去)

Windows端用的是 Initiator-2.03 (latest version )

连接成功后 , Windows端自动mount Linux端的第二快harddisk , “我得电脑”上会出现几个卷标 。 就可以直接往这些远程磁盘写创建目录了。

我也分析了 iscsi与samba的不同:

请指正:

1>一个是iscsi是设备级别的共享, samba是文件系统级别的共享

2>对于iscsi 因为是直接共享某个分区或者整个磁盘(可以是 /dev/hda , /dev/hda1 假设文件系统都是ntfs的,没有目录的概念) ,自然Linux target端不需要有ntfs driver的支持。

而samba因为是共享某个目录 , 所以Linux target端必然要有相应的fs支持才行。

 

------------------------------------------------------

 

A:

应该不在这么低层考虑互斥的吧,应该是文件系统要考虑的问题吧。___有道理


LZ:

因为iSCSI client mount远端的磁盘到本地后, 就是使用windows的ntfs driver来写目录的,根据iSCSI的介绍, 只是把SCSI的指令传递给iSCSI target device了 。 所以没有文件系统的概念了。

所以我考虑是不是要改写 iSCSI target 的实现代码, 类似的 Samba的smbd 应该也实现了多用户的互斥何同步了吧(对于samba 我也正在看这方面的内容,所以不太确定)___想法不错,但是实现难度太大牵扯内核的东西就很多

 

C:

ntfs driver是文件系统级的驱动把。 一般来说,block设备的驱动应该不需要考虑互斥把。:)  ___哈哈

 

D:

看iSCSI 协议, 我觉得他主要也就是对SCSI 封装了一下, 然后send到target device , 我觉得不能直接递交给 SCSI 层 , 否则就肯定就乱掉了。我觉得应该在交给SCSI layer之前 做好mutex和sync的动作
。 ___这位仁兄分析的也很有道理

 

E:

以前碰到过SCSI的驱动,觉得在层次,已经没法看到是什么文件系统,只是读写,控制操作了。___这哥们当年回避了问题

 

LZ:



自己找到了答案,还附了很精彩的一篇文章





我终于知道答案了,这几天在参加iSCSI Enterprise Target的开发组的讨论 , 这个能从理论上解释:


iSCSI really is just the handling of data blocks to and from the
hard disk. Think of it as an extension of the hard disk that goes
across the wire.

If you have multiple servers connected to a volume it is exactly
like having a shared SCSI bus between multiple hosts. There is nothing
in the SCSI controllers to prevent you from corrupting your shared
volumes. This kind of control needs to come from the operating system.
The OS needs to know the volume is shared and either a special
file-system or special handling needs to take place. I don't know of a
shared file-system in Windows, but Microsoft Cluster Services allow one
server at a time access to a shared volume using SCSI Reserve/Release.

iSCSI must follow the SCSI protocol and the only function available
to aid in shared access is SCSI RESERVE/RELEASE, which is a form of
mutex.

-Ross

这样的话 , SCSI本身不能解决互斥的问题, 必须由kernel来解决。

通过google , 知道 iSCSI本身不能作share storage , 必须配合cluster file system
才能实现真正的simultaneously read and write to and from a same target device .

GFS 就是这样一个文件系统 ,由RedHat开发, 而且是open source的。

http://kt.mydeyang.com/Site/pView.Asp?id=4590

(加精)
http://www.iscsistorage.com/clustfile.htm

 



iSCSI协定对多User同时写一个target device的互斥问题讨论:目前有

  1. 沙发
    匿名用户:

    [e03]

    2010-03-09 17:26 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐