从内核空间的角度来看,文件系统 UUID 是如何工作的(当它不唯一时,我的 Linux 机器会发生什么情况)?

从内核空间的角度来看,文件系统 UUID 是如何工作的(当它不唯一时,我的 Linux 机器会发生什么情况)?

最后我想这确实是我想要找到答案的问题:如果根文件系统没有唯一的 UUID,我会让 Linux 机器崩溃吗?但请继续阅读,这个问题是关于深入了解原因,而不是关于错误配置的影响。

鉴于我可以将整个根文件系统(包括其 UUID)克隆到相同大小的单独分区中。在原始和克隆上,索引节点都会将您指向磁盘上同一文件和同一块的副本(分区),因此您不会注意到任何开始出错的情况。

但如果是这样,我想了解为什么,或者问题的本质是什么被期望。有很多关于文件系统中的 UUID 如何让您的生活变得轻松、它们应该如何工作、如何udev/dev.并且有注释 UUID 在 Linux 机器中必须是唯一的。我想从用户空间的角度来看,UUID 有很好的记录,但是我想了解内核空间的角度更好的。

例如,您是否会遇到某种脑裂情况,其中某些块从一个分区读取或写入,而其他块从另一个分区读取或写入?内核可以锁吗?也许安装和/或卸载其他设备时遇到问题?或许还有一点:多路径如何适应,它能够管理重复 UUID 的非常特殊的情况。

回到实际问题:内核实际上如何在内部利用这些 UUID?当我通过 UUID 挂载文件系统并检查mountdf或的输出时/proc/mounts,这些都没有显示我用来发出挂载命令的 UUID,它们总是向我显示 中的设备节点/dev。是否有用于 UUID 到设备映射的用户空间接口(不一定与设备到 UUID 相同)?内核如何决定访问哪个块设备?这是否会随着时间的推移或多或少自发地改变(可能是由于某些事件)?如果我不遵守唯一 UUID 的简单规则,我的机器/文件系统会发生什么?

或许我的答案是在https://www.kernel.org/doc/但当我不知道我到底在寻找什么时,这有点令人不知所措。也欢迎进入该网站的深层链接。

答案1

这真的很简单。

您的分区可能具有非唯一的 UUID,这没有问题,但是当您实际安装它们时,内核会在分区之间创建一个链接。独特的设备节点/dev到指定的安装点,这意味着读取和写入在任何时候都不能访问不同的设备。

如果你发现自己处于这样的情况,例如你克隆了一个未安装的分区,然后尝试使用 挂载它UUID,挂载实用程序将挂载任一分区随机地但您始终可以查阅mount输出来检查实际使用了哪个设备。

内核实际上如何在内部使用这些 UUID?

它不是。内核使用设备节点。

是否有用于 UUID 到设备映射的用户空间接口(不一定与设备到 UUID 相同)?

查看ls -la /dev/disk/by-uuid

内核如何决定访问哪个块设备?这是否会随着时间的推移或多或少自发地改变(可能是由于某些事件)?

当您有非唯一分区时,我可以想象内核可以在任何给定时间使用它们中的任何一个,但只能使用一次(您尝试安装它们)。

如果我不遵守唯一 UUID 的简单规则,我的机器/文件系统会发生什么?

它不会爆炸,但我不建议保留此配置。克隆分区并删除目标磁盘。

相关内容