其实我的理解是这样的,不管是有fs也好,raw也好,你最终共享的的时候势必要跟共享的设备进行通讯,这就涉及到一个共享独占性的问题,假如有两个os同时进行访问共享设备,那此时,共享设备到底是响应谁的请求了,在没有软件对这两个os进行协商的时候,势必有一个os会io超时出错,这是一个硬件的问题,应该不是说对什么fs操作才出现的问题而已。
个人意见,欢迎拍砖。
裸设备本身不管任何meta data和权限的问题,啥时候都可以共享,不能共享的是FS。
普通文件系统对meta data和权限的管理都在本机上进行,多个机器之间不能互相通知,你写的数据我看不见,我写的你也看不见,当然就不能共享啦。
解决的办法是:让机器每次I/O之前都去盘上刷新一遍meta data,或者用网络互相通知。具有这些机制的FS就叫Cluster FS。
Oracle自己的那个文件系统本身有点cluster FS的意思,所以可以支持并行。Oracle最新的一个文件系统号称要做generic cluster fs,不过现在大家都觉得不太稳定,不怎么看好。
楼上的两位兄弟说的是大相径庭,2楼说是硬件有冲突,3楼说是系统本身造成的。
pekics兄的一番指导就是暗指我说的是正确的,也就是说:多个os可以共享raw lun,是么?
而anifer兄说的是因为多个系统同时读写会造成io冲突,但是没有格式化fs的raw,好像不会主动对磁盘进行什么读写操作把,除非用什么pc3000之类的,或者直接格式化时候会读写磁盘,os对raw应该不会读写什么东西。这样理解,就不会造成底层io冲突。话又说回来,就算这个lun已经有了文件系统,那么多个系统同时对他进行io,似乎也不是不可能,磁盘会缓冲这些io,即便同一时刻来了多个io,那么也不会造成冲突,磁盘控制器一般没有准入机制,没有access control list(盘阵控制器会有lun mask之类的准入机制),如果控制器把lun显现给了主机,那么他就不会管是那个主机来的io,而且也不会管io的上下文,这些都由文件系统来管。
所以我比较统一pekics兄的第一句话中的一部分:“啥时候都可以共享,不能共享的是FS”
但是对pekics兄说的一些知识,不太理解:“普通文件系统对meta data和权限的管理都在本机上进行,多个机器之间不能互相通知”,meta data好像都是放在磁盘上的吧?除非象svc那样会在客户机上有cache。改变了文件,一定会同时改变meta data吧?“解决的办法是:让机器每次I/O之前都去盘上刷新一遍meta data”,这个好像不用“解决”吧,本来也是这么做的啊,不理解,请拍玉。
meta data是放在硬盘上,可是meta data的处理都在主机里。
IXDBA.NET社区论坛
比如windows吧,启动的时候去磁盘上读出分区表,此后分区表的修改就基本在内存里倒腾了。直到关机的时候,主机才会统一把分区表的修改写到磁盘上。
P兄果然强,pfpf,这个贴收藏一下。
如果是在内存中捣鼓,那么说只要这台不关机,那另一台机器永远也不会得到刷新的meta data是么?也就是说连文件大小都和实际不符合了是么?如果在大小和原来都不符合的情况下,让另一台机器读这个文件,那不乱了套了。
或者是这么一种机制:meta data会还存一段时间,然后统一destage到磁盘,是么?
咨询了一个搞代码的人说:“文件句柄关闭时必然写入到硬盘中,前提是文件打开后做了更改 如果不更改当然不存在存盘问题,也就不写硬盘了”
阅读更多内容:1 · 2 · 下一页>>