安装 Arch Linux 到移动硬盘上
本文介绍了如何从已有的 Arch Linux 系统,在移动硬盘上安装一个新的 Arch Linux 系统。
为什么用 Archlinux?因为滚动更新、实用主义、丰富的 AUR 库、完善的 wiki、能学到东西可以装逼。
Arch Linux 安装
硬件配置说明
- 1TB RC20 固态硬盘
- 10Gbps 硬盘盒
- 联想 小新 pro 14 —— CPU: AMD Ryzen 7 7840HS
安装前准备
因为是通过已有的 Arch Linux 系统,在移动硬盘上安装一个新的 Arch Linus 系统。因此需要安装 arch-install-scripts 和 dosfstools 这两个包,以及 ntfs-3g。
Tip
也可以选择通过最新发布的 Arch Linux 安装镜像来安装 Arch Linux。
具体安装步骤可参考 archlinux 简明指南:通过U盘安装及通过虚拟机安装
Arch Linux 安装镜像自带 arch-install-scripts
包,因此无须安装该包。
但镜像系统需要配置网络、时钟、镜像源等。
Tip
arch-install-scripts 这个包里面是一些安装 Arch Linux 必须要用到的命令,如 pacstrap
和 arch-chroot
dosfstools,这个包是一些格式化分区的命令,如:mkfs.fat
。
ntfs-3g,用于格式化 Windows 的 NTFS 分区。
运行下面的命令,以更新系统并安装 arch-install-scripts
和 dosfstools
以及 ntfs-3g
:
sudo pacman -Syu
sudo pacman -S arch-install-scripts dosfstools ntfs-3g
最后,将移动硬盘装入硬盘盒并接入电脑,运行 sudo fdisk -l
查看硬盘分区情况,确定系统已识别到硬盘(一般为 /dev/sda
)。
分区格式化
首先,切换到最高权限账户 root
,接下来的操作需要 root
权限。
su
分区
之后运行 cfdisk
开始分区,cfdisk 的使用,见 archlinux 简明指南中的介绍:
cfdisk /dev/sda # 安装 archlinux 的磁盘分区
这里这里按官方安装指南的提示,增加了一个 128G 大小的 Windows 的 NTFS 分区。
这样一来,这个安装了 Arch Linux 系统的移动硬盘仍然可以作为一个 128G 的移动硬盘使用。为避免可能无法识别该分区,将第一个分区设为 NTFS 分区。
这里使用 Btrfs 文件系统,因此 /home/
和 /
都在一个分区上 /dev/sda4
。
最后,运行 fdisk -l
查看硬盘分区情况。
格式化
运行下面命令,格式化分区,注意将各个分区名替换成你对应的分区:
mkfs.ntfs -L mySSD /dev/sda1 # 格式化NTFS分区
mkfs.fat -F 32 /dev/sda2 # 格式化EFI分区,双系统注意不要运行这步
mkswap /dev/sda3 # 格式化Swap分区
mkfs.btrfs -L myArch /dev/sda4 # 格式化Btrfs分区
mount -t btrfs -o compress=zstd /dev/sda4 /mnt # 挂载Btrfs分区
df -h # 复查挂载情况
btrfs subvolume create /mnt/@ # 创建 / 目录子卷
btrfs subvolume create /mnt/@home # 创建 /home 目录子卷
btrfs subvolume list -p /mnt # 查看子卷情况
umount /mnt
挂载分区
对硬盘分区并格式化后,就可以安装系统了。但在这之前,要先将分区挂载在系统的文件目录上,这样才能对其进行读写操作。
运行下面命令,挂载分区到 /mnt
目录下,--mkdir
参数在挂载目录不存在时自动创建该目录:
mount -t btrfs -o subvol=/@,compress=zstd /dev/sda4 /mnt # 挂载 / 到 /mnt
mount --mkdir -t btrfs -o subvol=/@home,compress=zstd /dev/sda4 /mnt/home # 挂载 /home 到 /mnt/home
mount --mkdir /dev/sda2 /mnt/boot # 挂载 /boot 到 /mnt/boot
mount --mkdir -t ntfs3 /dev/sda1 /mnt/media/mySSD # 挂载NTFS数据分区,用于生成fstab后自动挂载
swapon /dev/sda3 # 启用交换分区
因为我用于安装 Arch Linux 的系统本身有并启用了一个 swap 分区,因此还要把这个用于安装的系统的 swap 分区取消挂载,否则生成 fstab 文件时会把这个分区也加进去。
swapoff /dev/nvme0n1p6 # 取消原系统swap分区
运行下面命令以查看挂载结果:
df -h # 查看分区结果
free -h # 查看swap
安装系统
现在正式开始安装系统,因为是从已有的 Arch Linux 上安装 Arch Linux,因此加上 -c
参数,使用本地的缓存,避免重新下载包:
pacstrap -c /mnt base base-devel linux linux-firmware btrfs-progs
# 因为使用btrfs文件系统,额外安装一个btrfs-progs包
pacstrap -c /mnt amd-ucode intel-ucode # 移动硬盘跨平台,因此都AMD和intel的微码都装上
pacstrap -c /mnt networkmanager bluez bluez-utils # 网络, 蓝牙
pacstrap -c /mnt vim sudo fish man-db man-pages texinfo
生成 fstab 文件
Linux 根据 fstab 文件来在启动时自动挂载分区。
genfstab
将当前挂载情况生成并写入到 fstab
文件,以确保安装后的系统能够正确挂载分区。
genfstab -U /mnt >> /mnt/etc/fstab # 生成fstab文件
vim /mnt/etc/fstab # 查看并修改fstab文件
# Static information about the filesystems.
# See fstab(5) for details.
# <file system> <dir> <type> <options> <dump> <pass>
# /dev/sda4 LABEL=myArch
UUID=45d66bde-e5e8-4fba-a1da-5df7515db012 / btrfs rw,relatime,compress=zstd:3,ssd,space_cache=v2,subvol=/@ 0 0
# /dev/sda1 LABEL=mySSD
UUID=665A10451B482D7E /media/mySSD ntfs3 rw,relatime,uid=0,gid=0,iocharset=utf8 0 0
# /dev/sda4 LABEL=myArch
UUID=45d66bde-e5e8-4fba-a1da-5df7515db012 /home btrfs rw,relatime,compress=zstd:3,ssd,space_cache=v2,subvol=/@home 0 0
# /dev/sda2
UUID=846E-E7FA /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
# /dev/sda3
UUID=27cffd9b-b123-4a02-bc8c-0a594937e826 none swap defaults 0 0
注意
如果使用 Timeshift 来备份/还原系统。
在生成的 fstab 文件中,如果有 subvolid 参数,需要移除 btrfs 分区中两个子卷的 subvolid 参数,避免 Timeshift 恢复 Btrfs 快照时,可能出现由于子卷 ID 变更导致无法挂载目录而无法进入系统。
系统基本设置
现在,新系统的 Linux 内核、基本的软件和驱动已经安装完成了。fstab
文件也已生成,现在我们切换到新系统中,并完成新系统的一些基本设置。
运行下面的命令,以切换到新系统中。
arch-chroot /mnt
此处设置主要参照 archlinux 简明指南,这里仅记录执行过的命令。
设置主机名与时区
echo "myArch" > /etc/hostname # 添加主机名,这里是myArch
设置 hosts
文件:
vim /etc/hosts
加入下面内容,注意要和主机名一致:
127.0.0.1 localhost
::1 localhost
127.0.1.1 myArch.localdomain myArch
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 设置时区
hwclock --systohc # 同步硬件时间,此命令假定硬件时钟已设置为 UTC
设置 Locale
Locale
决定了软件使用的语言、书写习惯和字符集。
vim /etc/locale.gen # 去掉注释 en_US.UTF-8 UTF-8 以及 zh_CN.UTF-8 UTF-8
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf # 设置系统语言
设置 root 密码
passwd root
创建新的 Initramfs
按 Install Arch Linux on a removable medium 的要求,需要修改 /etc/mkinitcpio.conf
文件:
在创建初始 RAM 磁盘之前,请在 /etc/mkinitcpio.conf 中将 block 和 keyboard 钩子移到 autodetect 钩子之前。
此操作是必要的,以便能够在多个系统上启动,每个系统在早期用户空间中都需要不同的模块。
vim /etc/mkinitcpio.conf
在HOOKS
中将block
和keyboard
移到autodetect
之前:
HOOKS=(base udev keyboard block autodetect microcode modconf kms keymap consolefont filesystems fsck)
然后运行:
mkinitcpio -P
安装启动加载程序
启动加载程序和主板固件(BIOS 或 UEFI)打交道。
它从固件中获取控制权,然后将操作系统(Linux 内核)加载到内存中,以便系统开始运行。
Linux 上最常用的启动加载程序是 GRUB。
安装 GRUB
如果想要 GRUB 同时可以启动 Windows 系统,需要另外安装 os-prober
包,并在之后的设置中添加:GRUB_DISABLE_OS_PROBER=false
pacman -S grub efibootmgr os-prober # 前两个是GRUB必需的,os-prober用于引导windows系统
根据 Install Arch Linux on a removable medium 的要求,
加上 --removable
参数以保证将硬盘移至另一台计算机时能够从移动硬盘启动:
grub-install --target=x86_64-efi --efi-directory=/boot --removable --recheck
修改并生成 GRUB 配置文件
接下来修改 /etc/default/grub
文件,并生成配置:
进行如下修改:
- 去掉 GRUB_CMDLINE_LINUX_DEFAULT 一行中最后的 quiet 参数
- 把 loglevel 的数值从 3 改成 5。这样是为了后续如果出现系统错误,方便排错
- 加入 nowatchdog 参数,这可以显著提高开关机速度
- 添加/取消这一行的注释:GRUB_DISABLE_OS_PROBER=false,启用 os-prober
vim /etc/default/grub
grub-mkconfig -o /boot/grub/grub.cfg
注意
若 Windows 安装在另一个硬盘中则不会输出, 可在进入系统后挂载硬盘并重新执行 grub-mkconfig -o /boot/grub/grub.cfg
安装完成
恭喜你,一个基本的 Arch Linux 系统已安装完成,现在可以重新登录到新系统,并完成另外的配置和安装。
exit # 退回安装环境
umount -R /mnt # 卸载新分区
reboot # 重启
记得按 F2
或者其它键,设置主板从安装了新系统的硬盘启动。
Arch Linux 配置
重启并使用 root
账户登录。
基础设置
此处设置主要参照 archlinux 简明指南,这里仅记录执行过的命令。
连接网络
systemctl enable --now NetworkManager
# 如果使用WiFi,运行以下命令
nmcli dev wifi list
nmcli dev wifi connect "wifi SSID" password "password"
ping www.bilibili.com # 测试网络连接
准备普通用户
useradd -m -G wheel -s /bin/bash myusername # 创建用户及用户家目录
passwd myusername # 设置密码
EDITOR=vim visudo # 启用用户组权限,注释掉这一行:#%wheel ALL=(ALL:ALL) ALL
用户设置
更改默认编辑器,在 /root/.bash_profile
及 /home/myusername/.bash_profile
中加入:
export EDITOR='vim'
更改默认 shell:
su myusername # 切换用户
chsh -l # 查看安装了哪些 Shell
chsh -s /usr/bin/fish # 修改当前账户的默认 Shell 为fish
开启 32 位支持库与 Arch Linux 中文社区仓库
修改 /etc/pacman.conf
:
取消下面两行的注释:
#[multilib]
#Include = /etc/pacman.d/mirrorlist
并添加:
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch # 中国科学技术大学开源镜像站
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch # 清华大学开源软件镜像站
Server = https://mirrors.hit.edu.cn/archlinuxcn/$arch # 哈尔滨工业大学开源镜像站
Server = https://repo.huaweicloud.com/archlinuxcn/$arch # 华为开源镜像站
更新pacman
数据库,安装一些基础功能包
sudo pacman -Syyu
sudo pacman -S sof-firmware alsa-firmware alsa-ucm-conf # 声音固件
sudo pacman -S adobe-source-han-serif-cn-fonts wqy-zenhei # 安装几个开源中文字体。一般装上文泉驿就能解决大多 wine 应用中文方块的问题
sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra # 安装谷歌开源字体及表情
sudo pacman -S archlinuxcn-keyring # cn 源中的签名(archlinuxcn-keyring 在 archlinuxcn)
sudo pacman -S yay # yay 命令可以让用户安装 AUR 中的软件(yay 在 archlinuxcn)
yay -S ttf-ms-win11-auto-zh_cn # 微软字体
archlinuxcn-keyring
可能会报错,解决方法请查阅:https://www.archlinuxcn.org/archlinuxcn-keyring-manually-trust-farseerfc-key/
安装并启用蓝牙服务
sudo pacman -S bluez bluez-utils
sudo systemctl enable --now bluetooth # 启用蓝牙服务
设置 timeshift
快照
建议在安装驱动前备份。
sudo pacman -S timeshift
sudo systemctl enable --now cronie # 启用Timeshift自动备份
因为还没有安装桌面环境/窗口管理器,需要手动设置 timeshift。
也可以在选择先安装一个桌面环境/窗口管理器,设置好 timeshift 备份后,再安装显卡驱动。timeshift 图形界面的设置可参考简明指南。
修改 /etc/timeshift/timeshift.json
如下,UUID 通过运行 blkid
来查看。
{
"backup_device_uuid" : "21b2199f-38e4-4bf1-ae1e-0c9d4d0431f8",
"parent_device_uuid" : "",
"do_first_run" : "false",
"btrfs_mode" : "true",
"include_btrfs_home_for_backup" : "true",
"include_btrfs_home_for_restore" : "true",
"stop_cron_emails" : "true",
"schedule_monthly" : "false",
"schedule_weekly" : "false",
"schedule_daily" : "true",
"schedule_hourly" : "false",
"schedule_boot" : "false",
"count_monthly" : "2",
"count_weekly" : "3",
"count_daily" : "5",
"count_hourly" : "6",
"count_boot" : "5",
"snapshot_size" : "0",
"snapshot_count" : "0",
"date_format" : "%Y-%m-%d %H:%M:%S",
"exclude" : [],
"exclude-apps" : []
}
Tip
如果安装 Hyprland 之后,如果遇到 timeshift GUI 无法启动的情况,需要安装 xorg-xhost
。
原因见 arch wiki
这里先用命令行启用备份:
timeshift --list # 查看快照
timeshift --create --comments "after install" --tags D # 创建快照,标签为每日
# timeshift --restore --snapshot '2014-10-12_16-29-08' --skip-grub # 恢复指定快照,并跳过grub
使用方法可查阅简明指南-系统快照(备份)与文件传输。
安装显卡驱动
因为是移动硬盘,且笔者使用的机器是 Intel 核显
+ NVIDIA 独显
以及 AMD 核显笔记本
,我安装的是:
sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel # Intel 核芯显卡
sudo pacman -S mesa lib32-mesa xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon #AMD 集成显卡
sudo pacman -S nvidia-open nvidia-settings nvidia-utils lib32-nvidia-utils # NVIDIA 独立显卡
注意
Arch Wiki 提示:nvidia-utils 软件包包含一个文件,该文件会在您重启后将 nouveau 模块列入黑名单。您也可以选择从 /etc/mkinitcpio.conf 中的 HOOKS 数组中移除 kms ,并重新生成 initramfs 。这将阻止 initramfs 包含 nouveau 模块,确保内核在启动初期无法加载它。
在 /etc/mkinitcpio.conf
文件 HOOKS
中,删除 kms
HOOKS=(base udev keyboard block autodetect microcode modconf keymap consolefont filesystems fsck)
然后运行:
sudo mkinitcpio -P
注意
对于 Wayland,Nvidia 还需要设置 DRM 内核级显示模式设置,不然可能会导致黑屏
添加环境变量,在 /etc/environment
中添加:
GBM_BACKEND=nvidia-drm
__GLX_VENDOR_LIBRARY_NAME=nvidia
Hyprland 则按如下设置,详细查看 https://wiki.hypr.land/Nvidia/:
env = LIBVA_DRIVER_NAME,nvidia
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia # Disable this if you have issues with screensharing