我读到 GRUB 理解文件系统并且可以通过查看 /boot 来访问内核,因此它加载内核,而内核又加载一些驱动程序以在 initrd 的帮助下挂载文件系统。
所以,我的问题是:为什么内核需要挂载文件系统,而 GRUB 知道它,为什么它不直接从 GRUB 或其他东西继承?也许问题实际上是关于挂载的概念,它的真正含义是什么,它是文件层次结构和磁盘地址之间的某种映射吗?
答案1
GRUB 的任务是加载内核(和 initrd),将一些参数传递给内核并启动它。为了能够做到这一点,它知道磁盘分区并且可以读取文件系统。挂载文件系统涉及到在内核中填充数据结构,以使内核能够跟踪文件层次结构。 GRUB 不是内核的一部分,它对这个层次结构一无所知。它被告知在给定分区上的文件系统中查找内容,但它不知道/boot
内核将调用它或将其安装在何处。 (好吧,它可能会向内核传递参数,但这并不是真正的“知道”。)
GRUB 的任务是“做一件事,并把它做好”。 GRUB 也不是唯一能够启动 Linux 内核的引导加载程序,甚至在大多数体系结构上都不可用,因此内核不能依赖它。
答案2
引导加载程序 (Grub) 和操作系统 (Linux) 都有一个司机对于文件系统,即一段可以理解“从文件中读取数据”等命令的代码。操作系统无法使用引导加载程序中的驱动程序,因为一旦引导加载程序将操作系统加载到内存中,引导加载程序就会从内存中删除。 (而且还因为引导加载程序的驱动程序通常不如操作系统的功能 - 例如 Grub 的文件系统驱动程序只能读取,不能写入。)
在路径上挂载文件系统/some/where
意味着对路径下文件的访问/some/where
将路由到该文件系统。当内核对文件名执行命令(打开、删除、重命名等)时,它会分析文件的路径,根据当前挂载的文件系统列表确定该文件位于哪个文件系统,并将请求分派给合适的驱动程序。安装是操作系统内部的,它不会以任何方式影响硬件,因此安装状态无法从引导加载程序传输到操作系统。