Linux 是否通过 Btrfs 提供文件系统日志功能?

Dam*_*les 2 filesystems btrfs journaling

NTFS 提供了一种称为日志的东西。我认为它是任何应用程序完成的文件重命名/移动/删除等操作的记录。我可以在 Linux + BTRFS 上获取类似的日志或日志吗?1 个 BTRFS 分区,仅由一个 Linux 安装使用。

Google 图片上的 NTFS 日志示例: 在此输入图像描述

Gil*_*il' 6

我认为你误解了该杂志的目的。它不是应用程序执行的操作的日志,并且不记录哪个应用程序导致了更改。它不适用于用户或管理员。它旨在作为文件系统的内部工具。

\n

出于性能考虑,磁盘写入并不总是按照发出的顺序进行。如果系统在有时间写入所有内容之前因电源故障或系统崩溃而中断,则文件系统可能会处于不一致状态。例如,如果将文件从一个目录移动到另一个目录,则可能包含旧目录内容的磁盘块已被写入,但包含新目录内容的磁盘块尚未写入。书面。如果系统此时停止,则该文件将不再从任一目录引用,并且实际上会丢失。

\n

有多种技术可以避免此问题(通常称为文件系统设计中的弹性)。许多文件系统(包括 NTFS)都使用日志来实现此目的。日志按照执行的顺序记录操作,并且每个操作都是自动添加的,因此读取日志始终会产生一致的状态。有些文件系统称为日志结构文件系统,其中日志是记录有关文件系统内容的所有信息的地方。对于包括 NTFS 在内的其他信息,所有信息最终都会写入日志之外:日志仅包含可能尚未写入其 \xe2\x80\x9cnormal\xe2\x80\x9d 位置的最新信息。读取文件并不访问日志,而是直接访问正常位置的数据。仅在启动时(更准确地说:挂载文件系统时)读取日志以完成尚未执行的任何操作。

\n

通常,对于非日志结构的日志文件系统,日志将仅包含最近的操作。日志的空间通常有限,一旦相应的操作写入磁盘,旧条目就可以被覆盖,这通常不超过几秒钟。如果与日记大小相比没有太多活动,您可能仍然能够看到旧日记条目,但这不是您可以指望的。

\n

某些 Linux 文件系统(例如 ext4)使用日志。但 Btrfs 不是其中之一。Btrfs 通过写时复制实现弹性。它永远不会覆盖正在使用的磁盘块。为了进行更新,它使用新数据创建一个新块,然后为包含需要更新的块的位置的任何位置创建一个新块,然后为包含该位置的位置创建新块,等等。当它到达根\xc2\xb9时,它确保所有子块都被写入,然后更新根。这样,根始终引用始终有效的块。

\n

如果您想跟踪文件操作,无论在 Linux 上还是在 Windows 上,文件系统日志都不是实现此目的的方法。Linux 上的主要工具是LoggedFS审计子系统。请参阅是否可以找出哪个程序或脚本创建了给定文件?列出程序访问的文件

\n

\xc2\xb9这是块树的根,而不是目录树的根。在这种详细程度上,区别并不明显。

\n