Windows+Arch Linux双系统基本安装

2025年2月10日在VMware Workstation 17上测试,暂未将配置搬上物理机,但是步骤是相同的。

只介绍UEFI/GPT启动方式,不建议在BIOS/MBR平台上安装双系统,引导项极易打架;
(不过虚拟机单Linux安装的话BIOS/MBR分区简单很多)

本文引用ArchWiki链接时同时提供中文和英文链接,建议优先阅读英文版,中文翻译可能存在滞后性;

1. 准备工作

(1)检查是否为UEFI启动:

Win11仅支持UEFI启动,无需检查;
开箱状态下为预装Win10,或者空盘安装Win10的通常也是UEFI启动;
只有从Win7升级上Win10的,传统BIOS启动的概率才比较大。

按下Win+R组合键,输入msinfo32确定,在打开的窗口中找到BIOS模式一条,若为UEFI则是UEFI启动,若为Legacy则是传统BIOS启动。

如果是传统BIOS启动的话,理论上进入PE环境下,把硬盘分区表从MBR转为GPT,划分一个EFI分区出来,再修复一下引导,就能无损转换;如果没有重要的数据,还是重装更方便吧

(2)介质准备:

物理机安装需要一枚容量至少2GB的U盘,建议4G以上;支持USB3.0以上速率的最好,没有问题也不大。

务必备份好U盘的资料,U盘在稍后将被格式化;

(3)检查bitlocker状态:

双系统平台上个人强烈不建议使用bitlocker。
检查bitlocker状态的最简单的方法是打开“此电脑”,观察硬盘图标。
如下图所示,有加密的磁盘会在图标右侧显示出锁的标志,就像图中D盘这样;未加密的则会像图中C盘这样;

如果一定需要bitlocker加密硬盘,为了减少麻烦,建议留一个未被加密的分区,用于在双系统间共享数据;并且请提前根据Windows官方文档备份bitlocker恢复密钥

关闭bitlocker的方式:

  1. 在开始菜单中搜索bitlocker:
  2. 点击关闭即可:

bitlocker解密可能会花费极长时间(数个小时);在此期间不影响电脑正常使用,所以可以继续执行其它准备工作,但是在彻底解密完成之前最好不要关机。
解密的过程中应该是有进度条的,但也可以通过命令行检查解锁的进度:

使用管理员权限打开命令提示符或者Powershell。

cmd输入:

1
manage-bde -status

输出类似这样(关键词:转换状态:完全解密 已加密百分比:0.0%)说明完全解密了:


Powershell输入:

1
Get-BitLockerVolume

输出类似这样(关键词:FullyDecrypted Encryption Percentage 0)说明完全解密了:

(4)下载:

  1. archlinux官网 下载系统镜像。
    站点提供bt种子下载和镜像站下载,若通过镜像站下载,则推荐校验sha256与pgp签名;

    如果有一个能运行bash的环境,例如Git Bash,进入bash,执行如下命令:

    1
    sha256sum /path/to/***.iso

    如果没有,进入cmd,执行如下命令:

    1
    certutil -hashfile /path/to/***.iso sha256

    将输出与arch官网对比,一致说明文件完好无损;

    如果有一个能运行bash的环境,例如Git Bash,进入bash,直接复制Arch官网的命令(以2025.01.01版为例):

    1
    2
    gpg --auto-key-locate clear,wkd -v --locate-external-key pierre@archlinux.org
    gpg --keyserver-options auto-key-retrieve --verify archlinux-2025.01.01-x86_64.iso.sig archlinux-2025.01.01-x86_64.iso

    输出类似这样(注意高亮的地方)说明签名一致,镜像未被篡改:

    如果没有bash环境,可以尝试Gpg4win

  2. 下载刻录U盘的工具,强烈推荐Ventoy ,想在安装的时候使用图形化分区工具偷懒的话这是唯一的选择;
  3. 图形化分区工具gparted

    gparted的镜像托管在sourceforge网站上面,国内的网络环境可能会遇到下载不畅的情况;这里给出3条替代的方案:

    1. 使用WiFi的不推荐此方案(U盘容量要求从2GB提升到4GB)从 Debian国内镜像 下载一个最简镜像(无桌面的 debian-live-12.9.0-amd64-standard.iso大小1.4GiB),然后启动进去后使用apt工具安装gparted和一个最简单的桌面(需要联网,有线网和虚拟机通常开箱即用,无线网由于debian live里面没有提供iwctlnetworkmanager,未找到合适的联网方式);
    2. (U盘容量要求从2GB提升到4GB)下载一个 XUbuntu 的minimal版镜像(24.04版 清华源 / USTC源 ),该版本大小2.47GiB,为”有国内下载源”的,”带桌面环境和gparted”的Linux镜像中最小的;
    3. 放弃使用gparted图形化分区工具偷懒,走正统的ArchLinux分区方式(fdisk/cfdisk),新手谨防在命令行中误操作导致数据损失

(5)关闭Windows快速启动

详细信息参考 ArchWiki / 中文Wiki
快速启动会导致Windows关机的时候实质变成进入休眠状态,这样在Linux开机的时候就不能挂载已经在Windows中被挂载的硬盘,否则会导致文件系统错误;
同样,如果手动休眠了双系统中的任意系统,然后启动了另一个系统,那么在休眠的系统中已经被挂载的硬盘,不应该被挂载在另一个系统上;如果担心自己误操作,同样可以禁用Windows的休眠功能。
虽然ArchWiki指出:

如果 Windows 和 Linux 使用同一个 EFI 系统分区,如果休眠(或在启用快速启动时关机)Windows 并启动 Linux,或者休眠 Linux 并启动 Windows, EFI 系统分区可能遭到破坏。

但是咱这么干过,EFI分区没出问题;只是在Linux上面挂载的Windows硬盘出现了文件系统错误,需要在Windows上使用chkdsk修复

  1. 进入控制面板;如果找不到入口,使用开始菜单中的搜索功能;然后选择电源选项:
  2. 左侧的选择功能任选一个进入:
  3. 更改当前不可用的设置,然后取消勾选“启用快速启动”;休眠是否关闭随意,不过感觉笔记本用户应该不需要休眠?最后记得保存修改。

(6)将Windows的硬件时间标准改为UTC

在任意位置新建任意文本文档,输入以下内容:

1
2
3
4
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001

将后缀从.txt改为.reg双击执行导入注册表。

硬件时间标准目前有两套方案:

  1. Local-RTC: 直接把硬件时间设为本地时间,然后系统显示的时间与硬件时间同步;
  2. UTC: 把硬件时间固定设为UTC时间,然后系统根据时区设置,将硬件时间转换为本地时间。

Windows默认使用1,而Linux默认使用2,两者必须统一否则硬件时间会乱套;
对于Ubuntu等常见的发行版,其会在检测到硬盘存在Windows时,自动将Linux的时间标准也改成1,从而避免修改Windows注册表;
ArchWiki / 中文Wiki 更建议将Windows设为2,这样的目的主要是为了在使用夏令时/冬令时的时区,切换时同步次数混乱,导致时间快/慢1小时;
对北京时区来说无影响,但是如果将Linux的时间标准设为1,Linux的时间管理进程会给出警告,并采取较为消极的联网时间同步策略。
所以咱觉得还是统一为UTC更好。

(7)了解至少一种命令行文本编辑器的使用方法

ArchLinux的安装镜像里面提供了3种文本编辑器,分别是 mcedit , nanovim 。至少了解其中一种的使用方式,推荐vim,下文的安装教程中,需要编辑文件时,咱会给出咱偏好的vim操作。

(8)为Linux系统腾出一块空闲的硬盘分区

按下Win+X组合键,选择磁盘管理。
采用Windows和Linux装在同一块硬盘上不同分区,然后共享EFI分区的方案。
这里以虚拟机中新安装的Windows10 22H2版为例,如果分了C和D两个分区,分区结构应该类似左图;在D盘上右键压缩卷,腾出一定数量的空闲空间给Linux使用,不要新建分区,不要格式化。

实际分区的情况可能存在差异;例如:

  1. Win10 LTSC 2019 的恢复分区会在硬盘的开始而非末尾;
  2. Win10 LTSC 2021 没有恢复分区;
  3. 对于部分使用过一段时间的设备,以及一些出厂预装Windows的设备,如果已经提前分过了区,可能C盘和其它数据分区中间会间隔另一个恢复分区。

建议至少留出一个非系统分区作为双系统间共享数据的分区,防止在Linux直接挂载Windows系统盘时因为误操作或者Linux的灵车NTFS驱动导致损坏Windows系统;
如果有多块硬盘,直接拿其它硬盘共享也行,否则最好分一下CD两个分区,D盘作为共享数据盘。

无论实际的分区情况是什么,如果硬盘最后有恢复分区,就把Linux占据的分区放在恢复分区的前面;否则把Linux放在硬盘的末尾。这样做的考量有:

  1. 减少对Windows磁盘的操作:从数据盘右侧压缩一块分区出来,使用自带的磁盘管理就能完成,速度快还能减少数据损失的风险;

  2. 调整容量方便:考虑3种需要调整分区大小的情况:

    1. Windows的C盘/数据盘空间不足:直接用Diskgenius等分区工具从数据盘/C盘拿空间,不操作Linux分区;
    2. Windows空间不足:向右缩小Linux分区;
    3. Linux空间不足:向左缩小Windows分区;

    这三种情况都能最大限度的减小操作成本。

(9)刻录启动U盘

解压ventoy,启动ventoy2disk.exe
插入准备好的U盘,选择该U盘,分区表选择GPT(对UEFI的兼容性更好),格式随意,点击安装;

将会清空U盘上的所有数据!

然后将archlinux和gparted的两个iso文件都直接放进U盘即可。

(10)准备BIOS

重启计算机,进入bios,关闭安全启动(Secure Boot): archlinux并不支持安全启动,如果确实需要这个功能,请在安装完archlinux之后,参考 ArchWiki / 中文Wiki 自己准备签名文件自行配置(属高阶操作,不介绍,因为咱也不会)

如果Windows系统盘开启了bitlocker,在关闭安全启动后,重启进入Windows时可能会要求输入bitlocker密钥。

2. 分区

这里使用前述准备好的GParted工具进行分区,图形化操作的好处是不易误操作;
在ArchLinux命令行中分区的直接进入下一步

(1)启动进入GParted界面

  1. 关闭电脑,然后重新开机并从U盘启动(根据电脑品牌,进入启动菜单boot menu的按键可能是F12,Delete,Esc或者其它)。

    部分设备开机状态直接重启可能无法在启动菜单中正确识别到U盘,所以建议是使用关机再手动开机的方式。

  2. 在Ventoy操作菜单中,选择gparted的镜像,然后Boot in normal mode即可:
  3. 选择gparted的启动选项:

    如果启动界面是这样的,说明进BIOS模式了,没进UEFI:

    通常来说,默认选择第一项就行;
    如果对U盘的稳定性没有信心,选择第2项,将GParted加载进内存再运行,启动时间会稍慢一些,但是运行更稳定。
  4. 接下来依次处理几个选单:
    1. 键盘布局,直接默认,回车:
    2. 语言,输入26以选择简体中文,回车:
    3. 图形选项,直接默认启动图形界面,回车:

      稍微等待片刻之后就进入了gparted的图形界面。
  1. 启动镜像后选择live system(amd64);
  2. 给apt换源,并且注释掉不需要的源节约时间:
    1
    sudo vi /etc/apt/sources.list
    修改前:

    修改后:

    小声bb: vi真的别扭,但是又没有vim;实在不行用nano吧
    然后更新apt缓存:
    1
    sudo apt update
  3. 安装xinit和一个轻量的窗口管理器(这里以openbox为例),以及gparted本身:
    1
    sudo apt install xinit openbox gparted
    小声bb:Arch你学学人家,Debian的live环境就能自己装个图形界面进去,Arch的live环境装个xorg-server就空间不足,要不然哪需要这么折腾
  4. 启动图形界面:
    1
    startx
    黑屏是正常的,有鼠标显示出来就行
    不需要显式指定启动openbox,debian会帮你配置好默认的启动目标的
  5. 在任意位置右键,就能找到gparted的入口,点开就行:
  6. 完成分区后右键Exit退出桌面环境,然后关机:
    1
    sudo poweroff
  1. 启动镜像后选择Try or Install Xubuntu
  2. 点击左上角找到gparted:

(2)在GParted中完成分区

在空闲部分从左到右建立3个分区:

大小 格式化为 挂载点
除下面两个分区外的所有空间 btrfs /
适量,这里示例2G linux swap [SWAP]
1G ext4/fat32 /boot

  1. 主目录使用btrfs: btrfs具有很多优良的性质:透明压缩(节省空间),子卷(把根目录和home直接用子卷管理,既能隔离,又防止出现系统分区和home分区一个容量不够的时候从另一个分区挪的尴尬),快照(图形化快照工具timeshift除了基于全盘复制的RSYNC之外,只支持创建btrfs文件系统的快照)
    btrfs的介绍可以参考这篇文章 ,原文使用CC BY-SA 4.0 许可,因此不作引用;
  2. 使用swap分区而非swap文件:swap分区配置起来相对更加简便,如果需要配置休眠,swap分区的配置难度更低;
  3. /boot目录单独分区:咱希望安装完双系统之后,每次开机时grub引导可以记住咱上一次选择的选项,而grub无法写入btrfs格式的分区;
    如果/boot目录不单独分区,也有一条好处:快照可以把/boot目录包含进去,回滚时可以一起回滚,防止出现/boot分区内的initramfs的内核版本与系统内核版本不匹配; 这会导致回滚快照后/boot分区无法挂载,进入emergency mode的问题。按照现行的分区方案,以后配置快照的时候需要单独考虑一下这个问题,到那时再说
  4. 关于/boot分区的格式:fat32理论上具有更好的兼容性,而ext4更多的其实是防止隔壁的Windows乱来
  5. 咱习惯安装3份内核,在安装了linux-firmware固件包后,默认状态下,在虚拟机中每份内核会在/boot分区产生约100~150MB的initramfs镜像,物理机由于autodetect机制会探测到比虚拟机更多的硬件,这个数值会略大一点;但是1GB也完全够用了。如果根据ArchWiki /中文Wiki 的方法把压缩开到最极端,占用的总空间会从约450MB下降到约320MB,似乎意义并不大。

然后确认,等待分区完成。最终的情况应该是这样的:

设备名 分区描述 文件系统 挂载点
/dev/nvme0n1p1 EFI分区 fat32 /efi
/dev/nvme0n1p2 MSR分区 msr
/dev/nvme0n1p3 Windows C: ntfs
/dev/nvme0n1p4 Windows D: ntfs
/dev/nvme0n1p6 Linux系统盘 btrfs /
/dev/nvme0n1p7 Linux swap swap [SWAP]
/dev/nvme0n1p8 Linux boot ext4 /boot
/dev/nvme0n1p5 Windows恢复分区 ntfs

有大量的发行版都会选择把EFI分区挂载在/boot/efi,但是根据ArchWiki /中文Wiki , 现在更建议直接挂载在/efi/boot/efi不再推荐。

完成分区后退出GParted,重启进入Arch安装介质,准备开始安装系统。

3. 进入Arch安装介质安装

Tips: 善用tab自动补全命令不仅能节省输入时间,还能防止误输。

(0)联网准备

有线网和虚拟机无需额外配置,无线网需要确保BIOS中网卡未被禁用,WiFI的名称和密码均只由英文字母,数字和键盘上能直接输入的符号组成,否则无法连接。安装过程需要全程联网。

(1)启动Arch Linux安装介质

从U盘启动到Arch Linux:

看到这个界面后回车:

如果看到的启动界面是这样的,并且启动项的结尾是BIOS,说明是用传统BIOS启动的,没有启动到UEFI模式;立即关机(或者启动到安装介质后输入poweroff关机),然后去BIOS中更改启动类型为UEFI only

(1.5)为当前登录的实例设置密码

1
passwd

为root用户设置密码之后,即可从其它设备,以root用户的身份使用ssh远程连接本机。

(2)最后一次验证启动模式

1
cat /sys/firmware/efi/fw_platform_size

如果输出64,说明系统以64位UEFI模式启动,是期望中的情况;
如果输出32,说明系统以UEFI模式启动,但是UEFI仅支持32位。这种平台极为少见,仍然可以正常安装,但是可选择的引导程序比较有限,并且如果选用grub作为引导程序的话需要修改部分参数;
如果找不到该文件,说明系统以BIOS模式启动,重启更改启动模式为UEFI。

(3)停用reflector服务

reflector会在最新的20个镜像源中测速,并根据速度排序镜像;由于大陆的特殊网络环境,只考虑最新的20个镜像源往往得不到理想的结果,同时它还会覆盖自行配置的源信息,所以先将其禁用:

1
2
systemctl stop reflector.service #停用
systemctl status reflector.service #复查,然后按q退出

这里是直接用reflector得到的镜像源列表,20个源一个国内的都没有:

硬要用reflector排序镜像源也是可以的,只需要给它加上亿点点限制并手动运行:

1
reflector --latest 10 --country China --protocol https --sort rate --save /etc/pacman.d/mirrorlist

这个命令依次指定了 最新的10个 地区位于中国 使用https协议 的镜像,按下载速度排序,并把结果覆盖保存在/etc/pacman.d/mirrorlist中。
不使用最后的--save参数,可以在控制台先预览输出的结果。
这样出来的结果至少都是国内的源,还算可观:

更多的用法参见 reflector man page 以及 ArchWiki / 中文Wiki
新安装的系统中并不会默认包含reflector软件包,需要可以自行安装配置。

(4)连接网络

虚拟机和有线网无需额外配置;无线网按照以下步骤联网。

1
iwctl #进入iwctl交互式命令行
1
2
3
4
5
device list # 列出无线网卡设备名,比如无线网卡看到叫 wlan0
station wlan0 scan # 扫描网络
station wlan0 get-networks # 列出所有 wifi 网络
station wlan0 connect wifi-name # 进行连接,注意这里无法输入中文。wifi-name替换为需要连接的wifi名称。如果wifi需要密码,回车后会提示,输入密码即可
exit # 连接成功后退出

测试是否成功联网:

1
ping www.baidu.com

Ctrl+C手动终止ping命令。

(5)校准时间

1
timedatectl


NTP service显示为active状态说明时间同步服务正常运行。正确的系统时间对于安装部分软件包是必须的。
如果没有正常运行(显示为inactive),则:

1
timedatectl set-ntp 1

(6)分区与格式化

已经使用GParted工具完成分区和格式化的直接跳到下一步
命令行分区工具中fdisk/cfdisk无需配置即自带4k对齐支持,因此推荐使用。
分区方案的理由在GParted分区章节中。

不要用fdisk/cfdisk工具调整已经格式化并且存放有数据的分区大小!这样极可能收获一个数据损坏的分区。
调整Windows相关的分区大小(NTFS分区)在Windows下调整(或者用PE);
调整Linux相关的分区大小在Linux下调整(或者用GParted liveCD,可以起类似PE的作用)。

优点:可调参数多,熟练后操作可以更快。
使用lsblk命令,先确认即将分区的硬盘。

这里即将分区的盘是/dev/nvme0n1,这时没显示出空闲空间是正常的,这里只显示已经分配的空间。
然后进入fdisk:

1
fdisk /dev/nvme0n1


可以输入m查看所有可用的命令。
依次执行以下操作:

  1. n新建一个分区;
  2. 分区号默认,直接回车;
  3. 起始位置直接回车,自动选择空闲分区的开头;
  4. 终止位置:输入-3G设定留出3G空闲空间,或者输入+17G设定分区大小为17G。如果该选项留空则是建立分区直到空闲空间的末尾。


然后重复上述操作,新建另外两个分区;
7号分区是swap分区,因此打个标签:按t进入修改分区类型,输入7选择7号分区,输入Linux swap设定分区类型。
完成后按w写入并退出。

最后使用lsblk命令复查一下分区结果:

优点:有TUI界面,更易操作。
使用lsblk命令,先确认即将分区的硬盘。

这里即将分区的盘是/dev/nvme0n1,这时没显示出空闲空间是正常的,这里只显示已经分配的空间。
然后进入cfdisk:

1
cfdisk /dev/nvme0n1


光标定位到Free space处,选择New,输入新建分区的大小(这里是17G),回车,并定位到剩余的Free space

用同样的方法再新建一个2G的分区,把Type修改为Linux Swap,然后再新建一个占据剩余所有空间的分区;

使用左右方向键选择Write,输入yes回车,然后Quit
最后使用lsblk命令复查一下分区结果:

lsblk确认需要格式化的分区名称:

1
2
3
mkfs.btrfs /dev/nvme0n1p6
mkswap /dev/nvme0n1p7
mkfs.ext4 /dev/nvme0n1p8

(7)创建btrfs子卷

1
2
3
4
5
6
mount -t btrfs -o compress=zstd /dev/nvme0n1p6 /mnt #把分区挂载到/mnt
btrfs subvolume create /mnt/@ #创建@子卷作为根目录
btrfs subvolume create /mnt/@home #创建@home子卷作为家目录
btrfs subvolume create /mnt/@swap #可选,但是如果想使用swap文件,就为它单独创建一个子卷
btrfs subvolume list /mnt #复查一遍子卷创建的情况
umount /mnt #卸载分区

(8)挂载

作为系统根目录的分区必须最先挂载,其它分区依次挂载即可。

1
2
3
4
5
6
mount -t btrfs -o compress=zstd,subvol=@ /dev/nvme0n1p6 /mnt #挂载根目录
mount -t btrfs -o compress=zstd,subvol=@home /dev/nvme0n1p6 /mnt/home --mkdir #挂载家目录
mount -t btrfs -o compress=zstd,subvol=@swap /dev/nvme0n1p6 /mnt/swap --mkdir #可选,挂载未来可能用到的swap文件
mount /dev/nvme0n1p1 /mnt/efi --mkdir #挂载efi分区
mount /dev/nvme0n1p8 /mnt/boot #挂载/boot分区
swapon /dev/nvme0n1p7 #启用swap分区

然后复查挂载情况:

1
2
lsblk #复查硬盘分区挂载情况
free -h #复查swap分区挂载情况

想使用swap文件的话安装完进系统了再配置。

(9)配置镜像源

编辑/etc/pacman.d/mirrorlist,在顶端添加国内源,这里推荐cernet校园网联合镜像:

1
Server = https://mirrors.cernet.edu.cn/archlinux/$repo/os/$arch

这是唯一一个安装系统的过程中会从liveCD复制到新系统的文件。

1
vim /etc/pacman.d/mirrorlist

光标下移到镜像列表中的第二个链接(下移7行,可输入7j),按yy复制整行;
输入3k上移3行,然后按p粘贴;
输入4w向右移动4个单词,输入c7w,然后键入mirrors.cernet.edu.cn
Esc退出编辑模式,:wq保存退出。

(9.5)并行下载

编辑/etc/pacman.conf,将#ParallelDownloads = 5行取消注释,并把5改成20。

1
vim /etc/pacman.conf

输入/Par/表示顺序查找)即可查找到并行选项,回车;
i进入编辑模式,删除开头的#Esc退出编辑模式;
A(大写)跳到行尾编辑,把5改成20,Esc退出编辑模式;
:wq保存退出。

(10)安装系统

即将安装的软件包:

包名 作用 重要性
base 系统最基础的组件 必需
base-devel 打包软件包必需的编译和打包工具等等,是安装AUR包必需的工具;由于sudo包含在这个包里面,因此直接现在装 几乎必需
linux linux-lts linux-zen 内核,不同内核之间的区别参见ArchWiki /中文Wiki 。对于物理机安装的系统,linux-zen会比linux更适合日用一些,但是linux-zen内核不太适合虚拟机;linux-lts内核版本相对旧一些,作为后备内核。 至少安装其一
linux-headers linux-lts-headers linux-zen-headers 内核相应的头文件 非必需,但是对NVIDIA显卡以及其它硬件安装的dkms驱动是必需的
btrfs-progs btrfs工具包 对于btrfs格式的分区是必需的
networkmanager 联网工具 几乎必需
vim 终端文本编辑器 可选,替换为nano等也可,但是至少安装一个终端文本编辑器
bash-completion bash的tab补全支持 建议,如果用zsh的话安装zshzsh-completions
linux-firmware 固件包 物理机必需,虚拟机无需
intel-ucode amd-ucode 微码更新 物理机必需,根据CPU品牌安装对应的;虚拟机无需
fish 带有强大补全功能的shell 纯个人喜好

个人喜好安装3个不同版本的内核,中间版本的作为主力,旧版本的作为后备,更新的测试版本的内核用在”当前版本的内核有bug但是新版已经修了”的情况。
目前内核版本的情况:

内核当前版本号补充说明
linux6.13.2.arch1-1主线内核,稳步推进版本
linux-zen6.13.2.zen1-1更新频率跟随主线
linux-lts6.12.13-1在2024年的时候保持6.6, 2025年改到6.12并将在全年保持维护6.12版本
linux-mainline6.14rc2-1比主线内核更新一版的rc版内核

安装命令:
虚拟机:

1
pacstrap -K /mnt base base-devel linux linux-headers linux-lts linux-lts-headers vim bash-completion networkmanager btrfs-progs fish

Intel物理机:

1
pacstrap -K /mnt base base-devel linux-zen linux-zen-headers linux-lts linux-lts-headers vim bash-completion networkmanager btrfs-progs fish linux-firmware intel-ucode

AMD物理机:

1
pacstrap -K /mnt base base-devel linux-zen linux-zen-headers linux-lts linux-lts-headers vim bash-completion networkmanager btrfs-progs fish linux-firmware amd-ucode

有些教程里面未添加-K参数; 根据pacstrap man page

-G
Avoid copying the host’s pacman keyring to the target.
-K
Initialize an empty pacman keyring in the target (implies -G).

-K参数的作用是在目标中初始化新的密钥,而不是从liveCD中复制一份;注意到下载软件包之前有类似输出(linux-lts-headers抄漏了一个字母,当然是报错了,但是不影响gpg部分):

(11)生成fstab文件

1
2
genfstab -U /mnt > /mnt/etc/fstab # -U表示根据硬盘的UUID生成,分区的UUID只要不重新格式化就不会改变,是推荐的标识
cat /mnt/etc/fstab #复查一下生成结果是否正确

结果应该类似这样:

(12)切换到新安装的系统

1
2
arch-chroot /mnt #切换后终端左侧字体的显示应该会发生改变
fish #chroot进来之后,使用的是新系统的bash了,咱还是喜欢切换到刚刚装的fish来操作


zsh,bash和fish同台(

当系统崩溃到无法进入系统的时候,使用liveCD启动,挂载硬盘然后arch-chroot就可以回到系统进行修复了,这是修系统最有力的武器;
所以理论上ArchLinux永远不需要重装系统~

(12.5)并行下载

liveCD环境里面修改过的配置文件并不会复制到新安装的系统中来,所以需要重新设置一下pacman的并行下载,这里直接复制前面的步骤了。
编辑/etc/pacman.conf,将#ParallelDownloads = 5行取消注释,并把5改成20。

1
vim /etc/pacman.conf

输入/Par/表示顺序查找)即可查找到并行选项,回车;
i进入编辑模式,删除开头的#Esc退出编辑模式;
A(大写)跳到行尾编辑,把5改成20,Esc退出编辑模式;
:wq保存退出。

(13)设置主机名

这里因为是在虚拟机测试双系统,就给主机名取名叫dualarch了。

主机名不要包含大写字母,空格和点。

任何写入文件的操作过后,都可以用cat命令或者文本编辑器复查一下写入的是否正确。

编辑/etc/hostname(这个文件原先是不存在的),填入主机名:

1
echo 'dualarch' > /etc/hostname


然后编辑/etc/hosts,填入以下几行内容(可以用tab对齐):

1
2
3
127.0.0.1	localhost
::1 localhost
127.0.1.1 dualarch.localdomain dualarch

(因为是直接在文件末尾附加新行,vim没什么特别的操作,就不附了;o在光标下方插入一行,O在光标上方插入一行)

(14)设置时区

1
2
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

在运行中的系统中更改时区可以简单一些:

1
timedatectl set-timezone Asia/Shanghai

这里手动链接是因为timedatectl命令在chroot环境下不能正常工作。

(15)配置本地化

编辑/etc/locale.gen,去除en_US.UTF-8 UTF-8行和zh_CN.UTF-8 UTF-8行的注释;

1
vim /etc/locale.gen

输入/en_US查找,/表示顺序查找;回车,然后i进入编辑模式,删除开头的#Esc退出编辑模式;
输入?zh_CN查找,?表示逆序查找;回车,然后上移一行(或者按n表示查找下一项),i进入编辑模式,删除开头的#Esc退出编辑模式;
:wq保存退出。

然后执行:

1
locale-gen


接下来创建/etc/locale.conf文件,填入LANG=en_US.UTF-8

1
echo 'LANG=en_US.UTF-8' > /etc/locale.conf

将系统 locale 设置为 en_US.UTF-8 ,系统的 log 就会用英文显示,这样更容易判断和处理问题;
也可以设置为 en_GB.UTF-8 或 en_SG.UTF-8,附带以下优点:

  • 进入桌面环境后以 24 小时制显示时间;
  • LibreOffice 等办公软件的纸张尺寸会默认为 A4 而非 Letter(US);
  • 可尽量避免不必要且可能造成处理麻烦的英制单位。
  • 设置的LANG变量必须是使用locale-gen生成过的,否则会报错Cannot set LC_CTYPE to default locale: No such file or directory
  • 不要在这里设置成任何中文Locale;由于tty没有中文字体,这会导致tty上显示为方块;如果需要安装桌面环境,可以在安装桌面环境之后再修改Locale为中文,并通过合理的配置让tty保持显示英文(咱的另一篇blog里面有收录其中一份这样的配置);另外,archlinuxcn社区的站长自用的内核linux-lily里面打了让tty支持显示中文的补丁,这个内核可以在archlinuxcn社区源获取,这是后话。

(16)设置root密码

1
passwd

没有回显是正常的,键盘没有坏

(17)安装引导

1
pacman -S grub efibootmgr os-prober
软件包 功能
grub 引导程序本身
efibootmgr 管理UEFI启动项
os-prober 探测硬盘上存在的其它系统启动项,比如Windows Boot Manager
1
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=Arch\ Linux


此外还要编辑/etc/default/grub,作以下修改:

  • 顶部添加一行LANG=C
    让grub使用的语言保持英文,既方便做其它可能的自定义配置,还能让显示整体更一致;
    后续在locale设为中文的情况下,grub菜单可能出现汉化了但没完全汉化的情况,观感还不如全英文。
  • GRUB_DEFAULT改为saved,下面的GRUB_SAVEDEFAULT=true取消注释;
    这能让grub记住上次选择的选项;
  • GRUB_CMDLINE_LINUX_DEFAULT中,去掉quiet,并且把loglevel提高到5
    这样能看到更加完整的内核日志,便于排查可能出现的问题;
  • GRUB_DISABLE_OS_PROBER=false取消注释,启用os-prober探测硬盘上存在的Windows启动项;
  • 最后增加一行GRUB_TOP_LEVEL="/boot/vmlinuz-linux"
    默认情况下,linux-lts内核排序会排在linux内核的上面,导致默认启动linux-lts内核;
    如果希望默认启动其它内核,也要改成对应的名字,比如默认启动linux-zen内核需要写GRUB_TOP_LEVEL="/boot/vmlinuz-linux-zen"

另外:

1
2
3
4
5
cd /etc/grub.d/
ls
mv 30_os-prober 09_os-prober
ls
cd ../..


把os-prober的位置提前,让Windows的启动项位于第一项,这样与Linux启动项相邻,操作更方便;

最后生成grub配置文件:

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

这里可以看到正确输出了包含Windows启动项在内的条目;
但是有报告称os-prober在chroot环境下不一定会正常工作,这种情况下直接先忽略,重启进入Linux系统后再执行一次grub-mkconfig就好了。

(18)退出系统,重启

1
2
3
4
exit #退出fish
exit #退出chroot
umount -R /mnt #可选,手动解挂载,可以帮助发现被占用的分区
reboot #重启计算机

(19)新系统开机联网


引导菜单已经正常出来了;

bitlocker如果开启,首次从grub菜单启动至Windows时可能要求输入恢复密钥。

使用root用户登录:

1
systemctl enable --now NetworkManager #将联网服务设为开机自启,并立即启动


有线网和虚拟机通常就已经连上网了,无线网需要在以下两种方式选择一种连接:

1
2
nmcli dev wifi list # 显示附近的 Wi-Fi 网络
nmcli dev wifi connect "Wi-Fi名" password "网络密码" # 连接指定的无线网络

或者:

1
nmtui #进入tui之后按照指引连接

然后使用ping命令测试网络连接如前。

(20)添加软件源

编辑/etc/pacman.conf,把multilib所在的两行注释掉,开启32位库的支持;然后添加[archlinuxcn]和[arch4edu]社区源(仍然推荐使用cernet校园网联合镜像站):

1
2
3
4
5
6
7
8
9
10
[multilib]
Include = /etc/pacman.d/mirrorlist

......

[archlinuxcn]
Server = https://mirrors.cernet.edu.cn/archlinuxcn/$arch

[arch4edu]
Server = https://mirrors.cernet.edu.cn/arch4edu/$arch


对于archlinuxcn源,需要为本地的一份GPG key添加信任:

1
pacman-key --lsign-key "farseerfc@archlinux.org"


对于arch4edu源,需要额外导入GPG key:

1
2
3
pacman-key --recv-keys 7931B6D628C8D3BA
pacman-key --finger 7931B6D628C8D3BA
pacman-key --lsign-key 7931B6D628C8D3BA

然后刷新一下pacman数据库,并安装上keyring:

1
pacman -Sy archlinuxcn-keyring arch4edu-keyring

(21)增加内核

1
pacman -S linux-mainline linux-mainline-headers

linux-mainline内核也是计划安装的内核,但是官方仓库没有,这里安装的是[archlinuxcn]社区源提供的打包好的版本;
然后刷新grub配置:

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

(21.5)swap文件

使用swap文件的话,前面挂载好的@swap子卷就派上用场了:

1
2
btrfs filesystem mkswapfile --size 2g --uuid clear /swap/swapfile #创建一个2G的swap文件;由于btrfs文件系统的特殊属性,不要使用通常的fallocate或者dd命令创建
swapon /swap/swapfile

然后编辑/etc/fstab,开机自动启用交换文件:

1
/swap/swapfile none swap defaults 0 0

(22)完成安装

1
2
pacman -S fastfetch
fastfetch


观赏一下版本信息吧。

1
2
reboot #重启
poweroff #或者关机

再开机看看Windows是否正常启动:

一切正常。


Windows+Arch Linux双系统基本安装
http://silvertuanzi.github.io/2025/02/10/windows-with-arch/
作者
silver-lasombra
发布于
2025年2月10日
许可协议