时隔一年,又一次在 Btrfs 上安装 ArchLinux,再次记录一下(其实上次那篇还没写完就跑去用 openSUSE 了)
上次的快照管理用的是 TimeShift ,但去年用 openSUSE 时,其自带的 Snapper 蛮好用,这次便在 Arch 也使用相同软件(
系统的安装参考官方的: Installation guide
这里主要记一下 Btrfs 的配置,可以点击这里跳到分区章节
插入网线的情况下,默认无需配置即可直接使用
1iwctl # 进入 iwd 命令行
2[iwd#] device list # 查询网卡设备
3[iwd#] station <devicename> connect <wifi-ssid> # 连接 WiFi
4[iwd#] exit # 退出 iwd
tty还是太难用了,不如用另外一台可使用ssh的设备来进行操作
1systemctl start sshd
1timedatectl set-ntp true
没有额外配置的情况下官方源速度还是有点慢的,按喜好使用 vim
修改 /etc/pacman.d/mirrorlist
, 或者使用 reflector
皆可
个人喜欢更直接一点:
1echo 'Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist
分区看个人喜好,反正 /
肯定要有
我的分区结构如下:
/dev/nvme0n1p1 /efi
1G ,EFI 分区
/dev/nvme0n1p2 /
1024G,根目录的 Btrfs
分区
/dev/nvme0n1p3 Swap
8G,SWAP 用于休眠
使用 cfdisk /dev/nvme0n1
分区 (TUI真好用) (还是gdisk好用)
ESP (/efi) :
1mkfs.fat -F32 -n XESP /dev/nvme0n1p1
Btrfs (/) :
1mkfs.btrfs -f -L XOS /dev/nvme0n1p2
Swap :
1mkswap -L SWAP /dev/nvme0n1p3
不创建子卷用个锤锤 Btrfs (bushi
此处参考了openSUSE Wiki :SDB:BTRFS
@
:对应 /
@docker
:对应 /var/lib/docker
@flatpak
:对应 /var/lib/flatpak
@home
:对应 /home
@opt
:对应 /opt
@snapshots
:对应 /.snapshots
@var_cache
:对应 /var/cache
@var_log
:对应 /var/log
@var_tmp
:对应 /var/tmp
其中 @var_cache,@var_log,@var_tmp
关闭写时复制
首先需要将 Btrfs
分区挂载到 /mnt
下:
1mount -t btrfs -o compress=zstd /dev/nvme0n1p2 /mnt
compress 参数用于开启透明压缩,将会稍稍增加 CPU 工作量,按需开启
创建子卷:
1btrfs su cr /mnt/@
2btrfs su cr /mnt/@docker
3btrfs su cr /mnt/@flatpak
4btrfs su cr /mnt/@home
5btrfs su cr /mnt/@opt
6btrfs su cr /mnt/@snapshots
7btrfs su cr /mnt/@var_cache
8btrfs su cr /mnt/@var_log
9btrfs su cr /mnt/@var_tmp
随后便可 umount /mnt
来进行下一步配置。
使用需要的参数来挂载子卷及分区
1DISK=/dev/disk/by-partlabel
2BTRFS_OPTS=compress=zstd,noatime,ssd,space_cache=v2
子卷:
1mount -o subvol=@,$BTRFS_OPTS -m $DISK/XOS /mnt
2mount -o subvol=@docker,$BTRFS_OPTS -m $DISK/XOS /mnt/var/lib/docker
3mount -o subvol=@flatpak,$BTRFS_OPTS -m $DISK/XOS /mnt/var/lib/flatpak
4mount -o subvol=@home,$BTRFS_OPTS -m $DISK/XOS /mnt/home
5mount -o subvol=@opt,$BTRFS_OPTS -m $DISK/XOS /mnt/opt
6mount -o subvol=@snapshots,$BTRFS_OPTS -m $DISK/XOS /mnt/.snapshots
7mount -o subvol=@var_cache,$BTRFS_OPTS -m $DISK/XOS /mnt/var/cache
8mount -o subvol=@var_log,$BTRFS_OPTS -m $DISK/XOS /mnt/var/log
9mount -o subvol=@var_tmp,$BTRFS_OPTS -m $DISK/XOS /mnt/var/tmp
EFI 分区:
1mount -m $DISK/XESP /mnt/efi
SWAP:
1swapon /dev/nvme0n1p4
使用 chattr
命令来设置文件属性以取消部分文件夹 CoW 特性:
1chattr +C /mnt/var/cache
2chattr +C /mnt/var/log
3chattr +C /mnt/var/tmp
使用 pacstrap
安装基础系统
1pacstrap /mnt \
2 base base-devel \
3 linux-zen linux-firmware sof-firmware \
4 btrfs-progs
kernel 可选 :linux,linux-lts,linux-zen,linux-rt,linux-hardened
区别可查看:Kernel - ArchWiki
个人常用 linux-zen
+ linux-lts
intel:
1pacstrap /mnt intel-ucode
amd:
1pacstrap /mnt amd-ucode
1genfstab -U /mnt >> /mnt/etc/fstab
2sed -i 's/subvolid=.*,//' /mnt/etc/fstab
注意在使用 genfstab
生成 fstab
时会给子卷加上 subvolid=
参数,这会导致恢复快照出现问题,可使用 sed -i 's/subvolid=.*,//' /path/to/fstab
删除
arch-chroot /mnt su -
1ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2hwclock --systohc
2. 设置主机名:
1echo arch >> /etc/hostname
hosts
:1cat >> /etc/hosts << EOF
2127.0.0.1 localhost
3::1 localhost
4127.0.1.1 arch.localdomain arch
5EOF
1echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
2echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
3locale-gen
4echo "LANG=en_US.UTF-8" >> /etc/locale.conf
5echo KEYMAP=us >> /etc/vconsole.conf
不建议将 LANG 设置为 zh_CN.UTF-8,在tty环境下cjk 字符无法显示,打patch当我没说(x
1pacman -Sy grub efibootmgr \
2 linux-zen-headers linux-lts linux-lts-headers \
3 networkmanager git subversion sudo ruby \
4 helix neofetch zsh fd fzf exa bat
1pacman -S plasma-meta sddm plasma-wayland-session xdg-desktop-portal \
2 noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra wqy-zenhei \
3 konsole dolphin gwenview ark kleopatra \
4 packagekit-qt5 packagekit appstream-qt appstream \
5 fcitx5-im fcitx5-material-color fcitx5-rime \
6 firefox chromium
在大部分教程中,桌面环境是系统安装完成并重启之后安装的,但我个人是习惯在 archiso 中配置好大部分内容
添加一个新用户并配置权限:
1passwd root
2useradd -m -G wheel -s /bin/bash USERNAME
3passwd USERNAME
1EDITOR=helix visudo
2#找到 : # %wheel ALL=(ALL) ALL
3#改为:
4%wheel ALL=(ALL) ALL
/etc/mkinitcpio.conf
中的 MODULES
稍作修改 :1MODULES=(btrfs)
并重新生成 initramfs :
1mkinitcpio -P
1grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id='Arch Linux'
1# 去掉 quiet 参数,调整 loglevel 值为 5 ,加入 nowatchdog 参数
2
3sed -i "s|GRUB_CMDLINE_LINUX_DEFAULT.*|GRUB_CMDLINE_LINUX_DEFAULT=\"loglevel=5 nowatchdog\"|" /etc/default/grub
注意:如果使用了以下参数:
GRUB_DEFAULT=saved GRUB_SAVEDEFAULT="true"
可能会导致开机出现:error: sparse file not allowed
1grub-mkconfig -o /boot/grub/grub.cfg
1systemctl enable NetworkManager.service
2systemctl enable sddm.service
1exit # 退出chroot
2umount -R /mnt # 卸载目录
3reboot
有些配置在 archiso 不方便进行,开机之后再来
前面安装桌面环境中已经安装了 fcitx5-rime
,使用 Rime Auto Deploy 来安装 rime-ice
1sudo pacman -Sy ruby
2git clone --depth=1 https://github.com/Mark24Code/rime-auto-deploy.git --branch latest
3cd rime-auto-deploy
4./installer.rb
1sudo blkid
1sudo vim /etc/default/grub
1sudo grub-mkconfig -o /boot/grub/grub.cfg
1sudo vim /etc/mkinitcpio.conf
2......
3HOOKS=(... udev resume ...)
4......
1sudo mkinitcpio -P
Arch Linux CN:
1cat >> /etc/pacman.conf << EOF
2[archlinuxcn]
3Server = https://mirrors.bfsu.edu.cn/archlinuxcn/\$arch
4EOF
5sudo pacman -Sy archlinuxcn-keyring
Arch4edu:
1#导入 GPG Key
2pacman-key --recv-keys 7931B6D628C8D3BA
3pacman-key --finger 7931B6D628C8D3BA
4pacman-key --lsign-key 7931B6D628C8D3BA
5#添加源
6cat >> /etc/pacman.conf << EOF
7[arch4edu]
8Server = https://mirrors.bfsu.edu.cn/arch4edu/\$arch
9EOF
1sudo pacman -S paru
这里选择 snapper + grub-btrfs
安装:
1sudo pacman -S snapper snap-pac
创建 snapper
配置文件:
1sudo snapper -c root create-config /
snapper
默认会创建一个 /.snapshots
子卷,但这不archlinux,需要删掉~(当然,保持默认也能用)
1btrfs su del /.snapshots
2mkdir /.snapshots
前面创建了 @snapshots
没有使用,现在是时候挂载了(
使用 sudo vim /etc/fstab
修改fstab(找着上面的挂载参数照抄,把子卷换成 @snapshots
挂载点为:/.snapshots
) 这一步不好自动化:(
修改完成后用 sudo mount -a
重新挂载
配置用户组:
1sudo sed -i "s/ALLOW_USERS=\".*\"/ALLOW_USERS=\"$(whoami)\"/" /etc/snapper/configs/root
2sudo sed -i "s/ALLOW_GROUPS=\".*\"/ALLOW_GROUPS=\"$(whoami)\"/" /etc/snapper/configs/root
配置快照规则:
1sudo vim /etc/snapper/configs/root
2......
3# limits for timeline cleanup
4TIMELINE_MIN_AGE="1800"
5TIMELINE_LIMIT_HOURLY="5"
6TIMELINE_LIMIT_DAILY="7"
7TIMELINE_LIMIT_WEEKLY="0"
8TIMELINE_LIMIT_MONTHLY="0"
9TIMELINE_LIMIT_YEARLY="0"
10......
启用自动快照:
1sudo systemctl enable --now snapper-timeline.timer
2sudo systemctl enable --now snapper-cleanup.timer
安装:
1sudo pacman -S grub-btrfs inotify-tools
启用:
1sudo systemctl enable --now grub-btrfsd.service
2grub-mkconfig -o /boot/grub/grub.cfg
快照/子卷GUI管理,没啥好说的,安装就行了
1sudo pacman -S btrfs-assistant
嗯,成功又写了一遍arch安装过程(逃