Windows+archlinux分区和引导方案

情况一:两系统在不同硬盘,使用GRUB引导(上文默认方案)

分区方案

EFI系统分区:500M
交换分区(Swap分区):等于电脑自身物理内存(比如16G)
根目录分区:剩余全部空间

转换成GPT磁盘

  • 可以用Linux命令parted操作,也可以在Windows下用磁盘管理或者DiskGenius操作

使用cfdisk分区

  • 图形化操作,先创建500M大小的分区,类型选择EFI System Partition,然后选择Write操作写入

  • 再创建4G(示例)大小的交换分区,具体大小自己决定,类型选择Linux Swap,然后选择Write操作写入

  • 最后所有空间给根分区,类型默认为Linux File System,然后选择Write操作写入

  • 选择quit退出

格式化

请把x替换为具体的数字,可以用fdisk -l查看

1
2
3
4
mkfs.ext4  /dev/sdax            #格式化根目录(和home目录)的分区
mkfs.vfat /dev/sdax #格式化efi分区
# mkfs.fat -F32 /dev/sdxn #格式化efi分区(另一种方式)
mkswap /dev/sdxn #初始化 Swap 分区

挂载分区

根据具体系统sdanvme0n输入下列命令

1
2
3
4
5
mount /dev/sda1 /mnt            #先挂载根分区
mkdir /mnt/efi
mount /dev/sda2 /mnt/efi #再挂载efi分区
swapon /dev/sda3 #启用交换分区
df -h #复查分区挂载情况

使用GRUB引导

ntfs-3g可以不装

此时我们应该用过arch-chroot /mnt命令进入了新系统,并安装了os-proberefibootmgrntfs-3g软件包

  • 安装grub,/efi是efi系统分区的挂载点
1
2
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=ARCH --removable
vim /etc/default/grub
  • 进入编辑界面,去掉 GRUB_CMDLINE_LINUX_DEFAULT 一行中最后的 quiet 参数(可选)

  • 这个选项可以更改主题:GRUB_THEME="/usr/share/grub/themes/Yunli/theme.txt",请进入系统桌面环境后再操作

  • 为了引导windows,则还需要添加新的一行GRUB_DISABLE_OS_PROBER=false,或者在最后一行去掉GRUB_DISABLE_OS_PROBER=false前的#

  • 最后重新生成grub配置文件

1
grub-mkconfig -o /boot/grub/grub.cfg

如果重启界面看不到Windows,则进入系统后挂载windwos硬盘并重新行该命令,再重启即可

如果重启后看不到GRUB,请到UEFI固件设置更改启动顺序

情况二:两系统在不同硬盘,使用systemd-boot引导

分区方案

EFI系统分区:1G
交换分区(Swap分区):等于电脑自身物理内存(比如16G)
根目录分区:剩余全部空间

转换磁盘挂载分区部分与上面相同

使用systemd-boot引导

警告:请确保启动方式是UEFI模式

此时我们应该用过arch-chroot /mnt命令进入了新系统,且efi系统分区在/efi目录

使用bootctl命令将systemd-boot安装到ESP,并启动自动更新服务

1
2
bootctl install
systemctl enable systemd-boot-update.service

先编辑/efi/loader/loader.conf

1
vim /efi/loader/loader.conf

加入以下内容,默认启动选项配置是arch.conf

1
2
3
4
default  arch.conf
timeout 4
console-mode max
editor no

然后把/boot内的镜像复制到/efi

1
cp /boot/* /efi/ 

产生两个配置文件/efi/loader/entries/arch.conf/efi/loader/entries/arch-fallback.conf

假设你的分区是单根分区,且是ext4格式,可以用下面的命令生成这两个文件

1
2
3
4
grep -v UUID /usr/share/systemd/bootctl/arch.conf > /efi/loader/entries/arch.conf
echo options root=$(cat /etc/fstab | grep ext4 | awk '{ print $1 }') rw >> /efi/loader/entries/arch.conf
grep -v UUID /usr/share/systemd/bootctl/arch.conf > /efi/loader/entries/arch-fallback.conf
echo options root=$(cat /etc/fstab | grep ext4 | awk '{ print $1 }') rw >> /efi/loader/entries/arch-fallback.conf

接下来微调这两个文件,第二个文件要加上fallback字样,同时要把微码镜像也添加进去,最终两个文件大概长这样(这里是zen内核的例子)

1
2
3
4
5
6
7
8
## This is just an example config file.
## Please edit the paths and kernel parameters according to your system.

title Arch Linux
linux /vmlinuz-linux-zen
initrd /intel-ucode.img
initrd /initramfs-linux-zen.img
options root=UUID=33c6745e-87b1-4663-8a39-a9a82915669d rw
1
2
3
4
5
6
7
8
## This is just an example config file.
## Please edit the paths and kernel parameters according to your system.

title Arch Linux fallback
linux /vmlinuz-linux-zen
initrd /intel-ucode.img
initrd /initramfs-linux-zen-fallback.img
options root=UUID=33c6745e-87b1-4663-8a39-a9a82915669d rw

接下来输入bootctl list可以看到引导菜单的情况

重启进入archlinux,为方便操作,请用su进入root账户

处理windows分区情况

先安装edk2-shell软件包

复制shellx64.efi以便systemd-boot检测到

1
cp /usr/share/edk2-shell/x64/Shell.efi /efi/shellx64.efi

接下来用fdisk -l命令查看windows的efi分区位置,再用blkid命令,看一下这个分区的UUID

重启,引导菜单选择EFI Shell,输入map查看所有分区,找到上一步分区对应的UUID,查看这一行开头的Alias字样后面的内容,例如可能是HD0a65535a1,记下这串字符

重启进入arch,新建/efi/loader/entries/windows.conf,加入以下内容

1
2
3
title   Windows
efi /shellx64.efi
options -nointerrupt -nomap -noversion HD0a65535a1:EFI\Microsoft\Boot\Bootmgfw.efi

保存退出后,输入bootctl list查看引导菜单的情况

重启即可看到这些引导选项

使用bind挂载选项

这样pacman就可以直接更新内核文件并保持EFI系统分区的规划。

1
2
mount --bind /efi /boot
sudo vim /etc/fstab

加入以下内容

1
/efi /boot none defaults,bind 0 0

情况三:两系统在同一块硬盘,使用GRUB引导

跟情况一的区别:不额外创建efi系统分区,不格式化windows的efi分区,直接挂载至/mnt/efi即可,后续步骤相同

情况四:两系统在同一块硬盘,使用systemd-boot引导

分区方案

EFI系统分区:用Windows的
Linux拓展分区(boot分区):1G
交换分区(Swap分区):等于电脑自身物理内存(比如16G)
根目录分区:剩余全部空间

转换成GPT磁盘

  • 可以用Linux命令parted操作,也可以在Windows下用磁盘管理或者DiskGenius操作

使用cfdisk分区

  • 图形化操作,先创建1G大小的分区,类型选择Linux Extended Partition,然后选择Write操作写入

  • 再创建4G(示例)大小的交换分区,具体大小自己决定,类型选择Linux Swap,然后选择Write操作写入

  • 最后所有空间给根分区,类型默认为Linux File System,然后选择Write操作写入

  • 选择quit退出

格式化

请把x替换为具体的数字,可以用fdisk -l查看

1
2
3
mkfs.ext4  /dev/sdax            #格式化根目录分区 
mkfs.fat -F32 /dev/sdxn #格式化拓展分区
mkswap /dev/sdxn #初始化 Swap 分区

挂载分区

根据具体系统sdanvme0n输入下列命令

1
2
3
4
5
6
mount /dev/sda1 /mnt            #先挂载根分区
mkdir /mnt/efi
mount /dev/sda2 /mnt/efi #再挂载efi分区,用Windows的
mount /dev/sda3 /mnt/boot #挂载boot分区
swapon /dev/sda2 #启用交换分区
df -h #复查分区挂载情况

使用systemd-boot引导

警告:请确保启动方式是UEFI模式

此时我们应该用过arch-chroot /mnt命令进入了新系统,且efi系统分区在/efi目录,boot分区在/boot目录

使用命令bootctl,并启动自动更新服务

1
2
bootctl --esp-path=/efi --boot-path=/boot install
systemctl enable systemd-boot-update.service

编辑/efi/loader/loader.conf

1
vim /efi/loader/loader.conf

加入以下内容,默认启动选项配置是arch.conf

1
2
3
4
default  arch.conf
timeout 4
console-mode max
editor no

再产生两个配置文件/boot/loader/entries/arch.conf/boot/loader/entries/arch-fallback.conf

1
2
3
4
grep -v UUID /usr/share/systemd/bootctl/arch.conf > /boot/loader/entries/arch.conf
echo options root=$(cat /etc/fstab | grep ext4 | awk '{ print $1 }') rw >> /boot/loader/entries/arch.conf
grep -v UUID /usr/share/systemd/bootctl/arch.conf > /boot/loader/entries/arch-fallback.conf
echo options root=$(cat /etc/fstab | grep ext4 | awk '{ print $1 }') rw >> /boot/loader/entries/arch-fallback.conf

接下来微调这两个文件,第二个文件要加上fallback字样,同时要把微码镜像也添加进去,最终两个文件大概长这样,跟情况二相同

1
2
3
4
5
6
7
8
## This is just an example config file.
## Please edit the paths and kernel parameters according to your system.

title Arch Linux
linux /vmlinuz-linux-zen
initrd /intel-ucode.img
initrd /initramfs-linux-zen.img
options root=UUID=33c6745e-87b1-4663-8a39-a9a82915669d rw
1
2
3
4
5
6
7
8
## This is just an example config file.
## Please edit the paths and kernel parameters according to your system.

title Arch Linux fallback
linux /vmlinuz-linux-zen
initrd /intel-ucode.img
initrd /initramfs-linux-zen-fallback.img
options root=UUID=33c6745e-87b1-4663-8a39-a9a82915669d rw

接下来输入bootctl list可以看到引导菜单的情况

安装完桌面环境,重启即可看到arch和windows的选项(systemd-boot会自动探测同一esp下windows的efi文件)


Windows+archlinux分区和引导方案
https://rukkhadevata123.github.io/2024/08/25/efi/
作者
Dawn Chirps
发布于
2024年8月25日
许可协议