一、环境介绍
UEFI-GPT
arch linux
/dev/sdb

BIOS-MBR
win7
/dev/sda

二、GHOST WIN7后现象:
ARCH LINUX已无法引导,无法找到系统。哪怕是把安装WIN7的SATA硬盘禁用掉,ARCH LINUX也无法引导启动。
WIN7系统无论从哪块硬盘都可以引导启动。(非常奇怪。GHOST的时候是在BIOS里面禁用ARCH LINUX所在SATA硬盘的)

三、排错过程
1、用ARCH LINUX安装U盘引导UEFI模式,进入arch emergency shell
查看磁盘分区信息
lsblk -f
直接挂载
mount /dev/sdb3 new_root
mount /dev/sdb1 /boot
安装GRUB
grub-install –target=x86_64-efi –efi-directory=/boot –bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

2、如果进入的是GRUB>提示符模式,请按如下操作恢复引导
find (hd1,0)/vmlinuz-(找到内核所在分区。按TAB键补齐命令,若能补齐命令,则内核在此分区)
root (hd1,0)
kernel /vmlinuz-按TAB键补齐命令
initrd /initramfs-按TAB键补齐命令
boot
或者
set root=(hd1,2)
linux (hd1,0)/vmlinuz-按TAB键补齐命令 root=/dev/sdb3
initrd (hd1,0)/initramfs-按TAB键补齐命令
boot

进入系统后
查看磁盘分区信息
lsblk -f
mount /dev/sdb3 /mnt/
mount /dev/sdb1 /mnt/boot
arch-chroot /mnt
重装GRUB
grub-install –target=x86_64-efi –efi-directory=/boot –bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
reboot

—————-
错误的步骤:
EASYbcd安装WINPE双系统引导程序
a、添加新条目——操作系统——LINUX/BSD——添加条目
b、编辑引导菜单——USE METRO BOOTloader(去掉打勾选项)——保存设置
重启电脑,卡在GRUB>提示符,因为BIOS未强制使用UEFI引导,所以efivar-tester的时候报错UEFI variables not supported on this machine
截止此处已无解。毕竟ARCH LINUX是在UEFI+GTP下面安装使用的,而WINDOWS是BIOS+MBR。

===========================
PS:创建ARCH安装U盘
1、找到U盘的盘符
lsblk -f
2、若U盘自动挂载了,请卸载
umount /xxx/udisk
3、做启动U盘
sudo dd bs=4M if=/home/xxx/Downloads/archlinux-2020.02.01-x86_64.iso of=/dev/sdc status=progress && sync

————-
BTW:双系统引导菜单
所有版本的 Windows 都不支持 BIOS 引导 GPT 分区上的 Windows 或 UEFI 引导 MBR 分区上的 Windows.目前官方 (Microsoft) 没有在 UEFI-MBR 或 BIOS-GPT 上运行 Windows 的方法.因此 Windows 只支持 UEFI-GPT 或 BIOS-MBR 启动.参阅 http://support.microsoft.com/kb/2581408
安装在 BIOS 模式下的 Arch Linux 的启动管理器也无法加载位于另一个 UEFI-GPT 硬盘上的 Windows.反之亦然

win7菜单引导archlinux
arch linux shell
dd if=/dev/sdb1 of=/mnt/archboot.bin bs=512 count=1

win7 cmd
新建启动菜单,生成{ID}
bcdedit /create /d “arch” /application bootsector
bcdedit /set {ID} device partition=c:
bcdedit /set {ID} path c:\archboot.bin
加入启动菜单
bcdedit /displayorder {ID} /addlast
bcdedit /timeout 3
删除启动菜单项
bcdedit /delete {ID}

————-
若想ARCH自动生产GRUB双系统引导菜单,就使用如下命令
pacman -S os-prober
mount /dev/sda1 /mnt
os-prober
grub-mkconfig -o /boot/grub/grub.cfg

若不想安装os-prober,那么就直接编辑GRUB菜单
vi /boot/grub/custom.cfg

if [ “${grub_platform}” == “pc” ]; then
menuentry “Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR” {
insmod part_msdos
insmod ntfs
insmod ntldr
search –no-floppy –fs-uuid –set=root –hint-bios=hd0,msdos1 –hint-efi=hd0,msdos1 –hint-baremetal=ahci0,msdos1 XXXXXXXXXXXXXXXX
ntldr /bootmgr
}
fi

XXXXXXXXXXXXXXXX是指文件系统的 UUID,可以通过 lsblk –fs 命令查看,或者用blkid查看