在ZFS上安装Archlinux并使用ZFSBootmenu+rEFInd引导(win11双启动)

刚折腾完Hyprland,又发现可以折腾zfs,那就继续折腾,用了两天的零碎时间,查了很多资料,安装了N遍,最后还是要照着archlinux wiki做最好
本次安装是在单独一块1T SSD硬盘操作,借用win11的ESP分区(已经将ESP分区扩展到1G)
没有单独分交换分区,而是使用 swap ZVOL 创建zfs卷
关于引导,放弃grub,使用zfsbootmenu和rEFInd组合来进行双系统引导

本人实机安装后一切正常,包括桌面环境
但是经过一天之后又滚回btrfs,如果想用ZFS,推荐FreeBSD

安装镜像选择:

有两种方式

1.使用支持ZFS的archlinux LiveCD(本次安装使用)

archzfs
最新的 iso 点击下载
这个LiveCD是基于Archlinux官方镜像,只加入了zfs模块

2.使用archlinux官方ISO

使用官方ISO启动后,用下面的命令安装zfs模块

curl -s https://archzfs.leibelt.de/media/setup/init | bash

注意:本文使用整个硬盘,不考虑使用虚拟机的情况

一、安装前准备工作

1、使用livecd引导

将下载的镜像丢进ventory里,然后重启,使用archzfs镜像引导

确保已经加载zfs模块

modprobe zfs
lsmod | grep zfs

2、清空整个硬盘

列出所有硬盘,确定自己要操作的硬盘,千万别选错了

# ls -la /dev/disk/by-id

找到要操作的硬盘后,设置一个变量,方便后续操作

# disk=/dev/disk/by-id/ata-CT1000MX500SSD1_2138E5D33BCE

清除与整个磁盘关联的任何 ZFS 标签
如果是新硬盘或者以前没有安装过ZFS的硬盘,可以忽略这条命令

# zpool labelclear -f $disk

清空分区表

# sgdisk --zap-all $disk

3、分区

3.1、创建EFI分区

我使用windows的EFI分区,就不单独创建了,
如果需要创建EFI分区或者SWAP分区,使用相应的命令创建

3.2、ROOT分区

整块硬盘分一个区

# sgdisk -n1:0:0 -t1:BF00 $disk

3.3、清空硬盘原有的zfs池(新硬盘或者从来没有用过ZFS的硬盘可以忽略)

# zpool labelclear -f &disk-part1

4、创建ZFS池

zpool create -f \
			-o ashift=12 \
			-O acltype=posixacl \
			-o autotrim=on \
			-O mountpoint=none \
			-O canmount=off \
			-O relatime=on \
			-O xattr=sa \
			-O normalization=formD \
			-O dnodesize=legacy \
			-O devices=off \
			-O compression=zstd \
			-R /mnt \
			zroot ${disk}-part1 

检查一下

# zpool status
pool: zroot
 state: ONLINE
config:
	NAME                                      STATE     READ WRITE CKSUM
	zroot                                     ONLINE       0     0     0
	 ata-CT1000MX500SSD1_2138E5D33BCE-part1  ONLINE       0     0     0
errors: No known data errors

5、创建数据集

5.1、创建系统数据集

# zfs create -o mountpoint=none zroot/data
# zfs create -o mountpoint=none zroot/ROOT
# zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/default
# zfs create -o mountpoint=/home zroot/data/home
# zfs create -o mountpoint=/root zroot/data/home/root

可以根据个人需要创建其他数据集

5.2、创建交换数据集(SWAP)

大小根据个人需要创建

# zfs create -V 16G -b $(getconf PAGESIZE) \
      -o compression=zle \
      -o logbias=throughput \
      -o sync=always \
      -o primarycache=metadata \
      -o secondarycache=none \
      -o com.sun:auto-snapshot=false \
      zroot/swap

格式化swap,不需要启用,如果使用swapon命令启用了,记得最后swapoff,不然无法导出zpool

# mkswap -f /dev/zvol/zroot/swap
# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
zroot                 23.8G   875G    96K  none
zroot/ROOT            5.33G   875G    96K  none
zroot/ROOT/default    5.33G   875G  5.33G  /
zroot/data            1.49G   875G    96K  none
zroot/data/home       1.49G   875G  1.49G  /home
zroot/data/home/root   140K   875G   140K  /root
zroot/swap            17.0G   892G    56K  -

6、导入导出测试

应该没有任何错误提示

zpool export zroot
zpool import -d /dev/disk/by-id -R /mnt zroot -N
zfs mount zroot/ROOT/default
zfs mount -a

检查是否挂载

# mount | grep mnt
zroot/ROOT/default on /mnt type zfs (rw,relatime,xattr,posixacl,casesensitive)
zroot/data/home on /mnt/home type zfs (rw,relatime,xattr,posixacl,casesensitive)
zroot/data/home/root on /mnt/root type zfs (rw,elatime,xattr,posixacl,casesensitive)

7、配置系统

不能漏掉这里的每一条命令,不然可能会无法启动

7.1、设置 bootfs

# zpool set bootfs=zroot/ROOT/default zroot

7.2、创建cache并复制到新系统

# zpool set cachefile=/etc/zfs/zpool.cache zroot
# mkdir -p /mnt/etc/zfs
# cp /etc/zfs/zpool.cache /mnt/etc/zfs/zpool.cache

7.3、挂载EFI分区

我挂载WIN11的EFI分区

# mkdir /mnt/efi
# mount -t vfat /dev/sda1 /mnt/efi

二、安装系统

1、安装基本系统

# pacstrap /mnt base base-devel linux-zen linux-zen-headers \
                linux-firmware intel-ucode git dkms helix
// 提示:helix是文本编辑器,我用它来替换vim               

2、生成fstab

将swap添加进去

# genfstab -U -p /mnt >> /mnt/etc/fstab
# echo '/dev/zvol/zroot/swap  none  swap  discard 0 0' >> /mnt/etc/fstab

3、CHROOT

# arch-chroot /mnt

编辑fstab文件,注释掉所有zroot行,只保留EFI和swap

# helix /etc/fstab
# Static information about the filesystems.
# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
# zroot/ROOT/default
#zroot/ROOT/default  	/         	zfs       	rw,nodev,xattr,posixacl,casesensitive	0 0

# zroot/data/home
#zroot/data/home     	/home     	zfs       	rw,nodev,xattr,posixacl,casesensitive	0 0

# zroot/data/home/root
#zroot/data/home/root	/root     	zfs       	rw,nodev,xattr,posixacl,casesensitive	0 0

# /dev/sda1
UUID=A75B-1665      	/efi      	vfat      	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro	0 2

# swap-zvol
/dev/zvol/zroot/swap	none		swap		discard		0 0

编辑/etc/pacman.conf,在最后加入下面代码

# helix /etc/pacman.conf
[archzfs]
# SigLevel = Optional TrustAll
# Origin Server - France
Server = http://archzfs.com/archzfs/x86_64
# Mirror - Germany
Server = http://mirror.sum7.eu/archlinux/archzfs/archzfs/x86_64
# Mirror - Germany
Server = https://mirror.biocrafting.net/archlinux/archzfs/archzfs/x86_64
# Mirror - India
Server = https://mirror.in.themindsmaze.com/archzfs/archzfs/x86_64
# Mirror - US
Server = https://zxcvfdsa.com/archzfs/archzfs/x86_64
# pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76
# pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76

4、安装zfs模块

我使用dkms

#  pacman -Sy zfs-dkms 

编辑mkinitcpio文件,MODULES加入zfs,删除HOOK里的fsck,在filesystems前面加上zfs

# helix /etc/mkinitcpio.conf
MODULES=(zfs)
HOOK(... keyboard zfs filesystems)

生成 hostid

# zgenhostid $(hostid)

重新生成 initramfs

# mkinitcpio -P

5、安装其他软件

# pacman -S man-db man-pages efibootmgr networkmanager \
            terminus-font texinfo mtools dosfstools \
            pacman-contrib openssh bash-completion sudo

6、启动后台服务

# systemctl enable NetworkManager
# systemctl enable zfs.target
# systemctl enable zfs-import-cache
# systemctl enable zfs-mount
# systemctl enable zfs-import.target
# systemctl enable zfs-zed

7、安装引导

ZFSBootMenu 下载
写这篇文章的时候zfsbootmenu的版本是 zfsbootmenu-release-x86_64-v2.3.0-vmlinuz.EFI
将这个文件下载

# curl -O -L https://get.zfsbootmenu.org/zfsbootmenu.EFI
# mkdir -p /efi/EFI/zbm
# mv zfsbootmenu-release-x86_64-v2.3.0-vmlinuz.EFI /efi/EFI/zbm/zfsbootmenu-v2.3.0.EFI

设置启动参数 ,rw是必须的,不然只能以只读模式进入系统,无法进行任何操作,我安装的时候就忘记输入
最后重新用U盘启动,chroot进来加上这句才好

# zfs set org.zfsbootmenu:commandline="rw quiet loglevel=0 nowatchdog" zroot/ROOT

/dev/sda是我安装win11的硬盘,sda -p 1是efi分区

# efibootmgr -c -d /dev/sda -p 1 -L "ArchLinux(ZFS)" -l '\EFI\zbm\zfsbootmenu-v2.3.0.EFI'

可选:使用rEFInd管理启动菜单,如果不想用refind也可以,我是为了双启动方便

# pacman -S refind
# refind-install --usedefault /dev/sda1

编辑refind.conf文件,先注释掉全部menuentry的内容
然后加入下面的内容,其中icon项我安装的nord主题

# helix /efi/EFI/refind/refind.conf
dont_scan_dirs EFI/Boot,EFI/Microsoft/Boot,EFI/refind,EFI/zbm
dont_scan_volumes ext2,ext3,ext4,ntfs,OSX,EFI0,SYSTEM,EFIU,EFIM
scan_all_linux_kernels false

menuentry "Archlinux (ZBM)" {
    loader \EFI\zbm\zfsbootmenu-v2.3.0.EFI
    icon \EFI\refind\themes\nord\icons\os_arch.png
    options "quiet loglevel=0"
}

menuentry "Windows 11 Pro" {
    icon \EFI\refind\themes\nord\icons\os_win.png
    loader \EFI\Microsoft\Boot\bootmgfw.efi
}
如果安装了theme,在这里导入
include themes/nord/theme.conf
}

三 、按照Archlinux wiki继续完成系统的安装

1、时区

# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime    
# hwclock --systohc

2、locale

# helix /etc/locale.gen

搜索en_US和zh_CN
取消下面两行的注释
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
保存退出

# locale-gen

3、LANG

不建议设为zh_CN

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

4、主机名

# echo '主机名' > /etc/hostname

5、HOSTS

echo -e '127.0.0.1 localhost\n::1 localhost\n127.0.1.1 主机名' >> /etc/hosts

5、root密码

# passwd

四. 重启进入新系统

生成快照

# zfs snapshot zroot@install
# exit
# umount /mnt/efi

# zfs umount -a
# zpool export zroot
# reboot

五、重启后的一些设置

先用root登录
创建用户并设置密码

# useradd -m -G wheel 用户名
# passwd 用户名

设置一下sudo

 # EDITOR=helix visudo

找到下面一行,取消注释

%wheel ALL=(ALL:ALL) ALL

双系统时间问题
百度:Windows 系统使用 UTC

# timedatectl set-ntp 1

设置archlinuxcn

# helix /etc/pacman.conf

取消Color和ParallelDownloads = 5 两行的注释,添加一行ILoveCandy(下载包时使用吃豆人动画)

Color
ParallelDownloads = 5
ILoveCandy

在文件最后加入archlinuxcn仓库
全部仓库地址在这里

[archlinuxcn]
Server = https://mirrors.bfsu.edu.cn/archlinuxcn/$arch

# pacman-key --lsign-key "farseerfc@archlinux.org"
# pacman -Sy archlinuxcn-keyring

安装rust,学习rust中~
先退出root,用自己的账号登录

配置rustup使用国内境像,编辑.bashrc,如果后期使用zsh,则在.zshrc中添加下面两行

$ ~/.bashrc

export RUSTUP_DIST_SERVER=“https://rsproxy.cn”
export RUSTUP_UPDATE_ROOT=“https://rsproxy.cn/rustup”

$ source ~/.bashrc

创建cargo文件夹,新建config文件,加入下面的内容

$ mkdir -v ~/.cargo
$ helix ~/.cargo/config

[source.crates-io]
replace-with = ‘rsproxy-sparse’
[source.rsproxy]
registry = “https://rsproxy.cn/crates.io-index”
[source.rsproxy-sparse]
registry = “sparse+https://rsproxy.cn/index/”
[registries.rsproxy]
index = “https://rsproxy.cn/crates.io-index”
[net]
git-fetch-with-cli = true

安装rust

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装paru

$ sudo pacman -S paru

修改一下paru配置文件,具体项目根据自己需求设置

$ sudo helix /etc/paru.conf

这是我的paru配置文件

[options]
PgpFetch
Devel
Provides
DevelSuffixes = -git -cvs -svn -bzr -darcs -always -hg -fossil
BottomUp
RemoveMake
SudoLoop = true
CleanAfter

安装字体

$ sudo pacman -S noto-fonts noto-fonts-cjk

打开字体引擎 (注:这个文件在安装桌面环境之后才会有)

$ helix /etc/profile.d/freetype2.sh
取消最后一行的注释

安装输入法

$ pacman -S fcitx5-im fcitx5-chinese-addons
$ sudo helix /etc/environment

加入下面的内容

INPUT_METHOD=fcitx
GTK_IM_MODULE=fcitx #这一行可以注释掉
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus

AUR编译优化

$ sudo helix /etc/makepkg.conf

CFLAGS=“-march=native -O2 …” # 先将 -march 和 -mtune 删除,再添加 -march=native
MAKEFLAGS=“-j$(nproc)” # 不要忘记去掉“#”,多核处理器可以启用并行编译,缩短编译时间
BUILDDIR=/tmp/makepkg # 去掉“#”,使用内存文件系统进行编译
COMPRESSZST=(zstd -c -z -q --threads=0 -) # 在压缩时使用多个 CPU 核心

注意:
在 tmpfs 中构建大型软件包时可能会内存不足。
tmpfs 目录挂载时不能使用 noexec 选项,否则编译命令无法执行。
在 tmpfs 中编译的文件重启后会消失,设置 PKGDEST 选项可以将构建结果保存到其它目录。

OK,基本系统安装完毕

安装桌面可以看看我前几天写的Hyprland桌面安装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值