Linux

為什麼核心不從 GRUB 繼承文件系統資訊?

  • August 14, 2017

我讀過 GRUB 理解文件系統並且可以通過查看 /boot 來訪問核心,因此它載入核心,然後載入一些驅動程序以在 initrd 的幫助下掛載文件系統。

所以,我的問題是:為什麼核心需要掛載文件系統而 GRUB 知道它為什麼不直接從 GRUB 或其他東西繼承?也許問題真的是關於掛載它的真正含義的概念,它是文件層次結構和磁碟地址之間的某種映射嗎?

引導載入程序 (Grub) 和作業系統 (Linux) 都有一個文件系統驅動程序,即一段程式碼,可以理解諸如“從文件中讀取數據”之類的命令。作業系統不能使用引導載入程序中的驅動程序,因為一旦引導載入程序將作業系統載入到記憶體中,引導載入程序就會從記憶體中擦除。(也因為引導載入程序的驅動程序通常比作業系統的功能更差——例如 Grub 的文件系統驅動程序只能讀取,不能寫入。)

在路徑上掛載文件系統/some/where意味著對下面文件的訪問/some/where被路由到該文件系統。當核心對文件名執行命令(打開、刪除、重命名等)時,它會分析文件的路徑,根據目前掛載的文件系統列表確定文件所在的文件系統,並將請求分派到合適的司機。掛載是作業系統內部的,它不會以任何方式影響硬體,因此無法將掛載狀態從引導載入程序轉移到作業系統。

GRUB 的任務是載入核心(和 initrd),將一些參數傳遞給核心並啟動它。為了能夠做到這一點,它知道磁碟分區並且可以讀取文件系統。掛載文件系統涉及在核心中填充資料結構,以使核心能夠跟踪文件層次結構的結構。GRUB 不是核心的一部分,它對這個層次結構一無所知。它被告知要在給定分區上的文件系統中查找內容,但它不知道它將被呼叫/boot或將被核心掛載到哪裡。(好吧,它可能會這樣向核心傳遞參數,但這並不是真正的“知道”。)

GRUB 的任務是“做一件事,把它做好”。GRUB 也不是唯一能夠啟動 Linux 核心的引導載入程序,甚至在大多數架構上都不可用,因此核心不能依賴它。

引用自:https://unix.stackexchange.com/questions/385804