Kurzbeschreibung:
Das Projekt befasst sich mit der Einrichtung eines Storage-Systems und einer Analyse inkl. Auswertung.
Abgrenzung:
Der Fokus dieses Projektes bezieht sich auf eine lokale Linux-Umgebung. Technisch grenzt sich das Projekt in der Ausstattung von einer professionellen Umgebung ab (Datenträger etc.). Die verfolgten Ziele dienen einer privaten, produktiven Umgebung mit Lastverteilung und priorisierten Prozessen.
Name: Dorian Micottis
- Beruf: Fachinformatiker für Systemintegration (seit den 07.2026)
- Schwerpunkt/Interessen:
- Linux Desktop/Server
- Datenmigration
- Containerisierung
- Virtualisierung
- Zusätzliche Kenntnisse:
- GnuPG und Konfigurationsmanagement
- Kontakt Für Rückfragen zum Projekt oder allgemein.
Ich möchte anhand dieses Repositories mir eine Basis für ein Homelab einrichten. Die Umgebung soll mich darin unterstützen, mein Interesse in den Bereichen Storage, Virtualisierung/Containerisierung und Datenmigration zu fördern. Die Effektivität und Integrität dieses Setups werde ich anhand von Messprotokollen (Startwert) und den fortlaufenden Monitorings (Deltawerte) der Umgebung bewerten. Bewertet wird, wie bereits einmal erwähnt:
- Integrität (Datenträger)
- Datendurchsatz und mögliche Engpässe
- Prozesspriorisierung:
- Messung eines Buildvorgangs und des dafür extra bereitgestellten Datenträgers (anhand eines Beispiels in der Kompilierung von
C-Code). - Isolierung von I/O-Prozess durch eine Verteilung der Aufgaben auf verschiedene Datenträger.
- Messung eines Buildvorgangs und des dafür extra bereitgestellten Datenträgers (anhand eines Beispiels in der Kompilierung von
An diese Repository anknüpfent wird in eine späteren Verlauf ein virtueller Proxmox-Server eingerichtet.
Im Kern lässt sich das Projekt anhand von 4 Kapitel komplett wiedergeben. A) [IST-Zustand] (Ausgangssituation und Alpha Messungen) B) [SOLL-Zustand] (Konzept/Ziel und Delta Messungen so wie Funktionstests (ob das Ziel erreicht wurde)) C) [Initalisierungnitalisierung] (Installationsskirpte und Anleitungen. "Der Weg vom IST zum SOLL-Zustand") D) [Administration] (Das Betreiben (Reference/Befehlssammlung und Handouts/Handbücher) und Monitoring (Fortlaufende Messungen))
Dieses Repository dokumentiert und automatisiert den Aufbau und die Wartung einer reproduzierbaren Linux-Workstation basierend auf Arch Linux mit KDE. Ziel ist es, jede Entscheidung, Konfiguration und Automatisierung nachvollziehbar zu machen, um stabile und wartbare Systeme aufzubauen.
.
├── README.md # Diese Dokumentation
│
├── configs/ # **Systemkonfigurationsdateien**
│ │
│ ├── smartd.conf # smartd-Konfiguration zur Festplattenüberwachung
│ ├── 60-io-scheduler.rules # udev-Regeln für I/O-Scheduler und Read-Ahead
│ ├── 60-io.conf # sysctl-Konfiguration (Dirty-Pages, Swap etc.)
│ ├── btrbk.conf # btrbk-Konfiguration für Btrfs-Backups
│ ├── ccache.txt # ccache Kurzanleitung
│ ├── fstab # Dateisystem-Mounts (/etc/fstab)
│ └── systemd/ # **Systemd Mount- und Service-Units**
│ ├── mnt-Backup.automount # Automount für das externe Backup-Laufwerk
│ ├── storage-maintenance.service # Service-Unit für die regelmäßige Wartung
│ ├── storage-maintenance.timer # Timer-Unit für den Wartungs-Service
│ ├── var-cache-build.automount # Automount für das Build-Verzeichnis
│ └── var-cache-build.mount # Mount-Unit für das Build-Verzeichnis
│
├── docs/ # **Projektdokumentation**
│ │
│ ├── abschluss.md #
│ ├── ADMIN/ # **Technische Nachschlagewerke und Handouts**
│ │ ├── btrfs_cmds.md # Btrfs-Kommandosammlung
│ │ ├── btrfs_packages.md # Benötigte Btrfs-Pakete unter Arch Linux
│ │ ├── build_messung.md #
│ │ ├── i⁄o-stack_handout.png # Grafik zum Linux I/O-Stack
│ │ ├── kvm_qemu_cmds # KVM/QEMU-Befehlsreferenz =============
│ │ ├── storage-administration.md # Spickzettel für Speicher-Administration
│ │ ├── systemd_units_handout.md # Handbuch für Systemd-Units
│ │ └── udev_handout.md # Spickzettel für udev-Regeln
│ ├── INIT/ # **
│ │ ├── git_anleitung.md # Handbuch für Git-Workflows und Signierung
│ │ └── storage-einrichten.md # Anleitung zur Partitionierung und Formatierung
│ ├── IST/ #
│ │ ├── IST-Analyse.md # lsblk- und PCIe-Hardware-Ist-Zustand
│ │ └── IST_Systeminformationen.md # inxi-System- und Storage-Informationen
│ └── SOLL/ #
│ ├── architecture/ # **Dokumentierte Architektur**
│ │ ├── soll_architektur.md # Dokumentation der Ziel-Architektur
│ │ └── soll_konzeptskizze.pdf # Konzeptskizze der Speicherstruktur
│ └── decisions/ # **Dokumentierte Architekturentscheidungen** (ADRs)
│ ├── 0001-xfs-workload-caches.md #
│ ├── 0002-raid1-bcache-home-docker.md #
│ └── 0003-btrfs-nvme-os-snapshots.md #
└── src/ # **Skripte** zur Analyse, Einrichtung und Wartung
│
├── ADMIN/ # **Skripte zur Wartung**
│ ├── backup_ssd.sh # rsync-Backup der VM-Images auf ex. Speichermedium
│ ├── Failover_Szenario_Test.sh # Simulation eines RAID1-HDD-Ausfalls und Rebuilds
│ ├── Healtcheck_Monitoring.sh # Einfaches Healthcheck-Monitoring
│ ├── I/O_Monitoring.md # I/O-Monitoring Notizen
│ └── Wartung_Storage.sh # Scrub, Balance & Defragmentierung für Btrfs/XFS
├── INIT/ # **Skripte zur Einrichtung**
│ ├── Setup_ccache.sh # Konfiguration von ccache, cargo, pip in .bashrc
│ ├── Setup_Docker.sh # Installation & No-CoW Btrfs-Setup für Docker
│ ├── Setup_fstrim.sh # Aktivierung des systemd fstrim-Timers
│ ├── Setup_libvirt.sh # Setup für KVM/QEMU/libvirt und sdc1-Read-Ahead
│ ├── Setup_NVMe.sh # Partitionierung & Btrfs-Subvolume-Setup für NVMe
│ ├── Setup_RAID1_Bcache.sh # Setup von RAID1 (HDDs) und Bcache (SATA-SSD)
│ └── Setup_SSD.sh # Partitionierung & XFS-Formatierung der SATA-SSD
└── IST/ # **Skripte zur Analyse**
├── Build_Time_Messung.sh # Auswertung der Build-Messungen
├── Healthcheck_Messung.sh # Detailliertes Healthcheck-Skript
├── I/O_Messung.sh # Allgemeine Benchmark-Messungen
├── IST_Blockdev.sh # Skript zur Erfassung des Blockdevices-Ist-Zustands
└── IST_OS-System.sh # Skript zur Erfassung des Betriebssystem/Hardware
- Einleitung
- Projektübersicht
- Zielsetzung
- IST-Zustand (Ausgangssituation)
- SOLL-Zustand (Konzept)
- Initalisierung
- Betrieb und Administration
- Projektabschluss
- Struktur
- Reproduzierbare Infrastruktur: Das gesamte System (Partitionierung, Speicher, Subvolumes) wird dokumentiert und automatisiert aufgebaut.
- Wartung und Analyse: Die Skripte erfassen systematisch Ist-Zustände, führen Build- und Konfigurationsaufgaben aus und unterstützen bei der Wartung.
- Dokumentation vor Automatisierung: Jede technische Entscheidung wird dokumentiert, bevor sie umgesetzt wird.
In diesem Abschnitt wird der Ausgangszustand der Hardware, der Blockgeräte und des Betriebssystems erfasst und analysiert.
Dokumentation:
- IST-Analyse: Detaillierte Auflistung der physischen Festplatten (
lsblk) und der PCIe-Schnittstellenanbindung. - System- und Storage-Informationen: Hardwaredetails (
inxi), RAM-Auslastung, mdraid-Status (md0), Partitionen und Swap/zram-Konfiguration.
Skripte zur Analyse (in /src/IST/):
- IST_Blockdev.sh: Erfasst den Zustand aller Block-Devices.
- IST_OS-System.sh: Erfasst die Betriebssystem- und Hardware-Parameter.
- Build_Time_Messung.sh: Benchmark zur Ermittlung der Kompilierzeiten auf dem System (C-Code).
- I⁄O_Messung.sh: Benchmark zur Messung des I/O-Durchsatzes und der Latenzen.
- Healthcheck_Messung.sh: Führt detaillierte Diagnosen und Gesundheitsprüfungen durch.
Das Konzept beschreibt die Ziel-Architektur und die grundlegenden technischen Architekturentscheidungen (ADRs).
Architektur (in /docs/SOLL/architecture/):
- SOLL-Architektur: Das Zielkonzept für Partitionierung, Subvolumes, Dateisysteme (Btrfs, XFS, RAID1 mit bcache) und Leistungsoptimierungen.
- Konzeptskizze: Grafische Visualisierung der Speicherstruktur.
Architekturentscheidungen (ADRs in /docs/SOLL/decisions/):
- ADR 0001: XFS für Workload-Caches: Entscheidung, XFS für VM-Images (
/var/lib/libvirt) und Build-Caches zu verwenden (Optimierung bei großen Extents). - ADR 0002: RAID1 & bcache für Home/Docker: Verwendung eines HDD-RAID1 mit SSD-Caching (
bcache) für Docker-Container und Benutzerdaten. - ADR 0003: Btrfs auf NVMe für OS & Snapshots: Nutzung von Btrfs auf einer schnellen NVMe-SSD für das Root-Dateisystem, um bootfähige Systemschnappschüsse (Snapper) zu ermöglichen.
Dieses Kapitel dokumentiert den Weg vom IST- zum SOLL-Zustand, sowohl über automatische Skripte als auch über manuelle Anleitungen.
🛠️ Automatisches Setup (Skripte in /src/INIT/)
Die Partitionierung, Formatierung und grundlegende Konfiguration wird über diese modularen Skripte durchgeführt:
- Setup_NVMe.sh: Partitioniert die NVMe-SSD und richtet das Btrfs-Subvolume-Layout für das OS ein.
- Setup_RAID1_Bcache.sh: Konfiguriert das HDD-RAID1-Array und bindet die SATA-SSD als Lese-/Schreibcache (
bcache) ein. - Setup_SSD.sh: Partitioniert und formatiert die SATA-SSD mit XFS für dedizierte Workloads.
- Setup_Docker.sh: Installiert Docker und konfiguriert es auf einem Btrfs-Subvolume ohne Copy-on-Write (
nocow), um Fragmentierung zu vermeiden. - Setup_libvirt.sh: Konfiguriert KVM/QEMU/libvirt und optimiert die Block-Read-Ahead-Werte für virtuelle Festplatten.
- Setup_ccache.sh: Richtet Compiler-Caches (
ccache) und Build-Verzeichnisse für Cargo und Pip in der.bashrcein. - Setup_fstrim.sh: Aktiviert den systemd
fstrim.timerzur regelmäßigen SSD-Bereinigung.
📖 Manuelle Einrichtung & Richtlinien (in /docs/INIT/)
- Storage einrichten: Detaillierte Schritt-für-Schritt-Anleitung zur manuellen Partitionierung, Formatierung und Einhängung der Datenträger.
- Git- & Repository-Handbuch: Richtlinien zur Git-Konfiguration, Signierung von Commits mit GnuPG oder SSH und dem Rebase-Workflow.
🚀 Konfigurationsdateien & Deployment (in /configs/)
- fstab: Konfiguration der Mount-Optionen (z. B.
noatime,largeio,allocsize=64m) für optimale Performance. - 60-io-scheduler.rules: udev-Regeln zur automatischen Zuweisung optimaler I/O-Scheduler (
bfq/mq-deadline/none) je nach Medientyp. - 60-io.conf: Kernel-Optimierungen (sysctl) bezüglich Dirty Pages und Swappiness.
- smartd.conf: Konfiguration des smartd-Dienstes zur proaktiven Festplattenüberwachung.
- btrbk.conf: Definition der automatisierten Btrfs-Subvolume-Backups.
- Systemd-Units (in /configs/systemd/):
- var-cache-build.mount & var-cache-build.automount: Mountet das Build-Cache-Verzeichnis dynamisch beim ersten Zugriff.
- mnt-Backup.automount: Automatisches Einhängen des Backup-Laufwerks bei Dateizugriff.
- storage-maintenance.service & storage-maintenance.timer: Systemd-Timer zur monatlichen Ausführung des Speicher-Wartungsskripts.
Dieses Kapitel behandelt die Verwaltung, die regelmäßige Wartung und das Monitoring des laufenden Storage-Systems.
📚 Handbücher & Befehlsreferenzen (in /docs/ADMIN/)
- Storage-Administration: Spickzettel für administrative Aufgaben, Snapshot-Konzepte (Snapper, Timeshift, btrbk) und Wartungszyklen.
- Btrfs-Kommandosammlung: Übersicht der wichtigsten Befehle zur Verwaltung von Btrfs-Dateisystemen und -Subvolumes.
- Btrfs-Pakete: Liste der unter Arch Linux empfohlenen und benötigten Hilfsprogramme.
- udev-Handout & Best Practices: Anleitung zur Funktionsweise, dem Testen und Schreiben persistenter udev-Regeln.
- systemd-Units & Mount-Optimierungen: Vergleich zwischen fstab und nativem systemd-Mounting sowie eine Anleitung zur Timer-Einrichtung.
- Hinweis: Eine KVM/QEMU-Befehlsreferenz (
kvm_qemu_cmds) ist als zukünftige Dokumentation geplant.
🛠️ Administrationsskripte (in /src/ADMIN/)
- Wartung_Storage.sh: Automatisiertes Skript für Btrfs-Scrub, Btrfs-Balance und XFS-Defragmentierung.
- backup_ssd.sh: Sichert VM-Images mittels
rsyncinkrementell auf ein externes Speichermedium. - Failover_Szenario_Test.sh: Simuliert den Ausfall einer Festplatte im RAID1-Verbund und leitet den Rebuild-Prozess ein.
- Healtcheck_Monitoring.sh: Überprüft den Systemstatus sowie die Integrität der RAID- und Dateisysteme.
📊 Performance-Monitoring (in /src/ADMIN/)
- I⁄O_Monitoring.md: Referenz- und Befehlssammlung zur Live-Überwachung von Speicherbandbreiten und Latenzen mittels CLI-Tools (z. B.
iotop,iostat).
Nach Abschluss der Initialisierung und Durchführung von Performance-Optimierungen wurden die Messungen ausgewertet und ein Gesamtprojektfazit gezogen.
- Projektfazit & Lessons Learned: Zusammenfassung der Projektergebnisse, persönliche Erfahrungen im Umgang mit Btrfs/XFS und Ideen für zukünftige Optimierungen.
- Messprotokolle: Detaillierte Testergebnisse und Protokolle der Build-Messungen sowie Optimierung der I/O-Queue-Attribute.