Boot

如果不重新安裝 grub2,Clonezilla 複製將無法啟動

  • June 23, 2020

我已經複製了一台具有以下分區的機器:

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.maphd0 列出了“sda1”,但是當我安裝複製時,另一台機器的 HD 被檢測為 sda1,所以我認為這可能不是罪魁禍首。

(我不確定這里或超級使用者是否更適合這個問題,我很高興它被適當地遷移。)

最後,我通過對原始機器的引導分區進行分區複製並將其安裝在其他機器上並使用從高級選項中選擇的“-j1”來解決這個問題。

有額外的步驟有點煩人,但至少恢復引導分區的複製只需要幾秒鐘。

解決此問題的工作程序必須在安裝/複製失敗或 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 複製了 OpenSuse Leap 42.2(將筆記型電腦主磁碟遷移到更大的 SSD)。

參考文獻:如何在 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/

引用自:https://unix.stackexchange.com/questions/367185