如果不重新安裝 grub2,Clonezilla 複製將無法啟動
我已經複製了一台具有以下分區的機器:
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,所以我認為這可能不是罪魁禍首。(我不確定這里或超級使用者是否更適合這個問題,我很高興它被適當地遷移。)
最後,我通過對原始機器的引導分區進行分區複製並將其安裝在其他機器上並使用從高級選項中選擇的“-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
這是一種無需啟動到 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/