阅读:1887回复:18
关于虚拟网络硬盘的同步问题
我在A机器创建虚拟盘E,它是网络上机器B的物里盘C.
我是通过把发向A的E盘的IRP都通过TDI传给机器B的C:盘 但是现在有个问题是它们不能同步。 如在机器A的E盘写入一个文件,在机器B上的C盘却看不到这个文件。 它们两个盘好想是独立的。 我知该如何解决这个问题。 还有就是还有其它方式实现虚拟硬盘吗? |
|
沙发#
发布于:2005-03-07 09:53
你知的网络上的两台机器可以通过网上邻居看到吗?
如能的话,将要虚拟的空间用文件来呈现,直接用filedisk就可以了. |
|
驱动老牛
|
板凳#
发布于:2005-03-07 10:48
期待...
这个问题恐怕很难做,因为向磁盘写如数据得时候驱动层不是马上能得到得。 |
|
地板#
发布于:2005-03-07 11:08
期待... 每次发完文件,强制Flush一下 |
|
|
驱动老牛
|
地下室#
发布于:2005-03-07 11:42
[quote]期待... 每次发完文件,强制Flush一下 [/quote] 发送完毕当然好办了,这之前磁盘中还没有得到数据呢,你怎么知道发送完毕 |
|
5楼#
发布于:2005-03-07 11:51
[quote][quote]期待... 每次发完文件,强制Flush一下 [/quote] 发送完毕当然好办了,这之前磁盘中还没有得到数据呢,你怎么知道发送完毕 [/quote] 用定时器,每隔一段时间Flush一下,操作系统就是这样做的 |
|
|
6楼#
发布于:2005-03-07 16:16
这样还是会造成磁盘的混乱。
|
|
7楼#
发布于:2005-03-08 08:55
有没有更好的方案呢。
|
|
8楼#
发布于:2005-03-08 09:14
你是在涉及到分布式文件系统的技术问题了:这就是Cache的一致性问题。这个问题可能和在你虚拟硬盘上的文件系统实现有关。你用的FAT32还是别的什么?
理论上,Windows 2000的Cache Manager每隔3秒就会把Dirty数据Flush一次,所以我比较好奇为什么会发生这种现象?能具体描述一下吗? |
|
驱动老牛
|
9楼#
发布于:2005-03-08 09:33
你是在涉及到分布式文件系统的技术问题了:这就是Cache的一致性问题。这个问题可能和在你虚拟硬盘上的文件系统实现有关。你用的FAT32还是别的什么? 不可能是3秒钟,我修改FILEDISK就发现,开始处理WRITE时出错了,但是确还是可以把文件复制进去出来,文件没有损坏,但是过几分钟才会发现文件有问题。如果文件小的话时间就会很长。 |
|
10楼#
发布于:2005-03-08 10:25
你是在涉及到分布式文件系统的技术问题了:这就是Cache的一致性问题。这个问题可能和在你虚拟硬盘上的文件系统实现有关。你用的FAT32还是别的什么? Cache是CPU中的,刷新是刷新到内存,使内存与Cache一致,而不是磁盘 |
|
|
11楼#
发布于:2005-03-08 12:35
我的虚拟硬盘是把客户端的文件系统下层的IRP发给服务端的实际文件系统的下层。他没有通过服务端的物理盘所邦定的文件系统。
所以我现在考虑是不是在文件系统的上层建过虑驱动,截获IRP 然后直接发给服务端的物理硬盘的文件系统。 这样同部的问题就解决了。 大家看看,这个方案如何? |
|
12楼#
发布于:2005-03-08 15:30
我的虚拟硬盘是把客户端的文件系统下层的IRP发给服务端的实际文件系统的下层。他没有通过服务端的物理盘所邦定的文件系统。 效果一样,OS的文件系统也有缓冲 |
|
|
13楼#
发布于:2005-03-08 16:43
有没有什末办法可以使文件系统知到实际物理磁盘已经变化了。
然后文件系统自动刷新。 |
|
14楼#
发布于:2005-03-09 10:13
我写了一个文件驱动,在文件驱动这一层观察到的write flush就是3秒钟左右。但在disk这一层如何,我试试看。你看看我写的vdisk,它比filedisk简单多了(它使用了一个系统句柄标志,所以简单得多),也许有帮助。如果需要写控制器级的虚拟硬盘,我们再来讨论。
vdisk在http://bcompute.com/rambler/cn/WinDriverDownload.htm网页上。功能少一些,毕竟是一个演示程序:) 但可以用,更易于演示。 |
|
15楼#
发布于:2005-03-09 10:43
就它vdisk下不了
|
|
|
16楼#
发布于:2005-03-10 09:27
他能实现同步功能吗?
还有他能需拟一个网络盘吗? 好象不能吧 |
|
17楼#
发布于:2005-03-13 03:53
忘了更新网页了,惭愧。现在可以下了。
把这个例子中的Zw...函数调用改成对TDI的调用就可以了。 关于使用TDI,可以看一下DriverStudio的DriverNetwork库。也可以看“谁有磁盘驱动访问网络的源代码,就是在磁盘驱动中加入TDI支持 ”这个帖子。 |
|
18楼#
发布于:2005-03-25 18:39
OnebyOnePlease你的那个做的如何阿,我们现在也作那个,不过是数据库的,可不可以多多帮帮我啊
|
|