时隔一年,又一次在 Btrfs 上安装 ArchLinux,再次记录一下(其实上次那篇还没写完就跑去用 openSUSE 了)
上次的快照管理用的是 TimeShift ,但去年用 openSUSE 时,其自带的 Snapper 蛮好用,这次便在 Arch 也使用相同软件(
系统安装
系统的安装参考官方的: Installation guide
这里主要记一下 Btrfs 的配置,可以点击这里跳到分区章节
连接网络
有线
插入网线的情况下,默认无需配置即可直接使用
无线
1 | iwctl # 进入 iwd 命令行 |
启用SSHD
tty还是太难用了,不如用另外一台可使用ssh的设备来进行操作
1 | systemctl start sshd |
更新系统时间
1 | timedatectl set-ntp true |
更换软件镜像源
没有额外配置的情况下官方源速度还是有点慢的,按喜好使用 vim
修改 /etc/pacman.d/mirrorlist
, 或者使用reflector
皆可
个人喜欢更直接一点:
1 | echo 'Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist |
磁盘分区
分区看个人喜好,反正 /
肯定要有
我的分区结构如下:
-
/dev/nvme0n1p1
/boot/efi
1G ,EFI 分区 -
/dev/nvme0n1p2
/
256G,根目录的Btrfs
分区 -
/dev/nvme0n1p3
/home
512G,家目录 XFS 分区(避免系统歇菜数据回不来) -
/dev/nvme0n1p4
Swap
8G,SWAP 用于休眠
创建分区
使用cfdisk /dev/nvme0n1
分区 (TUI真好用) (还是gdisk好用)
1 | root@archiso ~ # fdisk -l /dev/nvme0n1 |
格式化分区
EFI (/boot/efi) :
1 | mkfs.fat -F32 -n EFI /dev/nvme0n1p1 |
Btrfs (/) :
1 | mkfs.btrfs -f -L OS /dev/nvme0n1p2 |
XFS (/home) :
1 | mkfs.xfs -f -L HOME /dev/nvme0n1p3 |
Swap :
1 | mkswap -L SWAP /dev/nvme0n1p4 |
建立 Btrfs 子卷
不创建子卷用个锤锤Btrfs (bushi
子卷规划
此处参考了openSUSE Wiki :SDB:BTRFS
@
:对应/
@opt
:对应/opt
@root
:对应/root
@snapshots
:对应/.snapshots
@tmp
:对应/tmp
@var
:对应/var
其中 @tmp,@var
关闭写时复制
创建子卷
首先需要将 Btrfs
分区挂载到 /mnt
下:
1 | mount -t btrfs -o compress=zstd /dev/nvme0n1p2 /mnt |
compress 参数用于开启透明压缩,将会稍稍增加CPU 工作量,按需开启
创建子卷:
1 | btrfs su cr /mnt/@ |
随后便可 umount /mnt
来进行下一步配置。
挂载分区
使用需要的参数来挂载子卷及分区
子卷:
1 | mount -o subvol=@,defaults,noatime,ssd,discard=async,compress=zstd -m /dev/nvme0n1p2 /mnt |
HOME:
1 | mount -m /dev/nvme0n1p3 /mnt/home |
EFI 分区:
1 | mount -m /dev/nvme0n1p1 /mnt/boot/efi |
SWAP:
1 | swapon /dev/nvme0n1p4 |
对于 /tmp
和 /var
目录,使用 chattr
命令来设置文件属性以取消 CoW 特性:
1 | chattr +C /mnt/tmp |
子卷 @snapshots
暂不挂载,将在后续配置快照时使用
安装系统
基础系统
使用 pacstrap
安装基础系统
1 | pacstrap /mnt \ |
kernel 可选 :linux,linux-lts,linux-zen,linux-rt,linux-hardened
区别可查看:Kernel - ArchWiki
个人常用 linux-zen
+ linux-lts
安装微码
intel:
1 | pacstrap /mnt intel-ucode |
amd:
1 | pacstrap /mnt amd-ucode |
生成 fstab
1 | genfstab -U /mnt >> /mnt/etc/fstab |
注意在使用 genfstab
生成 fstab
时会给子卷加上 subvolid=
参数,这会导致恢复快照出现问题,可使用 sed -i 's/subvolid=.*,//' /path/to/fstab
删除
进入 chroot
1 | arch-chroot /mnt |
基础配置 - 系统
- 更改时区:
1 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
2. 设置主机名:
1 | echo arch >> /etc/hostname |
- 修改
hosts
:
1 | cat >> /etc/hosts << EOF |
- 语言及输入:
1 | echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen |
不建议将 LANG 设置为 zh_CN.UTF-8,在tty环境下cjk 字符无法显示,打patch当我没说(x
基础配置 - 软件
- 安装系统及常用软件包:
1 | pacman -Sy grub efibootmgr \ |
- 安装桌面环境及常用软件:
1 | pacman -S plasma-meta sddm plasma-wayland-session xdg-desktop-portal \ |
在大部分教程中,桌面环境是系统安装完成并重启之后安装的,但我个人是习惯在archiso中配置好大部分内容
用户配置
添加一个新用户并配置权限:
1 | passwd root |
1 | EDITOR=nvim visudo |
启动配置
- 由于系统使用了 BTRFS,需要对
/etc/mkinitcpio.conf
中的MODULES
稍作修改 :
1 | MODULES=(btrfs) |
并重新生成 initramfs :
1 | mkinitcpio -P |
- 安装 GRUB:
1 | grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id='Arch Linux' |
- 修改内核参数:
1 | 去掉 quiet 参数,调整 loglevel 值为 5 ,加入 nowatchdog 参数 |
注意:如果使用了以下参数:
1
2 GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT="true"可能会导致开机出现:error: sparse file not allowed
- 生成 GRUB 配置文件
1 | grub-mkconfig -o /boot/grub/grub.cfg |
- 启用网络管理及SDDM
1 | systemctl enable NetworkManager.service |
完成安装
1 | exit # 退出chroot |
进阶配置
有些配置在archiso不方便进行,开机之后再来
输入法
前面安装桌面环境中已经安装了fcitx5-rime
,使用 Rime Auto Deploy 来安装 rime-ice
1 | sudo pacman -Sy ruby |
系统休眠
- 确定swap分区uuid:
1 | sudo blkid |
- 修改内核启动参数:
1 | sudo vim /etc/default/grub |
- 找到 GRUB_CMDLINE_LINUX_DEFAULT ,加入:
resume=UUID=${UUID}
-
更新 GRUB 配置:
sudo grub-mkconfig -o /boot/grub/grub.cfg -
修改 /etc/mkinitcpio.conf 中的 HOOKS 行,添加 resume 值:
1 | sudo vim /etc/mkinitcpio.conf |
- 重新生成 initramfs:
1 | sudo mkinitcpio -P |
添加软件源
Arch Linux CN:
1 | cat >> /etc/pacman.conf << EOF |
Arch4edu:
1 | 导入 GPG Key |
AUR Helper
1 | sudo pacman -S paru |
/tmp
由于/tmp
是挂载的@tmp
子卷,而非由systemd
管理,这可能导致一些软件出现错误。
修改配置:
1 | cat >> etc/tmpfiles.d/tmp.conf << EOF |
快照配置
这里选择 snapper + grub-btrfs
Snapper
安装:
1 | sudo pacman -S snapper snap-pac |
创建 snapper 配置文件:
1 | sudo snapper -c root create-config / |
配置snapshots子卷
snapper默认会创建一个 /.snapshots
子卷,但这不archlinux,需要删掉~(当然,保持默认也能用)
1 | btrfs su del /.snapshots |
前面创建了 @snapshots
没有使用,现在是时候挂载了(
使用 sudo vim /etc/fstab
修改fstab(找着上面的挂载参数照抄,把子卷换成@snapshots
挂载点为:/.snapshots
) 这一步不好自动化:(
修改完成后用 sudo mount -a
重新挂载
配置 Snapper
配置用户组:
1 | sudo sed -i "s/ALLOW_USERS=\".*\"/ALLOW_USERS=\"$(whoami)\"/" /etc/snapper/configs/root |
配置快照规则:
1 | sudo vim /etc/snapper/configs/root |
启用自动快照:
1 | sudo systemctl enable --now snapper-timeline.timer |
Grub-Btrfs
安装:
1 | sudo pacman -S grub-btrfs inotify-tools |
启用:
1 | sudo systemctl enable --now grub-btrfsd.service |
Btrfs-assistant
快照/子卷GUI管理,没啥好说的,安装就行了
1 | sudo pacman -S btrfs-assistant |
参考
嗯,成功又写了一遍arch安装过程(逃