Windows & Arch Linux双系统安装笔记

发布于 24 天前  103 次阅读


这周突然想给我的小平板装一个Arch玩玩。既然有这个想法,那就趁晚上有空来试一试。

小平板的硬盘里有个Windows操作系统。因为比较担心新装的Arch哪天又被突然折腾挂掉,所以打算把Windows的分区缩一缩,装双系统。

1.事前准备

1.1.刻录安装U盘

在启动小平板开工前,先要准备一个装系统用的U盘。

首先去Arch Linux官网获取最新版的安装镜像:https://archlinux.org/download/

然后把它刻录到U盘上。我的U盘装了Ventoy启动器,实际上只要把镜像复制进去就行。

1.2.压缩Windows卷

接下来启动现有的Windows系统,在磁盘管理里面把C盘压缩点空间给即将安装的Arch Linux。

2.安装步骤

准备完成,重启小平板,按F12或者其他对应按键进入启动项选择界面,选择U盘启动,加载Arch安装镜像。

原本打算试试archinstall安装脚本的,鼓捣片刻后发现它目前(2025年11月)似乎不支持LVM分区操作,那就还是用老方法手动安装吧。

2.1.连接无线网

Arch安装镜像启动完成后,先连接网络。

小平板只有无线网卡,因此就通过iwd工具进行连接。

输入iwctl回车,进入其命令行工具。

接着执行device list命令列出现有无线网卡设备。一般来说都叫wlan0。下面的命令就以这个设备名为例。

然后执行station wlan0 scan命令,让无线网卡搜索一下周边的SSID。

搜索完成后,执行station wlan0 get-networks命令,列出搜到的SSID。

从列表中选择自己的SSID进行连接,以叫YourWLAN的SSID为例,命令是station wlan0 connect YourWLAN

如果有密码,会提示输入密码。

连接上后,可以通过station wlan0 show命令查看无线网连接情况。如果正常连接,就可以通过quit命令退出iwd命令行工具。

2.2.开启SSH

小平板连上网后,就可以用另一台电脑SSH上去操作了。好处是命令可以直接从ArchWiki粘贴,不用手敲。

执行以下命令编辑SSHD配置文件,把PermitRootLogin一行取消注释,并改成PermitRootLogin yes

nano /etc/ssh/sshd_config

编辑完后,按Ctrl+O并回车保存,按Ctrl+X退出。

配置文件修改完毕,执行以下命令重启SSHD服务。

systemctl restart sshd

最后再执行以下命令给root用户设置个密码,就可以通过SSH连接了。

passwd

2.3.硬盘分区

通过SSH连上小平板,正篇开始。

装系统第一步,先给硬盘分区。执行以下命令看看现有硬盘的设备名字。

lsblk

小平板的输出如下。

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 300M 0 part
├─nvme0n1p2 259:2 0 16M 0 part
├─nvme0n1p3 259:3 0 150G 0 part

所以它的设备名就是nvme0n1。现有的3个分区按顺序分别是EFI分区、Windows保留分区、Windows系统的C盘。

这些分区都不需要动到,只要用剩余的空闲空间给新装的Arch分区就行。

执行以下命令进入分区工具。

gdisk /dev/nvme0n1

先创建一个1G的分区,之后挂载到Arch的/boot目录。步骤如下。

n创建一个新分区。分区号保持默认回车,起始扇区保持默认回车,结束扇区输入+1G回车,分区ID保持默认回车。

剩下的空间我打算创建LVM分区。虽然现在也只是把所有空间都划给了根目录,但是说不定后面会一拍脑袋把比如/opt单独分出来呢。

还是n创建一个新分区。分区号保持默认回车,起始扇区保持默认回车,结束扇区保持默认回车,分区ID输入8e00(Linux LVM)回车。

分区完成后,按p输出分区表。

Number Start (sector) End (sector) Size Code Name
1 4096 618495 300.0 MiB EF00 EFI system partition
2 618496 651263 16.0 MiB 0C01 Microsoft reserved ...
3 651264 315234958 150.0 GiB 0700 Basic data partition
4 315236352 317333503 1024.0 MiB 8300 Linux filesystem
5 317333504 500117503 87.2 GiB 8E00 Linux LVM

看着没问题,就按w保存分区表。

分区完成后,将新建的2个分区格式化或者创建LVM后格式化。

先操作1G的那个分区,直接格式化即可。我选择的是格式化成btrfs文件系统。

mkfs.btrfs /dev/nvme0n1p4

LVM分区就要先创建物理卷,再创建卷组,最后创建逻辑卷了。命令会多几条。我这里只创建了一个逻辑卷(/dev/archvg/root),并把所有空间都给它。

pvcreate /dev/nvme0n1p5
vgcreate archvg /dev/nvme0n1p5
lvcreate -n root -l +100%free archvg
mkfs.btrfs /dev/archvg/root

2.4.挂载分区

分区创建格式化完成后,依次挂载到/mnt目录下。

新创建的/dev/archvg/root分区作为系统的根目录分区,直接挂载到/mnt目录。

新创建的/dev/nvme0n1p4分区作为系统的/boot分区,挂载到/mnt/boot目录。

原有的/dev/nvme0n1p1分区作为这块硬盘的EFI分区,需要复用一下,挂载到/mnt/boot/efi目录。

mount /dev/archvg/root /mnt
mount /dev/nvme0n1p4 /mnt/boot --mkdir
mount /dev/nvme0n1p1 /mnt/boot/efi --mkdir

2.5.调整软件源

在安装系统前,先把软件源调整成比较快一点的。reflector -c选项可以指定某个国家或地区的软件源,方便缩小范围筛选。

mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
reflector -c cn --latest 5 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

2.6.安装基础包

软件源调整完成后,就可以开始装系统了。执行以下命令安装Arch Linux的一些基础包。

pacstrap -K /mnt base linux linux-firmware intel-ucode sof-firmware btrfs-progs lvm2 gdisk networkmanager nano vi vim grub efibootmgr refind bash-completion sudo openssh git fakeroot reflector

这些包的用途如下:

base:Arch Linux基础包

linux:Linux内核

linux-firmware:Linux固件

intel-ucode:Intel微码,如果是AMD的处理器则换成amd-ucode

sof-firmware:音频固件

btrfs-progs:btrfs文件系统相关的工具集

lvm2:LVM相关的工具集

gdisk:分区工具

networkmanager:网络管理工具

nanovivim:命令行编辑器,其实装其中一个就行,但我全都要

grub:Linux引导程序

efibootmgr:UEFI启动项管理工具

refind:同样是个引导程序,其实也可以只装其中一个

bash-completion:Bash Shell命令自动补全工具

sudo:让其他用户以root身份执行命令的工具

openssh:SSH服务端及客户端

git:对我来说只是用来拉取仓库的

fakeroot:编译时模拟root权限的工具

reflector:调整软件源的工具

2.7.生成分区表

执行以下命令给新装的Arch系统生成一个分区表。

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

2.8.更改根目录

执行以下命令切换根目录到新装的Arch系统根目录下。接下来的操作主要是对新系统的设置。

arch-chroot /mnt

2.9.用户设置

首先给新系统的root用户设置一个密码。

passwd

然后修改/etc/sudoers配置文件。这个文件比较官方的打开方式是下面这个命令,调用的是vi编辑器。

visudo

输入/%wheel回车进行搜索,找到# %wheel ALL=(ALL:ALL) ALL这一行,按Del键删掉行首的井号注释。然后输入:wq回车保存退出。

接下来就能创建带sudo权限的用户了。执行以下命令创建一个叫omega的用户,将该用户加入wheel附加组里。

useradd -m -G wheel omega
passwd omega

2.10.主机名设置

给系统起一个主机名。这里就简单一点叫localhost。

echo 'localhost' >> /etc/hostname

2.11.时间设置

调整系统时区,例如调整为UTC+8的时区。

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

将系统时间同步到硬件时钟。对于双系统的环境,会造成Windows和Arch上面的时间不一致。建议通过改Windows注册表的方式进行处理,影响比较小。

hwclock --systohc

顺便也把NTP开一下。

timedatectl set-ntp true

2.12.本地化设置

我比较习惯在装完桌面环境后再调整本地化设置,因此这里就用默认的英文了。

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

虽然在用的键盘是标准英文布局,但还是生成一个键盘布局配置文件吧。

echo 'KEYMAP=us' >> /etc/vconsole.conf

2.13.生成初始RAM文件系统镜像

因为我分区时用了LVM,就要在mkinitcpio.conf配置文件里面加上lvm2的钩子了。执行以下命令编辑该配置文件。

nano /etc/mkinitcpio.conf

Ctrl+W并输入HOOKS=(回车搜索几次,直到搜到没被注释掉的那一行,在括号里面加上lvm2后按Ctrl+O保存,Ctrl+X退出。

加上钩子后,就可以生成这个初始RAM文件系统镜像了。

mkinitramfs -P

2.14.安装启动器

其实我是想只安装一个refind的,不过为了某些可能并不存在的兼容性,决定还是把惯用的grub2也装上。这样也不用特意改配置文件,就能让2个启动器分别正常工作。

grub-install /dev/nvme0n1
grub-mkconfig -o /boot/grub/grub.cfg
refind-install

2.15.配置ZRAM交换空间

配置udev规则生成一个ZRAM分区,作为交换空间使用。小平板的内存大小是16GB,ZRAM分4GB也足够了。

echo 'zram' >> /etc/modules-load.d/zram.conf
echo 'ACTION=="add", KERNEL=="zram0", ATTR{initstate}=="0", ATTR{comp_algorithm}="zstd", ATTR{disksize}="4G", TAG+="systemd"' >> /etc/udev/rules.d/99-zram.rules
echo '/dev/zram0 none swap defaults,discard,pri=100,x-systemd.makefs 0 0' >> /etc/fstab

2.16.配置系统启动项

好像装的那些包里面需要开机自启的只有NetworkManager

systemctl enable NetworkManager

2.17.重启系统

至此,最小安装的Arch Linux算是配置好了。执行以下命令退出chroot环境。

exit

然后重启电脑。

reboot

重启完成后选择启动到Arch系统,就可以进入新装的系统继续折腾了。

3.个人吐槽

这篇文章里面的操作实际上用不着半小时就能搞定,写这篇文章却花了3倍多的时间。

写完后翻了翻上面的内容,感觉这次的Arch装得又新又旧的。

防火墙软件我还没装,后面应该还是会用firewalld,因为它的命令我还记得怎么敲(笑)。

本来还打算接着写桌面环境的安装操作的,看了看篇幅还是在下一篇文章里写吧。

对于文章中提到的双系统时间不一致问题,可以启动到Windows系统里,以管理员权限打开CMD或者PowerShell,粘贴下面的命令,重启一下就可以解决。

Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1