我克隆了一台具有以下分區的機器:
Device Type Label
/dev/sda
/dev/sda1 Ext4 boot
/dev/sda2 Linux LVM
/dev/system/ LV system
/dev/system/home LV home
/dev/system/root LV root
/dev/system/swap LV swap
這些由標籤引用
/etc/fstab:
LABEL=root / ext4
LABEL=boot /boot ext4
LABEL=home /home ext4
LABEL=swap /swap swap
和 grub.cfg:
menuentry 'openSUSE, with linux <version>' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-<version>-simple-<UUID>' {
insmod ext2
set root='hd0,msdos1'
linux /vmlinuz-<version> root=/dev/mapper/system-root resume=/dev/disk/by-label/swap <other options>
initrd /initrd-<version>
}
我正在嘗試在另一台相同的計算機上安裝此克隆。安裝成功,但如果不在 grub 提示字元中執行以下操作,我將無法啟動電腦:
grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-<version> root=/dev/sda1
grub> initrd /boot/initrd.img-<version>
grub> boot
我更願意獲得不需要這些步驟的映像,但我不確定問題出在哪裡(grub 配置、其他系統檔案、clonezilla)。到目前為止我嘗試過的事情:
- 編輯 /etc/defaults/grub 並取消註解“
GRUB_DISABLE_LINUX_UUID=true
” - 編輯 grub-mkconfig_lib 以註解掉這些行,以
search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}
防止在產生 grub.cfg 時新增它們 - (並重新生成
grub.cfg
) - 選擇高級clonezilla安裝並告訴它之後重新安裝MBR(選項-j1。選項-g auto「在客戶端磁碟MBR中重新安裝grub」已預設選取)
我還可以嘗試其他事情嗎?
我確實注意到/boot/grub2/device.map
hd0 列出了“sda1”,但當我安裝克隆時,另一台機器的 HD 被檢測為 sda1,所以我認為這可能不是罪魁禍首。
(我不確定這裡或超級用戶是否更適合這個問題,我很高興它能夠適當地遷移。)
答案1
最後,我透過對原始電腦的引導分區進行分區克隆並使用從高級選項中選擇的“-j1”將其安裝在其他計算機上來解決此問題。
額外的步驟有點煩人,但至少恢復啟動分區的克隆只需要幾秒鐘。
答案2
解決此問題的工作流程是,在安裝/複製失敗或 MBR 磁碟損壞後,我們必須手動安裝 GRUB(2)。
現在,重新啟動後,讓我們修復 grub 引導:
sh:grub>set pager=1 # for paging long command outputs; There must be no spaces on either side of the equals sign.
grub> set root=(hd0,XY)
'grub> insmod /boot/grub/linux.mod # AFAIK, optional step
grub> linux /boot/vmlinuz-4.4.92-36-default root=/dev/sdaXY
grub> initrd /boot/initrd.img-4.4.92-36-default
grub> boot
成功啟動 Linux 後,讓修復永久生效:
# update-grub
# grub-install /dev/sda #or what ever your system disk is
如果出現錯誤update-grub command not found
不用擔心,這只是一個 shell 腳本,旨在讓事情變得更容易。實際上,它確實:
set -e
exec grub2-mkconfig -o /boot/grub/grub.cfg "$@"
運行 grub-install 後...您的系統應該會恢復正常。我使用 Clonezilla 2016-02-10(將主筆記型電腦磁碟遷移到更大的 SSD)透過克隆的 OpenSuse Leap 42.2 完成了此操作。
參考文獻:如何在 Linux 上拯救無法啟動的 GRUB 2
在 Ubuntu 上修復損壞的 GRUB 2 開機載入程序
這是一種無需啟動 Linux 即可運作的替代方法:
$ sudo fdisk -l (From this you need to find the device name of your physical drive that won't boot, something like “/dev/sdxy″ - where x is the drive and y is the root partition. Since I was using a software RAID, root (/) was on md1)
$ sudo mount /dev/sdxy /mnt (Mount the root partition)
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys
$ sudo chroot /mnt (This will change the root of executables to your your drive that won't boot)
$ grub-mkconfig -o /boot/grub/grub.cfg (insure that there are NO error messages)
$ grub-install /dev/sdx (NOTE that this is the drive and not the partition. try grub-install --recheck /dev/sdxy if it fails)
Ctrl+D (to exit out of chroot)
$ sudo umount /mnt/dev
$ sudo umount /mnt/proc
$ sudo umount /mnt/sys
$ sudo umount /mnt
參考:http://redsunsoft.com/2016/06/how-to-repair-a-server-stuck-at-the-grub-prompt/
答案3
長話短說
在安裝在 GPT 上的 Ubuntu 上,登入系統後使用 BootRepair。
和@jam有同樣的問題,但就我而言,我有:
- Ubuntu 16.04,我想克隆
- 來源磁碟(HDD,500 GB)
- 膜生物反應器
- Windows 雙啟動
- 目標磁碟(SSD,256 GB)
- GPT
因此,我/home
使用 Clonezilla 僅克隆了 linux 分割區(sda5 - 用於系統,sda6 用於),而不是整個磁碟。
為了實現這一點,我在 SSD 上安裝了clear ubuntu,像在 HDD 上建立分割區一樣建立分割區,並新增了 ESP(EFI 系統分割區)。然後我用 Clonezilla 覆蓋這個分割區(HDD 分割區到 SSD)。結果,我得到了 GRUB 提示符。
然後我做了
grub> set root=(hd0,gpt2) # NOTICE: used gptX instead of simple number
grub> linux /boot/vmlinuz-<version> root=/dev/sda1
grub> initrd /boot/initrd.img-<version>
grub> boot
正如@jam 和@wp78de 所建議的(他的參考文獻中也提到了這一點)。
然後我做了update-grub
並堅持grub-install
錯誤
grub-install: error: will not proceed with blocklists
原因在於 GPT。裡面有一些有用的東西這線程,但最簡單的方法是使用啟動修復。我不知道 BootRepair 是否執行了一些特殊工作,但我檢查了重新安裝 GRUB,現在一切正常!
答案4
我在 MBR 啟動方面遇到了完全相同的問題(Centos 7) - 無論我在磁碟、分區、Clonezilla 版本等方面嘗試過什麼 - 最後我購買了線程前面引用的 PartedMagic ISO - 儘管它使用了CLonezilla - 顯然,它在過程結束時發揮了一些魔力,因為克隆磁碟無需手動幹預即可啟動。
克雷格