
我正在嘗試將/boot
資料夾從/
分區移動到/dev/sdb
.以下腳本:
parted -s /dev/sdb mklabel msdos mkpart primary ext2 1M 100% set 1 boot on
mkfs.ext2 /dev/sdb1
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
cd /boot
find . -depth -print0 | \
cpio --null --sparse --make-directories --pass-through --verbose /mnt/boot
cd /
umount /mnt/boot
mv /boot /boot.orig
mkdir /boot
echo "/dev/sdb1 /boot ext2 ro 0 2" >>/etc/fstab
mount /dev/sdb1 /boot
parted /dev/sda set 1 boot off
grub-install /dev/sdb
update-grub
reboot
產生這個錯誤:
error: file '/boot/grub/i386-pc/normal.mod' not found.
grub rescue>
有任何想法嗎?
編輯/boot
:如果原始目錄位於單獨的分區上(例如/dev/sda2
),上面的腳本似乎可以正常工作。只有當它與/
分區 ( )位於同一分區時,它才會失敗/dev/sda1
。
我在 Ubuntu 13.04 和 Fedora 19 上嘗試了上述腳本的許多變體,但尚未避免該file '/boot/grub/i386-pc/normal.mod' not found
錯誤。
還有其他想法嗎?
答案1
問題是 grub 正在尋找/boot/grub/i386-pc/normal.mod
在新分區上。由於該分割區的根目錄現在已安裝在/boot
,因此該檔案目前位於/grub/i386-pc/normal.mod
新分割區上。您需要重新安裝grub
到該分區,或者作為臨時措施,您可以透過呼叫建立符號鏈接ln -s . /boot/boot
,這將允許在任一名稱下找到該檔案。
答案2
執行“ls”來尋找您的啟動分割區(即新分割區),例如(hdX,Y)。
然後 ls (hdX,Y)/usr/lib/grub/i386-pc
你看到那裡的文件了嗎?
您可能需要使用救援 CD 或 USB 啟動,然後重新安裝 grub。有些東西已損壞。
答案3
發生這種情況是因為在圖像prefix
中硬編碼的變數不再與您的分區佈局相符。您可以暫時手動覆蓋此變數並透過在救援 shell 中執行以下命令來載入 GRUB 一次:core.img
grub-install
set prefix=(hd0,1)/boot/grub
insmod normal
normal
前綴應該是 GRUB 檔案(grub.cfg 等)所在的路徑,通常類似於(hdX,Y)/boot/grub
單一根分割區的情況,或者(hdX,Y)/grub
如果您有專用/boot
分割區。如果是 mdadm 管理的 RAID,則hdX,Y
可能是md/xxx
或mduuid/xxxx...
。
如果一切順利,GRUB 應該能夠加載它的模組並加載它,grub.cfg
並且您應該能夠啟動您的作業系統。啟動後,運行grub-install
以新前綴重新產生 a core.img
(將嵌入到磁碟的 MBR 中)。
更多信息在他們的(可怕的)文件。