兩個帶有自己 ESP 的驅動器
我在如何啟動到 Linux 時遇到問題。如果只有一個驅動器和一個 ESP,我嘗試並成功啟動。但我的目標是擁有兩個不同的驅動器和它們自己的 ESP。第一個驅動器具有帶有自己的 ESP 的 Windows,第二個驅動器將用於帶有自己的 ESP 的 Linux。
我這樣做是為了即使沒有其他驅動器,這些驅動器也會獨立啟動。
我所做的是我刪除了包含 Windows 的第一個驅動器並在第二個驅動器上安裝了 Linux。如果第一個驅動器未連接,Linux 將完美啟動。
現在我的問題是,如果兩個驅動器都已連接,並且當我啟動到 Linux 時它會告訴我
no init found try init=bootargs
,但是帶有 Windows 的驅動器可以正常啟動。
該
no init found
消息告訴我 Linux 核心已經啟動,但它無法/sbin/init
在根文件系統上找到,可能是因為它正在尋找錯誤的位置。了解您的 Linux 引導載入程序設置如何辨識根文件系統。通常它是
root=
Linux 核心的一個選項。如果根文件系統被標識為
/dev/sdaN
(其中 N 是一個數字),則它指定 initramfs/initrd 文件中包含的驅動程序首先檢測到的磁碟上的第 N 個分區。當您只連接了 Linux 驅動器時,這個假設是正確的並且您的系統可以正常啟動。但是當兩個磁碟都連接時,首先檢測到您的 Windows 磁碟並且該root=/dev/sdaN
選項有效地指向錯誤的磁碟。解決此問題的最佳方法是以不依賴於磁碟檢測順序的方式指定您的根文件系統。
在 Linux 中,
blkid
以 root 身份執行。它將列出它可以看到的每個磁碟分區,以及它們的所有標識符。找到與包含您的根文件系統的分區匹配的行:它應該UUID=<a long hexadecimal string>
列出一個值。它可能也有也可能沒有LABEL=<a short name>
。也將有一個PARTUUID
並且可能PARTLABEL
列出一個;別理他們。在大多數 Linux 發行版中,您可以將
root=/dev/sdaN
選項更改為root=UUID=<the long hexadecimal string form blkid>
. 這樣,您的根文件系統將由唯一的文件系統 UUID 而非其檢測順序顯式標識。由於您沒有指定 Linux 發行版的名稱和版本,因此我無法準確告訴您應該在哪裡進行此修改,因為引導載入程序配置的位置在不同的 Linux 發行版中有所不同。但在現代發行版上,
/etc/default/grub
這可能是一個不錯的猜測。修改後/etc/default/grub
,您通常必須執行一些命令來更新實際的引導載入程序:它可能是update-grub
orgrub-mkconfig
或類似的東西。