有没有办法禁用文件系统的 mtime?
有一个与文件系统无关的 noatime 选项,但没有“nomtime”。此外,在 ext4 和/或 btrfs 的文件系统特定文档中,我找不到这个选项。
这个存在吗?
答案1
内核中没有这个选项。
包括/linux/statfs.h:
#define ST_NOATIME 0x0400 /* do not update access times */
#define ST_NODIRATIME 0x0800 /* do not update directory access times */
#define ST_RELATIME 0x1000 /* update atime relative to mtime/ctime */
我想不出任何功能此选项的用途除了测试目的(您的用例)之外。
您的选择是:
- 修补内核以添加此选项
- 修补客户端软件以不响应修改时间。
答案2
我发现这里有一个S_NOCMTIME
标志include/linux/fs.h
:
#define S_NOCMTIME 128 /* Do not update file c/mtime */
看起来它能完成需要做的事情。虽然它显然没有向用户公开,但有使用它的示例(只需 grep 即可),因此应该能够为相应的文件系统破解一个小补丁。
实际用例是,在将小块数据写入固定大小的循环缓冲区时避免 inode 更新(例如,避免在基于 NAND 的存储上进行不必要的擦除循环)。