在基於 ARM 架構的系統上,我將 Ubuntu Server 從 HDD 遷移到 SSD 後,無法啟動。以下是我的操作步驟和目前狀態:
我使用 mount 和 cp 指令(或其他複製工具)將原 HDD (/dev/sdc1) 的 EFI 分割區複製到新的 SSD (/dev/sde1)。兩個分割區均為 500GB。
在 UEFI/BIOS 中將 SSD 設定為第一啟動項目。
啟動時,GNU GRUB(版本 2.12)僅顯示一個選項:
*UEFI Firmware Settings
沒有出現 Ubuntu 啟動項,我無法進入作業系統。
如果 GRUB 中只顯示「UEFI Firmware Settings」,通常表示 GRUB 無法偵測到您的 Linux 核心或其他作業系統條目,這通常是由於 EFI 系統分區 (ESP) 掛載不正確、缺少核心模組、安裝過程中出現問題或作業系統偵測程式 (OS-Prober) 已停用,需採取下列步驟:
重新安裝 GRUB 並正確掛載分割區(例如,將 ESP 掛載到 /boot 或 /boot/efi),啟用作業系統偵測程式 (OS-Prober),停用 Windows 快速啟動或執行 efibootmgr 手動建立條目。
檢查 SSD 上的 EFI 分割區是否包含 /boot/efi/EFI 資料夾。
userA@ubuntu:~$ sudo ls -al /boot/efi
total 24
drwx------ 3 root root 16384 Jan 1 1970 .
drwxr-xr-x 1 root root 120 Dec 10 17:17 ..
drwx------ 4 root root 8192 Dec 17 2018 EFI
能看到 EFI 資料夾,應該正常。
安裝 Boot Repair 嘗試解決,但遇到問題:
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-update
sudo apt install -y boot-repair
boot-repair
偵測到 64 位元系統。請在 64 位元會話中使用此軟體。 (請使用 Boot-Repair-Disk-64bit (www.sourceforge.net/p/boot-repair-cd),其中包含此軟體的 64 位元相容版本。)這將啟用此功能。
奇怪!我用 ARM 伺服器安裝的應該已經適配 ARM CPU 架構,為什麼會不相容?
嘗試重新產生 GRUB 設定檔。
# 重新產生 GRUB 設定文件
grub-mkconfig -o /boot/grub/grub.cfg
# 為 UEFI 系統重新安裝 GRUB
grub-install --target=arm64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
但出現錯誤:
grub-install: error: /usr/lib/grub/aarch64-efi/modinfo.sh doesn't exist. Please specify --target or --directory.
如何從 USB Live Ubuntu 桌面環境重建 GRUB 開機條目或修復啟動配置?
經檢查發現 /boot/grub/grub.cfg 檔案中完全沒有 Linux kernel 的 menuentry,即使 kernel 和 initrd 檔案都存在於 /boot 目錄中。執行 update-grub 時因為 Python apt_pkg 模組損壞而無法正確偵測 kernel。
系統使用的分割區以外區域也有訊息的在第 0 到 ???? (UEFI跟MBR範圍不同)。
看你過程有數字,只處理分割區,搞到後面還要修開機管理,不該只處理分割區。
要抄過去 整顆抄就好了,有數字代表分割區 /dev/sdc1 /dev/sde1 沒數字就是整顆。
用 dd 將 /dev/sdc 整個 clone 到 /dev/sde 就好了,就不會漏掉。
便宜複製吐司機或是硬碟軟體複製遇到不認識的磁區,都是放大絕招用dd的軌軌複製方式。
再生龍內的最後殺招也是 dd