双系统引导
2018-09-14 本文已影响49人
理子
➜ 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
- 先前的引导安装:
- 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
-
hd从0开始,gpt从1开始。
-
/etc/grub.d/10_linux会自动为Arch生成启动项
其他系统手动在/etc/grub.d/40_customs或/boot/grub/custom.cfg添加
运行grub-mkconfig后这些文件的启动项会被自动添加到/boot/grub/grub.cfg中
- 在不安装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
}
- 系统默认启动的是Arch的grubx64.efi,包含arch启动项和 手动添加的Debian启动项。
启动选择其中的Debian条目,就会调至Debian的grubx64.efi。
其实EFI分区包含了有2个grub
- 我的电脑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