# 🚀 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:
   ```bash
   blkid
   ```
2. In `/etc/fstab` den Mount-Eintrag anpassen:

   ```bash
   UUID=<DEINE-UUID> / btrfs noatime,ssd,space_cache=v2,compress=zstd:3,discard=async,commit=120,autodefrag 0 1
   ```

3. Neu einhängen:
   ```bash
   mount -o remount /
   ```
4. Kontrolle:
   ```bash
   mount | grep btrfs
   ```

---

## ✂️ 2. TRIM aktivieren

### Einmalig ausführen
```bash
fstrim -av
```

### Wöchentliche Automatik
```bash
systemctl enable --now fstrim.timer
systemctl status fstrim.timer
```

Ergebnis: `active (waiting)` → OK ✅

---

## 💨 3. Kompression dauerhaft aktivieren

Setzt Zstd-Kompression auf das Root-Subvolume:
```bash
btrfs property set / compression zstd:3
btrfs property get / compression
```

---

## ⚡ 4. NVMe-I/O-Scheduler optimieren

### Aktuellen Scheduler prüfen
```bash
cat /sys/block/nvme0n1/queue/scheduler
cat /sys/block/nvme1n1/queue/scheduler
```

### Auf `none` setzen
```bash
echo none | tee /sys/block/nvme0n1/queue/scheduler
echo none | tee /sys/block/nvme1n1/queue/scheduler
```

### Dauerhaft speichern
```bash
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:
```bash
udevadm control --reload-rules && udevadm trigger
```

---

## 🧠 5. CPU-Governor auf „performance“

Installieren und aktivieren:
```bash
apt install -y linux-cpupower
cpupower frequency-set -g performance
```

Optional dauerhaft:
```bash
systemctl enable cpupower.service
```

---

## 💾 6. Swap überprüfen

```bash
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
```bash
btrfs balance start -dusage=75 -musage=75 /
btrfs filesystem defragment -r -clzo /
```

---

## 🧪 8. Performance-Tests

### Random 4 K IOPS
```bash
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
```bash
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`
```bash
#!/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`
```ini
[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:
```bash
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** |

---
