# 🚀 Btrfs RAID-0 Optimierung für Proxmox & Linux

Diese Anleitung beschreibt, wie du ein Btrfs-RAID 0 (Stripe) auf zwei NVMe-SSDs optimal für Performance, Stabilität und Lebensdauer konfigurierst. Sie ist universell nutzbar für Proxmox VE, Debian 12, Ubuntu 22.04 und andere Linux-Systeme mit Kernel ≥ 5.10.


# 🧱 Voraussetzungen

  • Zwei NVMe-SSDs im Btrfs RAID 0
  • Root-Zugriff auf das System
  • Kernel ≥ 5.10
  • Optional: Proxmox VE 8 oder höher

# ⚙️ 1. Fstab-Optimierung

  1. UUID ermitteln:

    blkid
  2. In /etc/fstab den Mount-Eintrag anpassen:

    UUID=<DEINE-UUID> / btrfs noatime,ssd,space_cache=v2,compress=zstd:3,discard=async,commit=120,autodefrag 0 1
  3. Neu einhängen:

    mount -o remount /
  4. Kontrolle:

    mount | grep btrfs

# ✂️ 2. TRIM aktivieren

# Einmalig ausführen

fstrim -av

# Wöchentliche Automatik

systemctl enable --now fstrim.timer
systemctl status fstrim.timer

Ergebnis: active (waiting) → OK


# 💨 3. Kompression dauerhaft aktivieren

Setzt Zstd-Kompression auf das Root-Subvolume:

btrfs property set / compression zstd:3
btrfs property get / compression

# 4. NVMe-I/O-Scheduler optimieren

# Aktuellen Scheduler prüfen

cat /sys/block/nvme0n1/queue/scheduler
cat /sys/block/nvme1n1/queue/scheduler

# Auf none setzen

echo none | tee /sys/block/nvme0n1/queue/scheduler
echo none | tee /sys/block/nvme1n1/queue/scheduler

# Dauerhaft speichern

nano /etc/udev/rules.d/60-ioscheduler.rules

Inhalt:

ACTION=="add|change", KERNEL=="nvme[0-9]*n[0-9]*", ATTR{queue/scheduler}="none"

Dann aktivieren:

udevadm control --reload-rules && udevadm trigger

# 🧠 5. CPU-Governor auf „performance“

Installieren und aktivieren:

apt install -y linux-cpupower
cpupower frequency-set -g performance

Optional dauerhaft:

systemctl enable cpupower.service

# 💾 6. Swap überprüfen

swapon --show

Swap auf NVMe-RAID-0 kann Performance kosten. → besser auf eine separate Partition oder Disk legen.


# 🧹 7. Regelmäßige Pflege

# Balance- und Defragmentierung

btrfs balance start -dusage=75 -musage=75 /
btrfs filesystem defragment -r -clzo /

# 🧪 8. Performance-Tests

# Random 4 K IOPS

fio --filename=/root/testfile --ioengine=libaio --direct=1 --rw=randrw --bs=4k --size=2G --numjobs=4 --iodepth=32 --runtime=60 --group_reporting --name=iotest

# Sequentiell 1 MiB Durchsatz

fio --filename=/root/testfile --ioengine=libaio --direct=1 --rw=readwrite --bs=1M --size=4G --numjobs=4 --iodepth=16 --runtime=60 --group_reporting --name=seqtest
Testtyp Erwarteter Wert
Random 4 K 30 000 – 60 000 IOPS
Sequentiell 1 MiB 1.8 – 3.5 GB/s

# 🧩 9. Automatische Optimierung beim Boot

# /usr/local/bin/nvme-optimize.sh

#!/bin/bash
# Auto-Optimierung für NVMe + Btrfs

# CPU Performance Mode
if command -v cpupower &>/dev/null; then
  cpupower frequency-set -g performance
fi

# TRIM
fstrim -av &>/dev/null

# NVMe Scheduler
for dev in /sys/block/nvme*n*/queue/scheduler; do
  echo none > "$dev"
done

# Systemd-Service /etc/systemd/system/nvme-optimize.service

[Unit]
Description=NVMe & Btrfs Optimizer
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/nvme-optimize.sh

[Install]
WantedBy=multi-user.target

Aktivieren:

chmod +x /usr/local/bin/nvme-optimize.sh
systemctl daemon-reload
systemctl enable --now nvme-optimize.service

# 10. Ergebnisübersicht

Bereich Status
Dateisystem Btrfs RAID-0 (2 × NVMe)
Mount-Optionen Optimiert
Kompression zstd:3 (aktiv)
TRIM Aktiv (discard=async + Timer)
Scheduler none
CPU-Governor performance
Random 4 K IOPS ≈ 35 000
Sequentiell 1 MiB Durchsatz ≈ 1.9 GB/s read / 2.0 GB/s write
Systemzustand Stabil & maximal performant