Archlinux双系统引导

➜ lsblk
sda       8:0    0 698.7G  0 disk
├─sda1    8:1    0   512M  0 part /boot/efi
.....
➜ tree -C -l /boot
/boot
├── efi
│   └── EFI
│       ├── Arch
│       │   └── grubx64.efi
│       ├── debian
│       │   └── grubx64.efi
│       ├── Microsoft
│       │   ├── xxxxxxxx.efi(Win默认引导)
│       │   └── xxxxxxxx
│       └── Boot
│            └── bootx64.efi(Win)
├── grub
│   ├── fonts
│   │   └── unicode.pf2
│   ├── grub.cfg
│   ├── grub.cfg.example
│   ├── grubenv
│   ├── locale
│   │   ├── xxxxx.mo
│   │   └── xxxxx.mo
│   ├── themes
│   │   └── starfield
│   │       └── xxxxxxxx
│   └── x86_64-efi
│        ├── xxxxx.mod
│        └── xxxxx.mod
├── initramfs-linux-fallback.img
├── initramfs-linux.img
└── vmlinuz-linux
  1. 先前的引导安装:
- pacman -S grub efibootmgr os-prober dosfstools
- grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Arch --recheck
- grub-mkconfig -o /boot/grub/grub.cfg
  1. hd从0开始,gpt从1开始。

  2. /etc/grub.d/10_linux会自动为Arch生成启动项
    其他系统手动在/etc/grub.d/40_customs或/boot/grub/custom.cfg添加
    运行grub-mkconfig后这些文件的启动项会被自动添加到/boot/grub/grub.cfg中

  1. 在不安装windows时。
    安装完Archlinux,安装Debian时,我貌似安装了os-prober会自动查找引导?(时间太久忘了..
    最后Debian又自己给我生成了grub,还能用(真是省心

后来我又在手动添加了Debian条目。

➜ sudo vim /boot/grub/grub.cfg
menuentry "Debian"{
set root='hd0,gpt1'
chainloader /EFI/debian/grubx64.efi
}
  1. 系统默认启动的是Arch的grubx64.efi,包含arch启动项和 手动添加的Debian启动项。
    启动选择其中的Debian条目,就会调至Debian的grubx64.efi。
    其实EFI分区包含了有2个grub
  1. 我的电脑Windows和ArchLinux安装完后(不分先后),系统会默认启动Window。
    我看了下,MY电脑上的UEFI启动没有‘从硬盘启动’这个选项,只有’从操作系统管理员启动‘这个选项,而bios启动却有‘从硬盘启动’这个选项(看来windows和pc厂商有一腿啊

/EFI/Boot/bootx64.efi是Win引导,但没卵用。
那么UEFI的实际加载路径是/boot/efi/EFI/Microsoft/windows的一个引导文件(我忘了是什么了..

  • 还是先备份下windows的引导文件
  • 把arch的引导文件重名为windows的引导文件名,移到win的地方
  • 在grub.cfg里添加win的启动项就ok了
➜ sudo vim /boot/grub/grub.cfg
menuentry "What a Fuck Win8.1"{
    set root='hd0,gpt1'
    chainloader /EFI/Boot/bootx64.efi
}

如果‘从硬盘启动’,系统加载的应该是/boot/efi/EFI/Boot/bootx64.efi这个。

其实引导被覆盖的也是/boot/efi/EFI/Boot/bootx64.efi这个文件。

多系统争夺的也只是/boot/efi/EFI/Boot/bootx64.efi这个文件而已。

而当UEFI只有’从操作系统管理员启动‘,直接加载了Win下的自己的引导,绕过了它们,简直机智。

添加 win 8.1启动项:

  • UEFI:
    拷贝 Microsoft引导文件 到 /boot/efi/EFI/ 目录下。
#vim /boot/grub/grub.cfg
menuentry 'windows8' {
insmod part_gpt
  insmod chain
  set root='(hd0,gpt2)'
  chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
  • BIOS+MBR启动:
menuentry 'Windows8 ' {
insmod ntfs
set root='(hd0,msdos3)'
search --no-floppy --fs-uuid --set=root 你的硬盘UUID
chainloader +1}

UUID 查看:

#ls -l /dev/disk/by-uuid

你可能感兴趣的:(Archlinux双系统引导)