电脑双系统

本文是给已经安装manjaro的电脑安装win10 2019 LTSC

也适用于双系统情况下win10更新导致系统引导丢失

准备工具:两台电脑(一台用来写入系统镜像,一台是要装系统的电脑),16GB空U盘一个,rufus4.6 启动盘制作工具,win10 2019ltsc(去msdn下载,不要在那些看起来很专业的系统分享网站下,下载下来你会发现里面塞得东西乱七八糟的!!!)

开始之前,特别提醒一下,在制作镜像、调整分区、执行指令的时候一定一定看清你写的跟你要做的是否一致!!!!!!!!!!!!!!!!!!

一、修改BIOS设置

先关闭要安装系统的电脑

开机,进入BIOS(自行百度进入方式,不同型号电脑方式不同)

找到Startup

将UEFI/Legacy Boot改为both

UEFI/Legacy Boot Priority改为UEFI First

CSM Support改为Yes表示启用兼容支持模块

Boot Mode我的是Quick,应该不用动他

然后在Security找到Fast Bios mode 改成disabled

之后按F10保存退出

二、压缩磁盘

因为我之前把电脑磁盘空间都分给manjaro了,故需要压缩一下磁盘,给win10腾出空间

启动并进入manjaro系统

安装gparted磁盘管理工具

1
sudo pacman -S gparted

打开gparted,找到根目录分区,右键选中并调整大小,先不要在调整出的空置区域上建立分区

Q&A:根目录所在分区不让压缩?

因为我们当前系统正在使用这个分区,所以如果你想让它大小变化得通过live USB,通俗点说就是在U盘上面装一份系统,然后先跑那份系统,用U盘上面的系统来调整电脑分区。

制作live USB很简单,下载一个manjaro镜像,用Rufus写入我们准备的U盘,如下图:

关闭要安装系统的电脑,插入写入镜像的U盘,再启动电脑,进入启动项选择界面(自己搜自己的型号怎么进,一般刚打开的时候会在屏幕显示一行小字就是提示你怎么进入那个模式)(进入的时候会响一下,很正常)选择USB开头的那个即可。进去之后直接点左下角菜单,在All applications(所有应用)中找到Gparted,调整分区大小即可,之后直接关机就好

三、安装win10

使用rufus将win10镜像写入U盘,它会自动覆盖掉U盘内原来的manjaro镜像,分区类型选的GPT,因为我的电脑分区类型是GPT。这里是uefi类型,所以刚才我在BIOS那里将UEFI/Legacy Boot改为both

关闭电脑,插入写入镜像的U盘,再启动电脑,进入启动项选择界面(自己搜自己的型号怎么进,一般刚打开的时候会在屏幕显示一行小字就是提示你怎么进入那个模式)(进入的时候会响一下,很正常)选择USB开头的那个即可

选择自定义安装,之后跟着安装程序引导安装即可。

注意一定要选对你安装系统的位置,别给其他分区覆盖掉了,选中刚才的未分配区域(Unallocated),建立新分区,然后在上面安装即可(分区以后还能调,先不急)。Windows 安装程序会自动为你创建必要的分区(如 EFI 系统分区、MSR 分区等),不用管那些分区之后它自己创建的小分区。

安装好之后自行调整肌活,然后建议安装个火绒覆盖掉自带的安全中心。

四、修复引导

1.manjaro引导

安装好win10之后,现在系统启动默认是进入win10系统的,我们需要修改一下引导,让它能进入win10也能进入manjaro,而且要把选择权还给我们。

还按照刚才的方法,将manjaro镜像写入U盘,覆盖掉盘内之前的win10镜像

关闭电脑,开机,进入BIOS,如果进不去,那就进win10,设置(快捷键win+i)-更新和安全-恢复-立即重新启动

之后就能进入高级启动选项界面,选择疑难解答,高级选项,UEFI固件设置就能进入BIOS,进去之后直接F10保存退出,系统再启动的时候按照屏幕小字提醒进入启动项选择界面(刚刚进BIOS就是为了让启动项选择功能可用,如果你有更好的方法,不用按照我这个折腾,我这个电脑有点小bug才这样绕了一圈)

总之选择usb开头的那个,进入U盘内的manjaro系统,使用

1
lsblk

查看磁盘分区状况

找到你manjaro的根分区,和EFI系统分区(先别管windows的)

我的根目录在sda的sda2,挂载他

1
sudo mount /dev/sda2 /mnt

我的efi系统分区是sda1,挂载

1
2
3
sudo mkdir -p /mnt/boot/efi

sudo mount /dev/sda1 /mnt/boot/efi

如果你分不清谁是谁,可以挂载之后用

1
sudo ls 路径

来看看挂上去的那个路径里面是什么东西,挂载错了也没关系,使用

1
umount /dev/sda1

将sda1解除挂载即可

什么?路径里面的文件不认识?没关系,只要记住,根目录里面有/opt /root 什么的,而efi系统分区里面是linux610-x86_64.kver vmlinuz-6.10-x86_64 grub什么的,就行了

挂载好之后,进入chroot环境

1
sudo manjaro-chroot /mnt

安装和更新 GRUB:

1
2
3
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=manjaro --recheck

update-grub

退出并重启:

1
exit
1
reboot

这时候可以将U盘拔出了,我们用不到它了

重启之后进入了一个类似命令行的东西,这是grub的命令行界面。

查找可用分区:

1
ls

尝试查看某个分区的内容,找到包含/boot的分区:

1
ls (hd0,gptX)/

(也可能是hd1或者其他标号,看实际情况)

替换 X 为分区号,找到包含 vmlinuzinitramfs 的分区就是我们要的那个分区,同时也找一下manjaro根目录在哪。

我的vmlinuz和initramfs(后面还有一长串版本号什么的我就省略了)在(hd1,gpt1)/,(hd1,gpt2)是manjaro的根目录

下面我们来手动引导manjaro

  1. 设置根分区:

    1
    set root=(hd1,gpt2)

    你的电脑可能不是hd1,gpt2,按照刚才找的结果来

  2. 加载内核

    1
    linux /boot/vmlinuz-6.10-x86_64 root=/dev/sda2 ro

    (vmlinuz-6.10-x86_64是我电脑上面那个文件名字,按照你刚才看的你电脑那个文件的名字来,这里不带后缀名)

  3. 加载初始化内存盘:

    1
    initrd /boot/initramfs-6.10-x86_64.img

    也是按照你自己的文件名改一下

  4. 启动系统

    1
    boot
  5. 进入系统后打开终端,执行:

    1
    2
    3
    sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=manjaro --recheck

    sudo update-grub

2.Windows引导

首先,检查GRUB是否正确识别了Windows的EFI分区:

1
sudo ls /boot/efi/EFI/Microsoft

编辑GRUB配置文件:

1
sudo nano /etc/default/grub

确保有以下设置:

1
2
3
GRUB_TIMEOUT=5

GRUB_DISABLE_OS_PROBER=false

确保已安装os-prober:

1
sudo pacman -S os-prober

挂载Windows EFI分区(如果未挂载):

1
2
3
sudo mkdir -p /mnt/windows-efi

sudo mount /dev/sda4 /mnt/windows-efi

重新生成GRUB配置:

1
2
3
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

sudo update-grub

如果sudo ls /boot/efi/EFI/Microsoft执行之后提示没有这个文件或目录的话执行下面这几步:

检查EFI分区的挂载状态:

1
mount | grep efi

如果mount | grep efi执行后只显示efivarfs on /sys/firmware/efi/efivars type efivarfs(rw,nosuid,nodev,noexec,relatime)

说明EFI分区未挂载,

执行以下命令查看分区情况:

1
sudo fdisk -l

特别关注标记为”EFI System”或”EFI”的分区。我的电脑是sda4。

创建挂载点并挂载EFI分区:

1
2
sudo mkdir -p /boot/efi
sudo mount /dev/sda4 /boot/efi

验证挂载是否成功:

1
2
mount | grep efi
ls /boot/efi

如果挂载成功,查看EFI目录内容:

1
ls /boot/efi/EFI

执行ls /boot/efi输出Boot/ Microsoft/说明EFI分区已经正确挂载了

接下来修改一下grub:

  1. 首先确保GRUB配置文件正确:
1
sudo nano /etc/default/grub

确保有这些设置:

1
2
GRUB_TIMEOUT=5
GRUB_DISABLE_OS_PROBER=false
  1. 确保os-prober已安装:
1
sudo pacman -S os-prober
  1. 重新安装并配置GRUB:
1
2
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
sudo update-grub
  1. 为了确保EFI分区在系统启动时自动挂载,编辑/etc/fstab文件:
1
2
sudo blkid | grep sda4  # 获取EFI分区的UUID
sudo nano /etc/fstab

在/etc/fstab末尾添加(使用实际的UUID替换下面的UUID):

1
UUID=你的EFI分区UUID  /boot/efi  vfat  defaults,noatime  0  2

完成后重启系统,应该能看到正常的启动菜单,且Windows能够正常启动。

TIPS:

fstab中倒数第三个选项是挂载参数:

  • defaults,noatime

    • defaults 包含了 rw(读写), suid, dev, exec, auto, nouser, async 等基本选项
    • noatime 禁止更新文件的访问时间,可以提升一些性能
  • umask=0077

    • 这个设置更严格的权限控制,只允许root用户访问
    • 对EFI分区来说是更安全的选项