手上还有一台ax41-nvme,这台机器是uefi引导的,之前ks的那台机器是传统的bios引导,把zfs配置为根文件系统的话,在这两种不同的引导方式中配置也是有很大不同的,这里记录一下在uefi引导模式下的配置过程。
首先启动hz的救援系统,这个救援系统实际上就相当于一个debian11的livecd,还是经过hz定制过的,这就很舒服了,版本很新就不用像ks那样用qemu-kvm去套娃:
先随便执行一个zfs相关的命令,比如:
zpool
这时候会自动运行一个编译安装zfs的脚本,按y即可开始编译安装:
不得不说这里hz做的真的很人性化。。如果没有这个脚本的话,还得自己去编译。。那就麻烦大了。。因为hz救援系统的这个内核不是debian官方的内核。。
还是老样子查看硬盘的分区情况:
lsblk
机器有两块nvme的盘,nvme0n1是第一块盘,nvme1n1是第二块盘,分别有2个分区:
如果有raid阵列就先停止阵列,我这里没有就不用做了,所以直接清除两块硬盘的分区表即可:
wipefs -a /dev/nvme0n1p1 wipefs -a /dev/nvme1n1p1 wipefs -a /dev/nvme0n1p2 wipefs -a /dev/nvme1n1p2 wipefs -a /dev/nvme0n1 wipefs -a /dev/nvme1n1
给硬盘分区,两块硬盘都使用相同的分区方案,这里我以nvme0n1这块盘为例:
fdisk /dev/nvme0n1 fdisk /dev/nvme1n1
首先创建一个efi引导分区,给512m即可:
接着创建一个用于bpool池的分区,给1g即可:
最后把硬盘剩下的空间都划分掉,用于rpool池:
这里建议给efi分区做一个raid1,注意要添加–metadata=1.0参数:
mdadm --create /dev/md0 --level=raid1 --raid-devices=2 --metadata=1.0 /dev/nvme0n1p1 /dev/nvme1n1p1
创建文件系统:
mkfs.vfat /dev/md0
创建bpool池:
zpool create \ -f \ -o cachefile= \ -o ashift=12 -d \ -o feature@async_destroy=enabled \ -o feature@bookmarks=enabled \ -o feature@embedded_data=enabled \ -o feature@empty_bpobj=enabled \ -o feature@enabled_txg=enabled \ -o feature@extensible_dataset=enabled \ -o feature@filesystem_limits=enabled \ -o feature@hole_birth=enabled \ -o feature@large_blocks=enabled \ -o feature@livelist=enabled \ -o feature@lz4_compress=enabled \ -o feature@spacemap_histogram=enabled \ -o feature@zpool_checkpoint=enabled \ -O acltype=posixacl -O canmount=off -O compression=lz4 \ -O devices=off -O normalization=formD -O relatime=on -O xattr=sa \ -O mountpoint=/boot -R /mnt \ bpool \ /dev/nvme0n1p2 \ /dev/nvme1n1p2
创建rpool池:
zpool create \ -f \ -o ashift=12 \ -O acltype=posixacl -O canmount=off -O compression=lz4 \ -O normalization=formD -O relatime=on \ -O xattr=sa -O mountpoint=/ -R /mnt \ rpool \ /dev/nvme0n1p3 \ /dev/nvme1n1p3
创建文件系统数据集:
zfs create -o canmount=off -o mountpoint=none bpool/BOOT zfs create -o canmount=off -o mountpoint=none rpool/ROOT
为根和引导文件系统创建数据集:
zfs create -o canmount=noauto -o mountpoint=/ rpool/ROOT/debian zfs mount rpool/ROOT/debian zfs create -o mountpoint=/boot bpool/BOOT/debian
使用debootstrap把debian11的基础系统载入到/mnt目录:
debootstrap --arch amd64 bullseye /mnt
挂载虚拟文件系统:
mount --rbind /proc /mnt/proc mount --rbind /sys /mnt/sys mount --rbind /dev /mnt/dev
chroot到debian11的基础系统内:
chroot /mnt /bin/bash
编辑系统内的存储库配置文件:
nano /etc/apt/sources.list
把完整的存储库配置写上去:
deb http://deb.debian.org/debian bullseye main contrib non-free deb-src http://deb.debian.org/debian bullseye main contrib non-free deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb-src http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb http://deb.debian.org/debian bullseye-updates main contrib non-free deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free
编辑网络配置文件:
nano /etc/network/interfaces auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet static address xx.xx.xx.xx gateway xx.xx.xx.xx netmask xx.xx.xx.xx iface eth0 inet6 static address xx:xx:xx:xx::xx netmask 64 gateway fe80::1
这里的ip/网关/子网掩码参考你机器原系统内的配置即可。
配置dns服务器:
nano /etc/resolv.conf
写入如下配置:
nameserver 8.8.8.8 nameserver 8.8.4.4
设置主机名:
echo imlala > /etc/hostname
创建/boot/efi目录:
mkdir /boot/efi
把之前做好的raid1设备挂载到/boot/efi:
mount /dev/md0 /boot/efi
然后查看/dev/md0这个设备的uuid:
blkid
如图所示,记下箭头所指的内容:
编辑fstab:
nano /etc/fstab
用你刚才看到的UUID替换掉下面的配置:
UUID=1D14-9F5A /boot/efi vfat rw,relatime,errors=remount-ro 0 0
这里只需要配置efi分区的挂载点就够了,zfs不依赖fstab来挂载,所以不需要在fstab里面配置zfs相关的挂载点。
安装locales以及console-setup,配置系统的编码和时间:
apt -y install locales console-setup dpkg-reconfigure locales dpkg-reconfigure tzdata
具体的配置这里就省略了,可以参考:https://lala.im/8300.html
安装内核和zfs,这里额外装了一个firmware-realtek,我这个机器是螃蟹卡,需要装这个固件:
apt -y install dpkg-dev linux-headers-amd64 linux-image-amd64 apt -y install firmware-realtek apt -y install zfs-initramfs echo REMAKE_INITRD=yes > /etc/dkms/zfs.conf
[重要]生成zpool.cache缓存文件:
zpool set cachefile= bpool zpool set cachefile= rpool
可以检查一下zpool.cache文件是否存在:
cat /etc/zfs/zpool.cache
安装grub,注意这里的包名不再是grub-pc而是grub-efi-amd64,grub-pc是用于传统bios引导的,而grub-efi-amd64才是用于uefi引导的,另外这里必须要安装mdadm,因为在之前我们把efi分区做了一个raid1:
apt -y install grub-efi-amd64 shim-signed mdadm
安装grub:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --no-floppy --no-nvram --removable
注意这里必须要加上–no-nvram或者–removable参数,否则是不能正常安装的,原因参见:https://wiki.debian.org/UEFI#RAID_for_the_EFI_System_Partition
编辑grub配置文件:
nano /etc/default/grub
加入net.ifnames=0的内核启动参数,目的是让内核使用eth0这样的传统接口名:
GRUB_CMDLINE_LINUX_DEFAULT="quiet net.ifnames=0"
更新grub配置:
update-grub
验证一下zfs引导文件系统能否被识别,如果正常的话会回显zfs:
grub-probe /boot
刷新initrd:
update-initramfs -c -k all
设置root密码:
passwd
安装ssh服务:
apt -y install openssh-server
编辑ssh配置文件:
nano /etc/ssh/sshd_config
修改下面的配置以允许root登录:
PermitRootLogin yes
退出chroot环境:
exit
卸载所有zfs文件系统:
mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | \ xargs -i{} umount -lf {}
导出全部池:
zpool export -a
在hz后台重启服务器即可,新系统内简单检查一下:
一直在看你的博客很久了,一直没有勇气询问,终于现在鼓起勇气问问大神,请问有没有推荐自学debian的网址或书籍吗……或者关于自学你有什么建议吗?就是个人业务爱好,并不是当作生产力