哪些文件系统元数据操作实际上记录在ext4和xfs中?


9

对于哪个文件系统元数据操作实际上保留在ext4和xfs文件系统日志中,我找不到简单直接的答案。请注意,我并不是在询问POSIX声明为“原子”的什么。我更关心的是,原子文件系统操作的哪些子集可以通过启用启用日志而无需持久向后弯曲而有效地持久化fsync(2)

我相当确定的操作是:

  • creat(2)
  • link(2)
  • unlink(2)
  • rename(2)
  • mkdir(2)
  • rmdir(2)

我不确定的操作:

  • symlink(2)

symlink(2)案件是最令人头疼的,因为似乎没有任何可以简单的方式来 fsync(2)fdatasync(2)存储符号链接的内容的基本数据块。知道日记本能帮我解决这个麻烦。

Answers:


1

出于性能原因,ext4默认情况下仅通过日志写入文件系统元数据。

我相信XFS还会记录所有元数据事务,除非您对文件系统进行了调整。


是的,但是“元数据”到底是什么?目录的障碍:可以。索引节点本身:是的。符号链接的目标足够小以适合inode本身:可能吗?目标链接溢出到辅助块的符号链接:??????

链接会有所帮助
asdmin 2015年

1

我更关心的是,原子文件系统操作的哪些子集通过启用启用日志而无需一直向后弯曲和fsync(2)的方式有效地持久化。

没有。如果要确保更改在崩溃后仍然存在,则必须使用fsync,period。日记仅保证在发生崩溃时,您列出的所有操作都不会完成一半


我知道,如果我在乎,我必须对文件和目录进行fsync,以确保这些块是否遭受了旋转锈蚀,但是没有一种方法能够使我同步(如果它溢出了)一个返回符号链接的块索引节点。那时,我唯一的办法就是依靠期刊,或者永远不要再对重要的事情使用符号链接。
rboyer 2014年

@ naelyn,fsync()将刷新与文件相关的所有块,包括非快速符号链接。
psusi 2014年

1
如何打开用于刷新非快速符号链接块的fsync中合适的文件描述符?
rboyer 2014年

@naelyn,哦,是的。。。好点...可能需要在linux-fsdevel邮件列表中询问该问题...带有硬链接,我相信您可以打开并同步包含它的目录,也许符号链接的作用相同?
psusi 2014年


0

xfstests 似乎声称目录上的fsync()应该保留其包含的任何符号链接。

我尚未验证。我可能错过了一些东西。

Linux文件系统的许多开发人员都使用xfstests。该测试位于“通用”目录中。这意味着它应该适用于所有Linux文件系统。(或至少所有块设备文件系统。该测试通过使用特殊的虚拟块设备进行工作)。

https://github.com/kdave/xfstests/blob/master/tests/generic/348

# Test creating a symlink, fsync its parent directory, power fail and mount
# again the filesystem. After these steps the symlink should exist and its
# content must match what we specified when we created it (must not be empty
# or point to something else).
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.