【问题标题】:Why isn't copy operation implemented in kernel?为什么内核中没有实现复制操作?
【发布时间】:2015-11-27 11:17:02
【问题描述】:

据我了解,大部分文件 IO 操作都是在内核中实现的,比如 CRUD、move 或 remove。但是,文件复制并未作为内核级 API 实现。

为了检测内核中的文件副本,需要使用启发式方法 (discussion on this approach),例如检测文件读取、文件创建和文件写入来自具有相同文件名但路径不同的同一用户。

为什么复制是用户登陆操作?

【问题讨论】:

  • 99.9% 的工作实际上是由 ring 0 代码完成的。文件系统缓存、文件系统驱动程序和磁盘驱动程序做真正的工作。剩下的 0.1% 内核代码没有用,内核本身从不复制文件。并且用户确实喜欢漂亮的用户空间进度对话框以及在出现副本冲突时的选择。
  • 因为文件复制不是原子操作。这是一个“读+写”操作,可以在两者之间进行数据修改。即使复制是一个单独的操作,您也会抱怨您无法跟踪被放入 ZIP 或加密的文件。

标签: windows file api filesystems kernel


【解决方案1】:

首先,因为关心两个不同的文件是否具有相同的内容,其中一个文件的内容是直接从另一个文件复制而来,这是一个用户空间问题,没有逻辑理由存在于内核中。

充其量。

字节就是字节。

其次,内核如何区分两个不同的文件描述符之间的文件复制? See the man page for sendfile(). 为什么内核要跟踪调用用户是否调用sendfile() 将文件的内容发送到 TCP 套接字到谁知道在哪里或另一个文件?

第三,即使内核跟踪复制文件,在上帝的好地球上,它会用这些数据做什么

如果您关心此类文件复制事件,请设置审核。

【讨论】:

  • 审核是无用的 - 它也不会检测到文件复制。
  • 我特地问这个问题,因为审计不会检测到文件拷贝。你可以得到一些审计事件,你可以将它们组合成一个文件副本,但是这是启发式的,它可能会出错。
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 2020-07-03
  • 2011-05-22
相关资源
最近更新 更多