Published on
August 18, 2025
ZFS-Root & ZFSBootMenu
1 minute read •
Vorraussetzung: Mit einer ZFS fähigen Bootdisk (z.B. SystemRescue-ZFS) gestartet.
Festplatte vorbereiten:
mkdir -- parents /mnt/gentoo
sgdisk - Z /dev/sda
sgdisk - a 4096 -- new= 1:+0:+1G -- typecode= 1:EF00 -- change-name= 1:" EFI" /dev/sda
sgdisk - a 4096 -- new= 2:+129M:+4G -- typecode= 2:8200 -- change-name= 2:" Linux swap" /dev/sda
sgdisk - a 4096 -- new= 3:+129M:-129M -- typecode= 3:bf00 -- change-name= 3:" tank" /dev/sda
ZFS Pool anlegen
zpool create - f \
- o ashift=12 - o autotrim=on \
- O acltype=posixacl - O xattr=sa - O atime=off - O compression=lz4 \
- m none tank /dev/sda3
zfs create - o mountpoint=none tank/OS
zfs create - o mountpoint=/ - o canmount=noauto tank/OS/gentoo
zfs create - o mountpoint=/home - o relatime=on tank/HOME
zfs create - o mountpoint=none - o setuid=off tank/GENTOO
zfs create - o mountpoint=/var/db/repos - o exec=off tank/GENTOO/repos
zfs create - o mountpoint=/var/db/repos/gentoo tank/GENTOO/portage
zfs create - o mountpoint=/var/cache/distfiles - o compression=off - o exec=off tank/GENTOO/distfiles
zfs create - o mountpoint=/var/tmp/portage - o sync=disabled tank/GENTOO/build-dir
zfs create - o mountpoint=none - o setuid=off tank/VAR
zfs create - o mountpoint=/var/log - o sync=disabled tank/VAR/log
zfs create - o mountpoint=/tmp - o sync=disabled tank/VAR/tmp
zfs create - o mountpoint=none - o setuid=off tank/SRV
zfs create - o mountpoint=/var/www tank/SRV/www
...
zpool set bootfs=tank/OS/gentoo tank
zpool export tank
ZFS Pool laden
zpool import - N - R /mnt/gentoo tank
zfs mount tank/OS/gentoo
zfs mount - R tank/HOME
zfs mount - R tank/GENTOO
zfs mount - R tank/VAR
zfs mount - R tank/SRV
mkswap /dev/sda2
swapon /dev/sda2
mkfs.vfat - F 32 /dev/sda1
mkdir -- parents /mnt/gentoo/boot/efi
mount /dev/sda1 /mnt/gentoo/boot/efi
Gentoo installieren
chmod 1777 /mnt/gentoo/tmp
wget ' ftp://gentoo.osuosl.org/pub/gentoo/releases/amd64/autobuilds/current-stage3-amd64-openrc/stage3-amd64-openrc-[0-9]*.tar.xz'
tar xpvf stage3-* .tar.xz -- xattrs-include= ' *.*' -- numeric-owner - C /mnt/gentoo
cp -- dereference /etc/resolv.conf /mnt/gentoo/etc/
echo ' MAKEOPTS="-j4 -l5"' >> /mnt/gentoo/etc/portage/make.conf
echo ' RUSTFLAGS="${RUSTFLAGS} -C target-cpu=native"' >> /mnt/gentoo/etc/portage/make.conf
Standard Programm zu world hinzufügen
cat >> /var/lib/portage/world << EOF
app-admin/rsyslog
app-admin/sudo
app-arch/bzip3
app-arch/ouch
app-crypt/dehydrated
app-editors/vim
app-emulation/open-vm-tools
app-misc/tmux
app-misc/mc
app-portage/cpuid2cpuflags
app-portage/eix
app-portage/gentoolkit
app-shells/bash-completion
dev-python/dns-lexicon
dev-util/git-delta
dev-vcs/git
dev-vcs/gitui
mail-mta/opensmtpd
net-dns/dns-doge
net-misc/chrony
net-misc/dropbear
net-misc/mosh
net-misc/sendme
sys-apps/bat
sys-apps/eza
sys-apps/fd
sys-apps/ripgrep
sys-boot/efibootmgr
sys-boot/zfsbootmenu
sys-kernel/dracut-crypt-ssh
sys-kernel/gentoo-sources
sys-process/cronclearer
sys-process/cronie
sys-process/htop
sys-process/lsof
virtual/openssh
www-servers/nginx
EOF
mkdir - p /etc/portage/package.accept_keywords
cat >> /etc/portage/package.accept_keywords/system << EOF
app-arch/ouch
dev-vcs/gitui
net-dns/dns-doge
net-misc/sendme
sys-boot/zfsbootmenu
sys-kernel/dracut-crypt-ssh
sys-process/cronclearer
EOF
cat >> /etc/portage/package.use/system << EOF
*/* -X -gtk -gnome dracut cacert vim-syntax zstd lz4 nftables kernel-install uuid jit
app-emulation/open-vm-tools -vgauth -resolutionkms -deploypkg
sys-apps/systemd-utils boot
sys-devel/binutils -hardened
sys-devel/gcc -hardened -jit
EOF
Alphaquadrant-Overlay installieren
mkdir - p /etc/portage/repos.conf
cat << EOF > /etc/portage/repos.conf/migmedia.conf
[AlphaQuadrant]
priority = 20
location = /var/db/repos/alpha-quadrant
sync-type = git
sync-uri = https://git.migmedia.net/gentoo/alpha-quadrant.git
auto-sync = true
masters = gentoo
EOF
emaint sync - a
… weiter mit der Standard Gentoo Installation
emerge @world - uaDtvNU - j3 -- keep-going
eselect kernel set 1
cd /usr/src/linux
Kernel konfigurieren und compilieren
make localmodconfig
make nconfig
nice make - j11
make modules_install
emerge - av sys-fs/zfs
make install
Alphaquadrant-Overlay installieren
mkdir - p /etc/portage/repos.conf
cat << EOF > /etc/portage/repos.conf/migmedia.conf
[AlphaQuadrant]
priority = 20
location = /var/db/repos/alpha-quadrant
sync-type = git
sync-uri = https://git.migmedia.net/gentoo/alpha-quadrant.git
auto-sync = true
masters = gentoo
EOF
emaint sync - a
emerge - av sys-boot/zfsbootmenu sys-boot/efibootmgr
zfs set org.zfsbootmenu:commandline=" quiet loglevel=4" tank/OS
curl https://gentoo.migmedia.net/alpha-quadrant/gentoo.bmp - o /etc/zfsbootmenu/gentoo.bmp
Datei /etc/zfsbootmenu/config.yaml ändern:
Global :
ManageImages : true
BootMountPoint : /boot/efi
[ . ..]
EFI :
Enabled : true
Kernel :
CommandLine : ro quiet loglevel=0 zbm.timeout=30
generate-zbm
efibootmgr - c - d /dev/sda - p 1 - L " ZFSBootMenu" - l \\ EFI\\ ZBM\\ VMLINUZ.EFI
ZFS-Service beim Booten starten
rc-update add zfs-import boot
rc-update add zfs-load-key boot
rc-update add zfs-mount boot
rc-update add zfs-zed default
rc-update add zfs-share default
rc-update add rsyslog default
rc-update add cronie default
rc-update add chronyd default
rc-update add sshd default
rc-update add vmware-tools
Root-Passwort setzen & sudo erlauben
passwd - l root
echo " %wheel ALL=(ALL:ALL) ALL" > /etc/sudoers.d/wheel
User mit eigenem ZFS-Dataset anlegen
export NUSER = user
useradd - M - G wheel - s /bin/bash $ NUSER
zfs create tank/HOME/$ NUSER
cp - r /etc/skel/.* /home/$ NUSER /
chown - R $ NUSER :$ NUSER /home/$ NUSER
passwd $ NUSER
System laden zum Reparieren
mkdir /mnt/gentoo
zpool import - N - R /mnt/gentoo tank - f
zfs mount tank/OS/gentoo
zfs mount - R tank/HOME
zfs mount - R tank/VAR
zfs mount - R tank/GENTOO
zfs mount - R tank/SRV
mount /dev/sda1 /mnt/gentoo/boot/efi
Referenzen: