«

hyper v中安装debian(在zfs中)

学长 发布于 阅读:688 软件


安装 Debian 10 到 ZFS Mirror 阵列 | LOGGER

How to install ZFS in Debian 12 "Bookworm" - nixCraft

先使用live镜像 Debian -- Live 安装映像

开启终端

先给分区

ls /dev/sd?

看看读到了哪个盘。。。

fdisk /dev/sda

m

看下有什么指令gdisk也行,但我还是喜欢fdisk

g

新建GPT分区列表

n

1

第一个分区默认2048开始,直接回车执行default

+1G

因为之前的PVE的efi分区不够大给我整的。。。

默认的分区类型是linux filesystem。。。所以我们按

t

1

改成efi 分区

PVE是直接就一个zfs的。。。我不仿照debian10的办法再来个bpool了,直接rpool了。。。

n

三个回车,虚拟硬盘剩下的全给这个分区了。。。

t

default 是 2就直接回车了

l

看下需要设置成啥。。。apple zfs啥的我记得。。。solaris /usr & apple zfs最后的end 按q

157

w

写入分区就结束了


最好还是最寻官方的:

sudo -i

切换到root

设置变量DISK,SATA_disk1要改成你具体硬盘的

DISK=/dev/disk/by-id/scsi-SATA_disk1
DISK=/dev/disk/by-id/scsi-SATA_disk1

下面就是zfs驱动的问题了。。。

第一步改源

sudo sed -r -i'.BAK' 's/^deb(.*)$/deb\1 contrib/g' /etc/apt/sources.list

额。。。debain 12的user没权限。。。

sudo apt update

sudo apt install linux-headers-amd64 zfsutils-linux zfs-dkms zfs-zed

2025年

sudo apt install zfsutils-linux

就可以,livecd中linux-headers不需要额外装,zfsutils-linux装完zfs-dkms zfs-zed就不用装了

如果是云服务参考这个 sudo apt install linux-headers-cloud-amd64 zfsutils-linux zfs-dkms zfs-zed不是就忽略。不知道是不是我4096的内存分配不够。。。卡在zfs-dkms上。。。并不是。。。而是第一个linux-headers-amd64卡在78%。。。或者说。。。等久点就好了。。。鼠标出来容易彻底卡死。。。反正我给8G的内存了。。。

开启

sudo modprobe zfs

查看是否成功
sudo zfs version

会返回

zfs-2.1.11-1+deb12u1
zfs-kmod-2.1.11-1+deb12u1

sudo zpool create create rpool /dev/sda2

然后zfs新建个给根目录的,我是对home没有求,直接放在根下就好了

sudo zfs create rpool/ROOT

在ROOT下面在新建个可以mount到/的,我也不知道为什么仿照pve和truenas这么做的,pve的canmount没有特殊设置,truenas的noauto挺多的。。。mountpoint=none也没太大必要

那我就仿照上面的

sudo zfs create -o mountpoint=/ rpool/ROOT/Debian12

因为debian10的那个是-o canmount=noauto,所以需要sudo zfs mount rpool/ROOT/Debian12


安装debian

sudo apt install debootstrap

然后可以通过debootstrap来安装

sudo debootstrap buster /mnt

Debian Bookworm Root on ZFS — OpenZFS documentation

我还是按照openzfs官网的Debian Bookworm来吧

sudo debootstrap bookworm /mnt

进入mnt中的系统设置

mkdir /mnt/etc/zfs
sudo cp /etc/zfs/zpool.cache /mnt/etc/zfs/

1 跟换 HOSTNAME 成你自己想要的hostname:

Add a line:
127.0.1.1       HOSTNAME
or if the system has a real name in DNS:
127.0.1.1       FQDN HOSTNAME

2 设置网络,因为国会得chroot在mnt中的系统中apt需要的包

查看有什么网络可以用的

ip addr show

改变eth0成为你的具体网卡的名字

sudo vi /mnt/etc/network/interfaces.d/eth0

auto eth0
iface eth0 inet dhcp

3 设置源

sudo vi /mnt/etc/apt/sources.list
deb http://deb.debian.org/debian bookworm main contrib non-free-firmware
deb-src http://deb.debian.org/debian bookworm main contrib non-free-firmware

deb http://deb.debian.org/debian-security bookworm-security main contrib non-free-firmware
deb-src http://deb.debian.org/debian-security bookworm-security main contrib non-free-firmware

deb http://deb.debian.org/debian bookworm-updates main contrib non-free-firmware
deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free-firmware

可以清除全部直接复制这个

4 从liveCD切换到刚刚debootstrap在mnt中的系统

sudo mount --make-private --rbind /dev  /mnt/dev
sudo mount --make-private --rbind /proc /mnt/proc
sudo mount --make-private --rbind /sys  /mnt/sys
sudo chroot /mnt /usr/bin/env DISK=$DISK bash --login

5 在/mnt中的系统安装包

apt update

apt install --yes console-setup locales

选择 en_US.UTF-8 就行了

dpkg-reconfigure locales tzdata keyboard-configuration console-setup

6 安装zfs到刚才的mnt中的系统

apt install --yes dpkg-dev linux-headers-generic linux-image-generic

apt install --yes zfs-initramfs

echo REMAKE_INITRD=yes > /etc/dkms/zfs.conf

7 LUKS 安装的设置这个,一般不用设置

apt install --yes cryptsetup cryptsetup-initramfs

echo luks1 /dev/disk/by-uuid/$(blkid -s UUID -o value ${DISK}-part4) \
    none luks,discard,initramfs > /etc/crypttab
apt install systemd-timesyncd

8 安装NTP

apt install systemd-timesyncd

9 设置grub

这是legacy (BIOS)

apt install --yes grub-pc

EFI安装

apt install dosfstools

mkdosfs -F 32 -s 1 -n EFI ${DISK}-part2
mkdir /boot/efi
echo /dev/disk/by-uuid/$(blkid -s UUID -o value ${DISK}-part2) \
   /boot/efi vfat defaults 0 0 >> /etc/fstab
mount /boot/efi
apt install --yes grub-efi-amd64 shim-signed

我自己整的最后找不到boot。。。
最后根据官方的来了。。。

gsettings set org.gnome.desktop.media-handling automount false

sudo -i

apt install --yes debootstrap gdisk zfsutils-linux

DISK=/dev/disk/by-id/scsi-SATA_disk1

swapoff --all
wipefs -a $DISK
blkdiscard -f $DISK

sgdisk --zap-all $DISK

sgdisk -a1 -n1:24K:+1000K -t1:EF02 $DISK
sgdisk     -n2:1M:+1G   -t2:EF00 $DISK
sgdisk     -n3:0:+3G      -t3:BF01 $DISK
sgdisk     -n4:0:0        -t4:BF00 $DISK

zpool create \
   -o ashift=12 \
   -o autotrim=on \
   -o compatibility=grub2 \
   -o cachefile=/etc/zfs/zpool.cache \
   -O devices=off \
   -O acltype=posixacl -O xattr=sa \
   -O compression=lz4 \
   -O normalization=formD \
   -O relatime=on \
   -O canmount=off -O mountpoint=/boot -R /mnt \
   bpool ${DISK}-part3

zpool create \
 -o ashift=12 \
 -o autotrim=on \
 -O acltype=posixacl -O xattr=sa -O dnodesize=auto \
 -O compression=lz4 \
 -O normalization=formD \
 -O relatime=on \
 -O canmount=off -O mountpoint=/ -R /mnt \
 rpool ${DISK}-part4

zfs create -o canmount=off -o mountpoint=none rpool/ROOT
zfs create -o canmount=off -o mountpoint=none bpool/BOOT

zfs create -o canmount=noauto -o mountpoint=/ rpool/ROOT/debian
zfs mount rpool/ROOT/debian

zfs create -o mountpoint=/boot bpool/BOOT/debian

zfs create                     rpool/home
zfs create -o mountpoint=/root rpool/home/root
chmod 700 /mnt/root
zfs create -o canmount=off     rpool/var
zfs create -o canmount=off     rpool/var/lib
zfs create                     rpool/var/log
zfs create                     rpool/var/spool

zfs create -o com.sun:auto-snapshot=false rpool/var/cache
zfs create -o com.sun:auto-snapshot=false rpool/var/lib/nfs
zfs create -o com.sun:auto-snapshot=false rpool/var/tmp
chmod 1777 /mnt/var/tmp

zfs create -o com.sun:auto-snapshot=false  rpool/tmp
chmod 1777 /mnt/tmp

mkdir /mnt/run
mount -t tmpfs tmpfs /mnt/run
mkdir /mnt/run/lock

apt install debootstrap

debootstrap bookworm /mnt

mkdir /mnt/etc/zfs
cp /etc/zfs/zpool.cache /mnt/etc/zfs/

----------------------------------------
apt install vim

hostname UX-Debian
hostname > /mnt/etc/hostname
vi /mnt/etc/hosts

ip addr show

vi /mnt/etc/network/interfaces.d/eth0

-------------------------
auto eth0
iface eth0 inet dhcp
-------------------------

vi /mnt/etc/apt/sources.list

----------------------------------
deb http://deb.debian.org/debian bookworm main contrib non-free-firmware
deb-src http://deb.debian.org/debian bookworm main contrib non-free-firmware

deb http://deb.debian.org/debian-security bookworm-security main contrib non-free-firmware
deb-src http://deb.debian.org/debian-security bookworm-security main contrib non-free-firmware

deb http://deb.debian.org/debian bookworm-updates main contrib non-free-firmware
deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free-firmware
----------------------------------

mount --make-private --rbind /dev  /mnt/dev
mount --make-private --rbind /proc /mnt/proc
mount --make-private --rbind /sys  /mnt/sys
chroot /mnt /usr/bin/env DISK=$DISK bash --login

apt update
apt install --yes console-setup locales

dpkg-reconfigure locales tzdata keyboard-configuration console-setup

apt install --yes dpkg-dev linux-headers-generic linux-image-generic
apt install --yes zfs-initramfs
echo REMAKE_INITRD=yes > /etc/dkms/zfs.conf

apt install systemd-timesyncd
apt install dosfstools

mkdosfs -F 32 -s 1 -n EFI ${DISK}-part2
mkdir /boot/efi
echo /dev/disk/by-uuid/$(blkid -s UUID -o value ${DISK}-part2) \
/boot/efi vfat defaults 0 0 >> /etc/fstab
mount /boot/efi
apt install --yes grub-efi-amd64 shim-signed

apt purge --yes os-prober
passwd

vi /etc/systemd/system/zfs-import-bpool.service

------------------------------
[Unit]
DefaultDependencies=no
Before=zfs-import-scan.service
Before=zfs-import-cache.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/zpool import -N -o cachefile=none bpool
# Work-around to pres
erve zpool cache:
ExecStartPre=-/bin/mv /etc/zfs/zpool.cache /etc/zfs/preboot_zpool.cache
ExecStartPost=-/bin/mv /etc/zfs/preboot_zpool.cache /etc/zfs/zpool.cache

[Install]
WantedBy=zfs-import.target
------------------------------

systemctl enable zfs-import-bpool.service

cp /usr/share/systemd/tmp.mount /etc/systemd/system/
systemctl enable tmp.mount

ssh
apt install --yes openssh-server
vi /etc/ssh/sshd_config
# Set: PermitRootLogin yes
--------------------------------

grub-probe /boot
update-initramfs -c -k all
----------------------------
vi /etc/default/grub
# Set: GRUB_CMDLINE_LINUX="root=ZFS=rpool/ROOT/debian"
----------------------------
vi /etc/default/grub
# Remove quiet from: GRUB_CMDLINE_LINUX_DEFAULT
# Uncomment: GRUB_TERMINAL=console
# Save and quit.
----------------------------
update-grub
grub-install --target=x86_64-efi --efi-directory=/boot/efi \
 --bootloader-id=debian --recheck --no-floppy

Fix filesystem mount ordering:
mkdir /etc/zfs/zfs-list.cache
touch /etc/zfs/zfs-list.cache/bpool
touch /etc/zfs/zfs-list.cache/rpool
zed -F &

Verify:
cat /etc/zfs/zfs-list.cache/bpool
cat /etc/zfs/zfs-list.cache/rpool

zfs snapshot bpool/BOOT/debian@install
zfs snapshot rpool/ROOT/debian@install

exit

mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | \
   xargs -i{} umount -lf {}
zpool export -a

reboot


扫描二维码,在手机上阅读