# Arch Linux 和 Windows 11 双系统

By [bgeer](https://paragraph.com/@bgeer) · 2023-04-24

---

[https://archlinux.org/download/](https://archlinux.org/download/)

请自行前往Arch官网下载镜像，并使用 [Rufus](https://rufus.ie/) 制作启动盘。

注意分区类型为 GPT 而非默认的 MBR，写入方式为推荐的 ISO。

0.准备阶段
------

### windows禁用快速启动和休眠

![windows禁用快速启动和休眠](https://storage.googleapis.com/papyrus_images/902f606d4346661d7f0a2532e99df0f08ec292081075cf6e7ee13effbe217eff.png)

windows禁用快速启动和休眠

### 时间表示标准统一

Windows 默认使用的时间表示标准为 localtime，Arch Linux 默认为 UTC。在此修改 Windows 的为 UTC 以保持统一，Windows 11 中执行如下命令。

    reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
    

重新启动 Windows 11 生效。

### BIOS 设置确认

启动盘插入电脑，重启电脑，同时不停按 DEL 进入 BIOS，确认以下几点：

*   引导模式为 UEFI；
    
*   禁用 Secure Boot；
    
*   如果硬盘是 NVMe 的，硬盘的启动方式需为 AHCI。
    

### 从 U 盘启动

启动项选择界面，键盘上下键选择带“EFI”“USB”字样的，F10 保存退出 BIOS。

1.正式进入Arch Linux安装
------------------

### 设置引导镜像root密码

执行后输入两次密码就可以了 （输入密码不显示）

### 查看要安装archlinux电脑的IP

### 另一台电脑连接要安装archlinux的电脑

    ssh root@ip
    

以上步骤可省略，直接在本机运行也可，只是要手动敲代码而已

### 验证引导模式

要验证引导模式，执行下列命令列出 efivars 目录。

    ls /sys/firmware/efi/efivars
    

如果命令结果显示了目录且没有报告错误，则系统以 UEFI 模式引导。

### 连接无线网(可选)

    rfkill unblock wifi                       	 #解锁无线网卡
    iwctl                                    	 #执行iwctl命令，进入交互式命令行
    device list                               	 #列出设备名，比如无线网卡看到叫 wlan0
    station wlan0 scan                        	 #扫描网络
    station wlan0 get-networks                	 #列出网络 比如想连接YOUR-WIRELESS-NAME这个无线
    station wlan0 connect YOUR-WIRELESS-NAME   	 #进行连接 输入密码即可
    exit                                      	 #成功后exit退出
    

### 更新系统时间

使用 timedatectl 确保系统时间是准确的：

    timedatectl set-ntp true        		#将系统时间与网络时间进行同步
    timedatectl status              		#检查服务状态
    

### 建立硬盘分区

查看分区情况：

我的硬盘名字为 nvme1n1，使用 cfdisk 进行管理：

    cfdisk /dev/nvme1n1
    

找到安装arch的空闲空间，选择 New，首先是给根分区分配 32GB

![自行分区](https://storage.googleapis.com/papyrus_images/ef84c69781f691586893b5c7fcfa70c7aed6f99777f412f16c1c7f07a9bcfa18.png)

自行分区

接着选择 New，给交换分区分配空间（1~32G按需分配，我这里把多的8.9G分配给了swap），选择 Type，设定分区类型为 Linux swap

![修改Type类型为Linux swap](https://storage.googleapis.com/papyrus_images/b71b701d12bb257b65f4c9dc834496fcbb200b4194b50107db4630d7f2b8daef.png)

修改Type类型为Linux swap

选择剩下的 220GB，选择 New，给家分区分配剩下的空间，选择 Type，设定分区类型为 Linux home。

![修改Type类型为Linux home](https://storage.googleapis.com/papyrus_images/8d781e77ea7e2ad9a509b9df78ede67e340324063a149cc43716c1d0a5c3e3d2.png)

修改Type类型为Linux home

选择 Write，输入 yes 回车：（write前请确保分区无误，该步骤会删除数据）

![请确认无误后Write](https://storage.googleapis.com/papyrus_images/7617ca1dbe137d0ea9271e2d4c19249c53e58663e5c6aab4183fff63e68e51d7.png)

请确认无误后Write

选择 Quit 退出。

### 格式化分区

    fdisk -l                        #分区结束后， 复查磁盘情况，会发现多了3个新分区
    mkfs.ext4 /dev/nvme1n1p5		#将根分区格式化为 ext4 格式
    mkswap /dev/nvme1n1p6			#将交换分区格式化
    mkfs.ext4 /dev/nvme1n1p7		#将家分区格式化为 ext4 格式
    

### 挂载分区

    mount /dev/nvme1n1p5 /mnt		#将根分区所对应硬盘卷挂载到/mnt
    swapon /dev/nvme1n1p6			#激活交换分区
    mkdir /mnt/home					#建立目录 home
    mount /dev/nvme1n1p7 /mnt/home	#将家分区所对应硬盘卷挂载到目录 home
    fdisk -l						#查看硬盘，找到 EFI System 分区所对应硬盘卷为 nvme1n1p1
    mkdir /mnt/boot					#建立目录 boot
    mount /dev/nvme1n1p1 /mnt/boot	#将 EFI System 分区所对应硬盘卷挂载目录 boot
    

挂载是有顺序的，先挂载根分区，再挂载 EFI 分区

### 配置镜像

使用 reflector 来获取速度最快的 6 个镜像，并将地址保存至目录 mirrorlist。

    reflector -c China -a 6 --sort rate --save /etc/pacman.d/mirrorlist
    

reflector 会为你选择速度合适的镜像源 ，但其结果并不准确，同时会清空配置文件中的内容。

可手动配置，编辑镜像源，选择ustc等国内源提到最前面。

    vim /etc/pacman.d/mirrorlist
    

更新应用软件库（源），检查下载速度

    pacman -Syy
    

### 安装系统及必需软件包

base/base-devel 软件包（base-devel在AUR包的安装是必须的）、 Linux 内核（可选linux 和 linux-headers）、常规硬件的固件、intel CPU 驱动

vim编辑器、bash补全工具、fish替代bash、networkmanager网络管理、wqy-zenhei中文字体，避免安装界面后乱码、ssh工具

    pacstrap /mnt base base-devel linux-zen linux-zen-headers linux-firmware intel-ucode				
    pacstrap /mnt vim bash-completion fish networkmanager wqy-zenhei openssh
    

出现如下报错是，之前安装过arch 去/mnt/boot下删除intel-ucode.img即可

    error: failed to commit transaction (conflicting files)
    intel-ucode: /mnt/boot/intel-ucode.img exists in filesystem
    Errors occurred, no packages were upgraded.
    ==> ERROR: Failed to install packages to new root
    

2.配置系统
------

### fstab

用以下命令生成文件 fstab（用`-U`设置 UUID）：

    genfstab -U /mnt >> /mnt/etc/fstab
    

检查生成的文件 fstab：

    cat /mnt/etc/fstab
    

切换到装好的系统：

    arch-chroot /mnt
    

### 时区

设置[时区](https://wiki.archlinux.org/title/Time_zone)，在 /etc/localtime 下用/usr 中合适的时区创建符号连接。如下设置上海时区。

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    

同步硬件时钟：

    hwclock --systohc
    

### 本地化

编辑文件 locale.gen：

    vim /etc/locale.gen
    

取消掉 en\_US.UTF-8 UTF-8 和 zh\_CN.UTF-8 UTF-8 前的注释（# 光标移动到当前行“#”符号上 按x删除）。

生成 locale 信息：

    locale-gen
    

创建 [locale.conf(5)](https://man.archlinux.org/man/locale.conf.5) 文件，[设定 LANG 变量](https://wiki.archlinux.org/title/Locale_\(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87\)#%E7%B3%BB%E7%BB%9F%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE)：

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

### 网络

创建文件 hostname，自定义设定主机名

    vim /etc/hostname
    
    ArchOS					#加入你想为主机取的主机名
    

修改文件 hosts：

    vim /etc/hosts
    

增加行如下（中间的空白用 tab 而非空格，ArchOS 替换为你自己的主机名）。

    # Static table lookup for hostnames.
    # See hosts(5) for details.
    
    127.0.0.1       localhost
    ::1             localhost
    127.0.0.1       ArchOS.localdomain            ArchOS
    

    vim /etc/resolv.conf
    

删除已有条目，并将如下内容加入其中 （待测试）

    nameserver 8.8.8.8
    nameserver 2001:4860:4860::8888
    nameserver 8.8.4.4
    nameserver 2001:4860:4860::8844
    

固化文件

    chattr +i /etc/resolv.conf
    

### Root 密码

输入并确认密码（密码没有回显，输完直接回车即可）。

### 安装基本软件包

安装基本软件包，使用 GRUB 为启动器：grub是启动引导器，efibootmgr被 grub 脚本用来将启动项写入 NVRAM，os-prober用来识别其他操作系统

    pacman -S grub efibootmgr os-prober mtools dosfstools ntfs-3g reflector git sudo
    

编辑文件 grub：

    vim /etc/default/grub
    

修改GRUB\_DEFAULT=2，默认windows开机

修改GRUB\_TIMEOUT=10，默认等待10秒开机

修改GRUB\_DISTRIBUTOR="ArchOS"，默认名称改为ArchOS

去掉GRUB\_CMDLINE\_LINUX\_DEFAULT一行中最后的 quiet 参数，同时把 log level 的数值从 3 改成 5。这样是为了后续如果出现系统错误，方便排错。同时在同一行加入 nowatchdog 参数，这可以显著提高开关机速度。

最后一行，取消掉 GRUB\_DISABLE\_OS\_PROBER=false 前的注释（#）。

再执行以下命令：出现Installation finished. No error reported.即可

    grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Arch
    

![](https://storage.googleapis.com/papyrus_images/8d1fc11c75b7c4d2505c0e80d25d9fbcd40238df548bb45606664938380accdf.png)

生成 grub.cfg：第一次执行并不会找到Windows Boot，重启之后再次执行即可找到

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

![](https://storage.googleapis.com/papyrus_images/dc0315524d8998b9699e07cbfea2e0db3d89b5b8bd1699807a926b14e23f865e.png)

### 完成安装

    exit                           #退回安装环境
    umount -R /mnt                 #取消挂载
    reboot                         #重启
    

3.登入新系统
-------

### 连接无线网

启动网络服务：有线直接连接

    systemctl enable --now NetworkManager
    

设置 WiFi：

### 创建个人用户并授权

创建用户xxx，创建家目录，加入 wheel 组, wheel附加组可sudo，以root用户执行命令 -m同时创建用户家目录 ，指定 shell：

    useradd -m -G wheel -s /bin/fish xxx
    

为用户 ql 设定密码：

编辑文件 sudoers：

    EDITOR=vim visudo
    

取消掉`%wheel ALL=(ALL:ALL) NOPASSWD: ALL`前的注释（#）。

基本安装到处

---

*Originally published on [bgeer](https://paragraph.com/@bgeer/arch-linux-windows-11)*
