Linux/ext4/sqlite:在写入文件时是否可以触摸文件以导致竞争条件?

Har*_*mha 8 linux ext4 sqlite

对于上下文:我需要能够可靠地更新某些 sqlite DB 文件的时间戳,这些文件在 ext4 文件系统上间歇性更新。

touch写入数据库时​​使用命令(更新最后修改时间)是否会失败,甚至更糟,导致数据丢失?

sho*_*hok 11

您确实可以touch打开文件而不会损坏其内容,因为文件系统将序列化对 inode 元数据的更新。

如果从应用程序的角度来看这是安全的,则完全是另一回事,但它应该是安全的,简单的,因为即使读取文件也可以更新其元数据(即:当最后一次读取超过一天或不使用noatime,relatime或 时lazytime)。

也就是说,如果 SQLite 用于mtime某些内部簿记,它可能会因元数据更改而混淆。如果使用触摸来设置过去的时间戳,则尤其如此,这通常是一个坏主意。