阅读:1836回复:10
请问用文件系统过滤驱动能不能实现copy on write??
想问一下 使用文件过滤驱动能否在windows下实现对某个盘的copy on write快照??
有没有什么思路可以提供一下?? 谢谢 |
|
最新喜欢:![]() |
沙发#
发布于:2007-04-04 11:24
fs filter实现的话,策略不好定,比如用户写一个大文件,此时你copy,那延时是很严重的。严重影响用户体验。
还是block级别好点。 |
|
板凳#
发布于:2007-04-04 09:11
在FSD可以实现,嘿嘿......
|
|
|
地板#
发布于:2007-04-01 14:04
对文件的拷贝等一些操作好像大多不会通过SfRead函数,也不知道走了那条路
|
|
|
地下室#
发布于:2007-04-01 10:20
哦 那用过滤驱动对卷一级的写操作实行过滤吧?
我想拦截write的irp然后生成对应的read操作irp,等待read执行返回时再把write操作的irp 传递下去. 那这个read出来的原数据应该怎么样存放呢?是发送到用户态写成文件还是直接在写到磁盘里面呢? 这些操作在一个filter driver里面应该可以实现吧..? |
|
5楼#
发布于:2007-03-22 12:28
首先要考虑是实现什么级别的COW,如果是block级别的,磁盘过滤就可以。至于怎么恢复,当然你需要自己管理哪些块做了COW,这就涉及到IO的分发等等,因为一个IO可能有些块做了COW,有些块没有做COW。这个要好好搞,否则性能上会很差。
如果是文件系统级别,比如对于文件中的块的COW,这个可以在文件系统过滤驱动层搞定,但是要比block级别的要复杂。首先你要考虑的问题包括如下: 1。不能破坏文件系统和文件的相关性。 2。因为COW,在写之前涉及到一个读操作,也就是说你对这个文件要有读写权限,一般文件已经写打开,你要再次读打开,这。。。。,当然可以按照版上很多人说的复制handle的办法。我觉得最好是用户写打开文件的时候,你改变打开方式变成读写打开,用同一个线程来进行读写。 3。因为COW你要把一些数据拷贝到一些临时区域(一般英文资料叫它side storage),这个临时区域最好是一个逻辑分区或者是另外一块磁盘,如果用同一文件系统下面的文件来作为临时区域,可能会导致死锁,我就碰到这个问题,当时可头痛了。 |
|
6楼#
发布于:2007-03-20 23:30
引用第3楼zzyheart于2007-03-20 10:06发表的“”: 这些靠经验拉~或者等你参与一两个磁盘还原之类的工程就有了~ 哼哼哈嘿~ |
|
|
驱动小牛
![]() |
7楼#
发布于:2007-03-20 12:36
|
|
8楼#
发布于:2007-03-20 10:06
那 disk filter driver是不是实现就是block 级别的copy on write??
那这个检测磁盘什么地方可以放这些block,以及恢复的时候怎样恢复 这些又需要用到什么呢? 关于disk filter driver 有没有什么好的资料可以看看看呢?谢谢~ |
|
9楼#
发布于:2007-03-20 08:05
FSD貌似很难搞这个~
呀呀~ |
|
|
10楼#
发布于:2007-03-20 06:41
那要用disk filter driver
|
|
|