|
|
1
2
我相信对于您的特定问题:“我可以将文件写入特定群集位置吗”的答案通常是“否”。 原因是,现代操作系统的体系结构是分层的,因此底层磁盘存储的访问级别低于您可以访问的级别,当然,磁盘可以以不同的方式格式化,因此将有支持不同格式的不同内核模式驱动程序。即便如此,智能磁盘控制器仍然可以重新映射内核模式驱动程序使用的地址。简言之,有太多可能的重定向级别,您无法确保您的干预是在正确的级别上进行的。 如果您谈论的是Windows—您没有说明,但似乎是假设的—那么您需要了解内核中的存储驱动程序(请参阅 https://docs.microsoft.com/en-us/windows-hardware/drivers/storage/ https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/_ifsk/ ). 这实际上是一个“过滤器”,因为它位于IO请求链中,可以拦截和更改IO请求包(IRP)。当然,这将在内核中运行,而不是在用户空间中,通常这将是用C编写的,我注意到您的问题被标记为Delphi。 您的IFS驱动程序可以位于请求链的不同级别。我使用这种技术截获对特定文件系统位置(路径/文件名)的调用,并更改IRP,以便虚拟化请求—甚至从内核回调到用户空间,以解决如何处理请求。使用提供的示例实现IFS驱动程序的基本功能并不太复杂,因为它是一个过滤器,而不是一个完整的storgae系统。 然而,这种方法的本质意味着另一个过滤器也可以改变您在驱动程序中所做的事情。
编辑 关于OP的建议 FSCTL_MOVE_FILE 对于简单的环境,这可能会做你想做的,它的目的是支持碎片整理过程。
您将注意到,从您链接到它的页面上可以看到它正在移动 一个文件的一个或多个虚拟群集在同一卷内从一个逻辑群集到另一个逻辑群集 这是一个传递给我在上面提到的底层存储驱动程序的代码。存储层做什么取决于存储层,并取决于底层技术。对于更高级的存储,不能保证这实际上解决了 身体的 我相信你的问题是关于什么地点的。 但是,这完全取决于底层存储系统。对于某些类型的存储,操作系统可能不会以同样的方式进行重新定位。以具有内置数据分层功能的企业存储阵列为例。在不知道操作系统的情况下,数据将根据分层算法在存储中重新定位。还要考虑到有些技术允许直接访问数据(如NVMe),并且您使用的是“虚拟”和“逻辑”集群,而不是物理位置。 但是,您可能会发现,在一个简单的情况下,在底层驱动程序中提供支持,并且在操作系统和内核之外不进行重新映射,这就满足了您的需要。 |
|
2
1
|