Neuer Homeserver
Posted on Sa 03 Januar 2026 in Computer & Electronics
Wie Ihr sicher wisst, liebe ich meinen Homeserver. Und so verkünde ich heute schweren Herzens, dass er nach 10 Jahren zuverlässigem Dauerbetrieb in den wohlverdienten Ruhestand geht.
Ich habe diesen Sever geliebt, weil er ein richtiger Server ist – ein HP Proliant Microserver Gen8 um genau zu sein. Das heißt, dass er sehr wartungsfreundlich gebaut ist und vor allem über ein eigenständiges Fernwartungssystem (HP iLo) verfügt. Das erfreut das Nerd-Herz! Aber nun laufen die beiden Harddisks als RAID1 schon seit 10 Jahren 24/7 und die SSD mit dem Betriebssystem ist auch nicht mehr ganz neu. Und so hatte ich ohnehin schon überlegt, neue Platten zu kaufen, oder vielleicht besser SSDs.
Und dann brachte er plötzlich eine Fehlermeldung bezüglich des Filesystems der
Datenplatten. Zwar war es kein Problem, das in Ordnung zu bringen (fsck),
aber ich nehme das dennoch zum Anlass, ihn in den Ruhestand zu versetzen.
Der Neue
Der Posten des Homeservers wird selbstverständlich nachbesetzt und so habe ich erstmal Hardware besorgt. Diesmal wird es kein echter Server mehr, sondern ein Mini-PC. Der braucht weniger Raum und Strom:
- Lenovo ThinkCentre tiny M920x
- Intel Core i7-9700T (8 cores, 8 threads)
- 32GB RAM
- System disk: 1TB SATA SSD
- Data disks: 2x 2TB NVME
Für die Lenovo ThinCentre tiny Serie habe ich eine Schwäche. Die sehen super aus (fast wie Puppenstuben-Server), sind solide gebaut und ebenfalls ziemlich wartungsfreundlich. Nur das Fernwartungsmodul werde ich vermissen.
System aufsetzen
Viele Leute haben einen Horror davor, ihren Server neu aufsetzen zu müssen. Ich nicht. Die Betriebssystem-Installation ist simpel, die Konfiguration habe ich im Wesentlichen in Ansible Playbooks und compose files und ich mache jede Nacht automatische Backups. Also kein Stress.
Fangen wir mit dem Betriebssystem an: Debian 13 (Trixie). Eine Minimalinstallation, d.h. nur das Basissystem vom Netinst-Medium plus den Task SSH Server. Keine Desktop Umgebung oder normale User-Software:

Konfiguration
Als erstes fügen wir meinen user mal der Gruppe sudo hinzu
adduser phil sudo
Dann installieren wir vom Laptop aus meinen Public Key für bequemeren (und sicheren) ssh Zugriff:
ssh-copy-id hal
Daten SSDs einrichten
Ich habe insgesamt 3 SSDs eingebaut. Die erste ist die Systemplatte. Damit die
ein wenig geschont wird, tragen wir in /etc/fstab noch die Option noatime
für dieses Device ein und reduzieren die Neigung zum Swappen ein wenig, indem
wir ein File /etc/sysctl.d/local.conf anlegen und vm.swappiness=1
hineinschreiben.
Die beiden anderen sollen als mirror eingerichtet werden, um im Falle eines Falles nicht gleich das Backup bemühen zu müssen. Dazu gibt es verschiedene Optionen:
- Hardware RAID
Das benötigt einen entsprechenden RAID Controller und den habe ich nicht. Außerdem macht das Probleme, wenn man im Ernstfall auf einen anderen Controller umsteigen muss. - Software RAID
Das hatte ich bisher und es hat gut funktioniert. Es ist vermutlich nicht ganz so robust wie Hardware RAID, dafür sehr portabel. - ZFS
Das hat einen hervorragenden Ruf in der Server-Welt und bietet diverse Vorteile. Leider ist es aus Lizenzgründen kein Standardbestandteil des LINUX-Kernels. Man kann es aber problemlos installieren, muss dann aber bei jedem Kernel-update die Module neu bauen. In der Praxis geht das aber automatisch. - BTRFS
Soll auch gut sein, scheint mir aber weniger reif und ich lasse vorerst die Finger davon.
ZFS
Bezüglich der Daten-Platten habe ich beschlossen, von RAID1 auf zfs
umzusteigen. Erstmal ein paar Sachen installieren:
apt install zfs-dkms zfsutils-linux
Nicht vergessen, das dann auch gleich in mein Ansible Playbook aufzunehmen. Dann bauen wir einen zmirror Pool mit unseren beiden NVMEs:
# __________________________ label / mount point
# | ____________________ make a mirror group
# | | _____________ device1
# | | | _____ device2
# | | | |
zpool create data mirror nvme0n1 nvme1n1
data ist dabei der Name meines Pools und zugleich der Mountpoint (/data/).
ZFS kümmert sich um den Rest, also Filesystem erstellen und mounten. Einen
Eintrag in /etc/fstab braucht es nicht.
Und weil das SSDs sind, schalten wir das schreiben von access times ab, um die
Flash-Zellen etwas zu schonen (analog zu noatime für die Systemplatte):
zfs set atime=off data
Schauen wir mal nach:
$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
data 1.81T 609G 1.22T - - 0% 32% 1.00x ONLINE -
$ zpool status
pool: data
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
nvme0n1 ONLINE 0 0 0
nvme1n1 ONLINE 0 0 0
errors: No known data errors
home und srv verschieben
Damit dieser Platz auch genutzt wird müssen wir noch /home und /srv dorthin
verschieben. Dazu werden wir erstmal root und schieben die Folder dann durch
die Gegend:
mv /home /data/
ln -s /data/home /home
mv /srv /data/
ln -s /data/srv /srv
Sehr gut. Damit sind die manuellen Vorarbeiten beendet.
Ansible
Nun lassen wir das Ansible Playbook laufen, um die Konfiguration abzuschließen:
ansible-playbook -K install-homeserver.yml
Das installiert automatisch diverse essentielle Pakete, wie z.B. vim, aptitude,
unison, podman, nmap, fwupd, borgbackup, mosquitto etc. Außerdem konfiguriert
es den ssh Server, so dass Logins nur noch mit key und nicht mit Passwort
möglich sind und kopiert diverse compose.yaml Files in Ordner unter /srv/.
Homeassistant und Paperless-ngx zum Beispiel. Das entsprechende Playbook,
passende Roles etc. hatte ich mir schon früher mal erstellt, um in genau diesem
Fall nicht stundenlang von Hand jede Menge Zeug konfigurieren zu müssen.
Nachdem das durchgelaufen ist, können die Daten wiederhergestellt werden.
Daten kopieren
Grundsätzlich gibt es zwei mögliche Wege, die Daten auf den neuen Server zu bekommen:
- Restore aus dem Backup
- Direkt von der alten Festplatte kopieren.
Ich mache heute mal Option 2, denn das Array ist OK und das Problem im Filesystem
ließ sich mit fsck schnell reparieren.
Halben RAID Array lesen
Im Prinzip könnten wir die Daten vom kompletten RAID Array lesen: mit zwei USB-SATA Adaptern an den neuen Server, mounten und los geht's. Oder via Netzwerk.
Aber weil ich es so schön finde, zeige ich hier noch schnell, wie das auch mit einer der beiden Platten des Arrays geht – vorausgesetzt, das Array ist gesund oder im Notfall, wenn eine der beiden Platten im Mirror den Geist aufgegeben hat (dann mit der anderen). Also ziehen wir eine der beiden Platten aus dem Slot am alten Server, nehmen sie aus dem Wechselrahmen und stecken sie in den SATA-USB-Adapter.

An den neuen Server anschließen und schon sehen wir sie:
$ lsblk
sdb 8:16 0 3.6T 0 disk
└─sdb1 8:17 0 3.6T 0 part
└─md0 9:0 0 3.6T 0 raid1
└─md0p1 259:6 0 3.6T 0 part /mnt
Im Netz hatte ich gelesen, dass man zunächst das RAID1 Array wiederherstellen müsse
(mdadm --assemble --readonly --run /dev/md0 /dev/sdb1), allerdings
scheint es, dass mein System das RAID1 Volume ganz von selbst erkannt hat.
Und wir können es mounten:
$ sudo mount -O ro /dev/md0p1 /mnt
und die Daten in ihr neues Zuhause kopieren:
$ cp -ar /mnt/home /data/
$ cp -ar /mnt/srv /data/
Benchmark
Und wie lang hat der Spaß nun gedauert?
| Schritt | Zeit |
|---|---|
| Debian Installation | 06min 04s |
| ZFS einrichten | ca.5min |
| Ansible Playbook | ca. 8 min |
| Restore data | 01h 43min |
Alles in allem also knapp über 2h. Etwa 20 Minuten Arbeit muss man investieren, der Rest ist Wartezeit bis die Daten wieder da sind. Und auch während der Installation überarbeitet man sich nicht wirklich. Die Zahlen finde ich erfreulich und ich bleibe bei meiner Strategie, nur die Daten zu sichern und keine OS Backups zu machen – das lohnt den Aufwand nicht.
In Wahrheit hat die ganze Prozedur aber länger gedauert, weil ich nicht einfach alles wieder hergestellt habe, sondern bei der Gelegenheit diverse Änderungen an meinen Ansible Playbook vorgenommen habe, aber das habe ich hier bewusst nicht eingepreist, weil es mir darum ging, zu ermitteln, wie lang eine unveränderte Disaster-Recovery dauert.
Streng genommen könnte ich auch das Einrichten von RAID oder ZFS automatisiert mit Ansible machen, tue das aber bewusst nicht. Wer weiß schon, welche Ideen ich beim nächsten mal habe und der Aufwand ist echt minimal.
Fazit
Neuer Homeserver läuft wie geschmiert. Sehr schön.