在熟悉了debootstrap安装debian基础系统的步骤后,现在可以稍微深入一点做一些定制化的东西了,比如说这篇文章要介绍的将zfs作为根文件系统。
还是和之前一样,由于ks的救援系统内自带的debootstrap安装系统后不能正常启动,这里还是绕个弯,先装qemu-kvm,在虚拟机内启动一个livecd安装debootstrap。
另外ks这个救援系统内的zfs内核模块也是很旧的版本了,有很多新的特性都不支持,所以无论如何都还是得用虚拟机起一个livecd。。
注意本文提供的安装方法仅适用于传统bios引导,如果是uefi引导的话有些配置是不同的。
在救援系统内安装qemu-kvm:
apt -y update apt -y install qemu qemu-kvm
下载debian11的livecd,这里建议选择一个带桌面环境的版本,我这里选择的是xfce:
wget https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-11.3.0-amd64-xfce.iso
启动livecd:
qemu-system-x86_64 \ -enable-kvm \ -nodefaults \ -cdrom /root/debian-live-11.3.0-amd64-xfce.iso \ -hda /dev/sda \ -hdb /dev/sdb \ -cpu host \ -smp 4 \ -m 8G \ -net nic \ -net user \ -vga std \ -vnc 127.0.0.1:0 \ -usbdevice tablet \ -k en-us \ -boot d
现在你需要建立一个ssh隧道来连接到虚拟机的vnc,整个配置过程可以参考:https://lala.im/8123.html
在vnc内选择第一个菜单启动:
等待片刻,应该可以看到xfce的桌面了,打开终端:
切换到root用户下:
sudo -i
编辑livecd的存储库配置文件:
nano /etc/apt/sources.list
zfs相关的软件包不在main分类内,加入contrib这一分类:
deb http://deb.debian.org/debian bullseye main contrib
在livecd内安装debootstrap以及zfs:
apt -y update apt -y install debootstrap zfsutils-linux
查看硬盘的分区信息:
lsblk
如果有raid阵列正在运行,先停止raid阵列:
mdadm --stop /dev/md0
然后清除硬盘的分区表:
wipefs -a /dev/sda wipefs -a /dev/sdb
接下来给硬盘分区,两块硬盘都执行相同的分区操作,这里我以sda这块盘为例:
fdisk /dev/sda fdisk /dev/sdb
使用zfs建议采用gpt的方式来给硬盘分区,即便使用的是传统bios引导也推荐使用gpt。
首先创建一个1m大小的biosboot分区:
接着创建一个1g大小的分区,用于zfs的引导池:
最后把硬盘剩下的容量全部划分到一个分区,用于zfs的根池:
创建引导池:
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@lz4_compress=enabled \ -o feature@spacemap_histogram=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/sda2 \ /dev/sdb2
创建根池:
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/sda3 \ /dev/sdb3
创建文件系统数据集:
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
修改ip/网关/子网掩码:
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
这里的ip/网关/子网掩码参考你机器原系统内的配置即可。
配置dns服务器:
nano /etc/resolv.conf
写入如下配置:
nameserver 8.8.8.8 nameserver 8.8.4.4
设置主机名:
echo imlala > /etc/hostname
更新存储库:
apt -y update
安装locales以及console-setup:
apt -y install locales console-setup
配置系统编码:
dpkg-reconfigure locales
选择en_US.UTF-8:
这里也选择en_US.UTF-8:
配置系统时间:
dpkg-reconfigure tzdata
选择asia/shanghai:
安装内核和zfs:
apt -y install dpkg-dev linux-headers-amd64 linux-image-amd64 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:
apt -y install grub-pc
将grub分别安装到两块硬盘:
grub-install /dev/sda grub-install /dev/sdb
编辑grub配置文件:
nano /etc/default/grub
加入net.ifnames=0以及biosdevname=0的内核启动参数,目的是让内核使用eth0这样的传统接口名:
GRUB_CMDLINE_LINUX_DEFAULT="quiet net.ifnames=0 biosdevname=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
关闭虚拟机再启动一次,去掉之前-boot d的参数让qemu-kvm从硬盘引导,检查一下新装的系统能不能正常启动:
qemu-system-x86_64 \ -enable-kvm \ -nodefaults \ -cdrom /root/debian-live-11.3.0-amd64-xfce.iso \ -hda /dev/sda \ -hdb /dev/sdb \ -cpu host \ -smp 4 \ -m 8G \ -net nic \ -net user \ -vga std \ -vnc 127.0.0.1:0 \ -usbdevice tablet \ -k en-us
可以的话就大功告成了,在ks后台把引导改为从硬盘启动,然后重启服务器即可。
如果有问题,在livecd内安装好zfs,之后执行下面的命令挂载zfs文件系统:
zpool export -a zpool import -N -R /mnt rpool zpool import -N -R /mnt bpool zfs load-key -a zfs mount rpool/ROOT/debian zfs mount -a
chroot进去修:
mount --rbind /proc /mnt/proc mount --rbind /sys /mnt/sys mount --rbind /dev /mnt/dev chroot /mnt /bin/bash
新系统内检查一下:
我喜歡你的滑鼠系統,感覺可以和你做朋友 😂
lala居然活了