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

问题描述 投票:0回答:1

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

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

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

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

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

linux-kernel filesystems ext4 block-device
1个回答
0
投票

以我有限的系统知识来看,原子性分为不同的层次。如果这个更新动作是互斥的,那么从VFS或FS的角度来看,它被认为是原子的,正如@stark

提到的
© www.soinside.com 2019 - 2024. All rights reserved.