將作業系統移至不同的磁碟機後,grub2 在引導期間從錯誤的磁碟機載入 grub.cfg

將作業系統移至不同的磁碟機後,grub2 在引導期間從錯誤的磁碟機載入 grub.cfg

我的筆記型電腦最初有 128GB M.2 SSD 和 1TB HDD。系統配置為與 Windows 雙重啟動。 /boot/efi 分割區位於 /dev/nvme0m1p1 上,原始根分割區位於 /dev/sda3 上。

我壓縮了原始 nvme0n1 的映像,將 nvme0n1 替換為 1TB M.2 固態硬碟。並將原始映像複製到新的 SSD。結果是,一旦複製完成,我就可以啟動到 Windows 或 /dev/sd3 版本的 ubuntu。

然後,我建立了一個新的 ext4 分割區 nvme0n1p6 並將 /dev/sda3 分割區複製到其中。我確實忘記在克隆後以及第一次運行 update-grub2 時更改分區 UIDD。隨後,我使用 gparted 更改了分區 UIDD,重新運行 update-grub2 並驗證它已在新 UIDD 上找到 /dev/nvme0n1p6 的映像。

在花了 6 個小時發現我在新映像的 /etc/fstab 中的 UIDD= 語句中插入了一個空格後,我能夠啟動到該新映像(我的校對技能可以提高)。載入映像後,我再次執行 update-grub2,以便將新 ubuntu 的選擇移至新 grub.cfg 中的頂部和預設值。

最後解決這個問題:重新啟動後顯​​示的grub選單仍然是原來的/dev/sda3/boot/grub資料夾中的grub.cfg。

將 /nvme0n1p6 產生的 grub.cfg 複製到 /sda3 允許在後續引導時顯示新的 grub.cfg。

重新命名 /sda3 上的 grub.cfg 檔案會導致 grub 在重新引導時停止在命令列上。退出命令列會導致 Windows 作業系統載入。我可以使用即時 USB 映像來修正該問題,該映像允許我在 /sda3 上恢復有效的 grub.cfg。

我懷疑 update-grub 命令不是我需要運行的唯一命令。我的猜測是 /nvme0n1p1 上儲存的圖像需要更新。這是透過運行某種 grub 安裝來完成的嗎?

答案1

免責聲明:我可能完全錯了。

根據您的訊息,您的硬碟上似乎安裝了一組 Windows 和一套 Ubuntu ( /dev/sda3)。讓我們將此硬碟安裝稱為 H。與你的問題無關)。我們將此 SSD 安裝稱為 S。

據我所知,問題是您在完成 S 安裝後根本沒有安裝 grub。因此它仍然會使用grub.cfg安裝 H 中的present。

若要讓 grub 使用grub.cfg安裝 S 中的文件,您必須將 grub 從 S 安裝到 EFI 分割區。

啟動至安裝 S 並運作:

$ sudo grub-install dummy
$ sudo update-grub

如果我誤解了您的場景,或者您遇到命令錯誤,請告訴我。


參考:
grub EFI載入器如何找到正確的boot.cfg?

答案2

現在我已經從新的M.2 固態硬碟上運行了ubuntu,我將回顧我用來將nvme0n1p1 上包含grub 安裝的雙重開機載入程式的128GB 固態硬碟替換為具有一個M.2 筆記型電腦中的1TB 固態硬碟的方法港口。為了清楚起見,大多數 Windows 10 駐留在 nvme0 的各個分割區上,而 ubuntu 最初駐留在 sda3 上的硬碟分割區上。啟動時,nvme0n1p1 掛載在 /boot/efi。

  1. 製作nvme0n1的鏡像a。我個人沒有採取任何措施來縮小分割區以減小圖像大小。如果這被認為是必要的,其他人已經提供瞭如何這樣做的指導。

    b.將映像寫入其他磁碟機(內部或外部)。我用了:

    dd if=/dev/nmve0n1 | gzip -c > pathToOtherDeviceFolder/nvme0n1.img

    -c選項使 gzip 寫入標準輸出,然後將其定向到檔案。

  2. 測試從包含 live 映像檔、ubuntu live 或 gparted live 的 USB 隨身碟啟動。後來我遇到了問題,因為我沒有使用通常在筆記型電腦與筆記型電腦斷開連接的情況下使用的外部顯示器來測試即時影像。在沒有連接任何外部顯示器的情況下嘗試執行後續步驟花了幾天的時間,導致實時 USB 驅動器無法啟動的是缺少外部顯示器(或以太網),而不是後續步驟的結果。我不記得連接乙太網路來成功啟動,但可以與外部顯示器一起連接。在任何一種情況下,都存在我不理解的即時影像的依賴性,但可以解決。啟動後,請確保您可以安裝包含要移動的映像的磁碟機。

  3. 關閉電源並將原來的 M.2 SSD 更換為新的。

  4. 將映像移至新的 nvme0n1

    A。從 USB live 磁碟啟動。 (你已經測試過了)

    b.安裝包含您要移動的映像的磁碟機。 (再次測試)

    C。將映像移至新的 nvme0n1。我用了:

    gunzip -c pathToOtherDeviceFolder/nvme0n1.img | dd of=/dev/nvme0n1

    同樣,gunzip 寫入 stdout,該 stdout 通過管道傳輸到 dd 以寫入新設備。

  5. 將 ubuntu 移到新 nvme0n1 上的新分割區這裡我選擇重新啟動到 sda3 上的原始 ubuntu 映像。這沒有問題,因為新的 nvme0n1 是原始 nvme0n1 的克隆。我不知道為什麼在 USB live 環境中運行時無法執行這些步驟,儘管我沒有這樣做的經驗。

    A。使用 gparted 或其他工具在 nvme0n1 上建立新的 ext4 分割區。以後我將將此分割區稱為 nvme0n1p6。

    b.將 /dev/sda3 上的 ubuntu 映像(在我的例子中)複製到 /dev/nvme0n1p6 上。我用了: dd if=/dev/sda3 of=/dev/nvme0n1p6

    C。克隆後使用 gparted 或其他工具將 nvme0n1p6 的分區 UIDD 變更為唯一的 UIDD。

  6. 在 nvme0n1p6 上準備新的操作。

    A。掛載/dev/nvme0n1p6。我使用 /mnt 作為掛載點。

    b.修改 /etc/fstab 以將 nvme0n1p6 的 UIDD 掛載為 /。請注意,nvme0n1p1 仍需掛載為 /boot/efi。確保修改後的條目格式正確。額外的空格讓 UIDD=我又花了幾個小時思考我做錯了什麼。

    C。此時可以卸載nvme0n1p6,但我想我省略了這一步。

  7. 如果仍然從 USB live 磁碟執行,請重新啟動到原始 ubuntu 映像(我的位於 /dev/sda3)

  8. 更新 grub 選單選項:

sudo update-grub2

觀察發現並新增了 nvme0n1p6 上的原始映像、Windows 映像和新的 ubuntu 映像。

  1. 重新啟動並在 grub 啟動選單中選擇新的 ubuntu 映像。

  2. 進入新映像後,執行:

    A。sudo grub-install 這會修改 /boot/efi (/dev/nvme0n101) 上的 grub 檔案以查看 /dev/nvme0n1p6/boot/grub 而不是 sda3 上 grub 選單 grub.cfg 的位置。

    b. `sudo update-grub' 將以新檔案取代已複製的 /boot/grub/grub.cfg,該檔案將新映像置於頂部並作為預設映像,並使用 sda3 上的原始映像作為備用選擇。

現在您應該能夠啟動到三個映像中的任何一個。請注意,直到grub-install在新映像上運行之前,原始映像無法從電腦中刪除,因為 grub 將無法找到其選單設定檔。

希望我沒有遺漏任何步驟或記錯它們,這對您有用。

相關內容