原文地址:https://lala.im/8300.html,請支持原作者!該處僅作轉載。
在熟悉了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
新系统内检查一下: