静看光阴荏苒
不管不顾不问不说也不念

Kimsufi独服安装Debian11并将ZFS作为根文件系统

在熟悉了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

新系统内检查一下:

赞(7)
未经允许不得转载:荒岛 » Kimsufi独服安装Debian11并将ZFS作为根文件系统
分享到: 更多 (0)

评论 4

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    我喜歡你的滑鼠系統,感覺可以和你做朋友 😂

    tg@mixwp2年前 (2022-04-02) Firefox 98.0 Firefox 98.0 Android 10 Android 10回复
  2. #2

    lala居然活了 :razz:

    橘子2年前 (2022-04-02) Google Chrome 100.0.4846.160 Google Chrome 100.0.4846.160 Mac OS X  11.1 Mac OS X 11.1回复

分享创造快乐

广告合作资源投稿