文件系统如何将其元数据写入块设备?

How does a file-system write its metadata to block-devices?

提问人:Marco 提问时间:11/9/2023 最后编辑:Marco BonelliMarco 更新时间:11/9/2023 访问量:29

问:

我有一个关于文件系统的一般问题,以及它们在管理磁盘上的元数据时如何保持可靠的状态。

假设我们有一个块大小为 512 字节的块设备。该驱动器上的文件系统确实在特定数据结构中存储有关不同文件大小的信息。一个数据结构的大小为 64 字节。因为我非常关心可靠性和抗崩溃性,所以该元数据有一个冗余副本。一位标志指示当前正在使用的元数据版本。由于这是一个原子动作,它提高了可靠性。

现在我想将一些数据写入文件本身。除了实际的数据区域外,元数据(如文件大小)也必须更新。根据我对数据区域和元数据的理解,操作系统必须执行读-修改-写操作。元数据的读取操作可以是 512 字节。

现在元数据已经写好了,我想翻转一下。 有没有办法不读取完整块并再次修改它?否则,我将不得不写入完整的 512 个字节才能翻转一位,这不再是原子操作。同样,这与我对文件具有高可靠性的意图相矛盾。

您知道现代文件系统如何处理这些精细和小的写入操作,同时仍然具有抗崩溃性吗?

linux-kernel 文件系统 ext4 block-device

评论

1赞 stark 11/10/2023
在大多数块设备上,写入一个扇区是尽可能小的操作,并且是原子操作。

答: 暂无答案