SSD Nodes Learn Hosting plans →
Anleitungen Matt ConnorVon Matt Connor

VPS-Speicher erklärt: Was die GB-Angabe bedeutet

Was 80 GB NVMe auf einem VPS wirklich bedeuten: NVMe, SATA und HDD im Vergleich, was das System schon belegt, wie Sie den Platz prüfen und mehr bekommen.

Was die GB-Angabe beim VPS-Speicher bedeutet

VPS-Speicher ist die Zeile im Angebot, die am häufigsten falsch gelesen wird. Steht dort „Speicherplatz 80 GB NVMe“, bekommen Sie eine virtuelle Festplatte mit 80 Milliarden Bytes, die auf einem NVMe-Laufwerk im Host liegt. Das ist alles, was die Zeile sagt. Sie sagt nicht, wie schnell diese Platte pro Zugriff ist, wie viel davon beim ersten Login schon belegt ist und was Sie tun, wenn sie voll wird.

Kurz gefasst: Die 80 GB sind der rohe Umfang des Blockgeräts. Nach dem Formatieren zeigt df -h rund 72 GB, weil df in GiB rechnet und ext4 fünf Prozent der Blöcke für root reserviert. Davon belegen Betriebssystem, Logs, Paketcache und Kernel beim ersten Login bereits 2 bis 3 GB. Alles Weitere, Docker-Images, Datenbanken, Uploads und Container-Logs, teilt sich den Rest. Mehr Platz gibt es auf drei Wegen, nach Kosten sortiert: aufräumen, Plan vergrößern, Volume anhängen.

Der Storage-VPS als eigenes Produkt, viel Platte und wenig CPU, hat eine eigene Seite: Storage-VPS oder normaler VPS. Hier geht es um die Platte, die jeder gewöhnliche VPS mitbringt.

NVMe, SATA-SSD oder HDD: warum sich dieselben 80 GB anders anfühlen

Hinter der GB-Angabe steht ein Medium, und das Medium entscheidet, wie sich der Server anfühlt. Drei Typen sind auf dem Markt. HDD (hard disk drive) ist die Magnetplatte mit beweglichem Lesekopf. Eine SATA-SSD (solid state drive am Serial-ATA-Anschluss) ist Flash-Speicher, der über eine Schnittstelle aus der HDD-Zeit angebunden ist. NVMe (Non-Volatile Memory Express) ist Flash-Speicher, der direkt an PCIe hängt und ein Protokoll nutzt, das für Flash entworfen wurde.

Zwei Zahlen beschreiben eine Platte. Der sequenzielle Durchsatz in MB/s sagt, wie schnell eine große Datei am Stück gelesen wird. IOPS (input/output operations per second) sagen, wie viele kleine, verstreute Zugriffe pro Sekunde möglich sind. Die Datenblätter der Hersteller nennen für beide Werte typische Größenordnungen:

ChartSequenzieller Durchsatz, typische Datenblattwerte in MB/s
The data behind this chart
[
  {
    "label": "NVMe (PCIe 4.0)",
    "mb_s": 7000
  },
  {
    "label": "SATA-SSD",
    "mb_s": 550
  },
  {
    "label": "HDD (7200 U/min)",
    "mb_s": 200
  }
]
ChartZufällige 4k-Zugriffe, typische Datenblattwerte in IOPS
The data behind this chart
[
  {
    "label": "NVMe (PCIe 4.0)",
    "iops": 1000000
  },
  {
    "label": "SATA-SSD",
    "iops": 90000
  },
  {
    "label": "HDD (7200 U/min)",
    "iops": 150
  }
]

Das sind Herstellerangaben für das nackte Laufwerk (Stand September 2026), keine Messwerte von einem VPS. Beim Durchsatz liegen eine HDD mit 200 MB/s und eine NVMe mit 7000 MB/s gut eine Größenordnung auseinander. Bei den IOPS sind es fast vier Größenordnungen: Die HDD schafft 150, die SATA-SSD einen fünfstelligen und die NVMe einen siebenstelligen Wert.

Ein kleiner VPS spürt vor allem die IOPS. apt upgrade entpackt tausende kleine Dateien. Eine Datenbank schreibt bei jedem Commit wenige Kilobyte und wartet mit fsync auf die Bestätigung der Platte. docker pull entpackt Image-Layer aus zehntausenden Dateien. Jeder dieser Vorgänge besteht aus vielen kleinen, verstreuten Zugriffen, und auf einer HDD wartet er bei jedem einzelnen auf den Lesekopf. Der Durchsatz spielt erst eine Rolle, wenn Sie eine große Datei am Stück bewegen, etwa ein Backup-Archiv kopieren.

Zwei Dinge relativieren diese Werte. Erstens teilen Sie sich das physische Laufwerk mit anderen VMs auf demselben Host, und der Anbieter begrenzt in der Regel die IOPS pro VM. „NVMe“ im Angebot beschreibt das Medium im Host. Ihren Anteil daran legt der Anbieter fest. Zweitens ist bei geringer Last eine SATA-SSD von einer NVMe kaum zu unterscheiden; wann NVMe gegenüber SSD auf einem VPS wirklich einen Unterschied macht, hängt an der Zahl paralleler Zugriffe. Ob im Host wirklich NVMe steckt, verrät lsblk -d -o NAME,ROTA,MODEL nur zum Teil, weil der Hypervisor das Gerät als vda oder sda durchreicht; wie Sie ein NVMe-Laufwerk unter Linux zuverlässig erkennen beschreibt, was ROTA und fio dabei aussagen.

Messen Sie den Wert, den Sie tatsächlich bekommen:

sudo apt install -y fio
fio --name=randread --filename=/var/tmp/fio.test --size=1G --rw=randread --bs=4k \
  --iodepth=32 --ioengine=libaio --direct=1 --runtime=30 --time_based --group_reporting
rm /var/tmp/fio.test

Die Zeile read: IOPS= in der Ausgabe ist Ihr tatsächlicher Wert. --direct=1 umgeht den Seitencache des Kernels; ohne diese Option messen Sie RAM. Ein Wert weit unter dem Datenblatt ist auf einem geteilten VPS normal, weil der Anbieter die Platte zwischen mehreren VMs aufteilt und die IOPS pro VM begrenzt.

Warum df weniger zeigt als das Angebot

Die zweite Überraschung ist die Differenz zwischen Angebot und df. Der Anbieter rechnet in GB, also in Milliarden Bytes. df -h und lsblk rechnen in GiB (Gibibyte, also 1024 hoch drei Bytes) und schreiben trotzdem ein G. Aus 80 GB werden so 74,5 GiB, und genau das steht bei lsblk in der Zeile vda. Darauf legt das Image des Anbieters kleine Partitionen für den Bootloader an, und das ext4-Dateisystem reserviert per Voreinstellung fünf Prozent der Blöcke für root, damit Systemdienste noch schreiben können, wenn ein Nutzer die Platte vollschreibt. Diese Reserve fehlt in Avail, obwohl Used sie nicht enthält. Warum eine 500-GB-Platte nur 465 GB zeigt rechnet die Umrechnung an einem größeren Beispiel vor.

Auf einem Server, auf dem nur Sie arbeiten, dürfen Sie die Reserve auf ein Prozent senken:

sudo tune2fs -m 1 /dev/vda1
df -h /

Das gibt auf einer 80-GB-Platte rund 3 GB frei, im laufenden Betrieb und ohne Neustart. Den Gerätenamen nehmen Sie aus der Ausgabe von df -h /, nicht aus diesem Beispiel.

Was beim ersten Login schon belegt ist

Ein frisches Ubuntu 24.04 belegt nach dem ersten apt upgrade grob 2 bis 3 GB. Das ist wenig, aber es wächst von selbst, und an fünf Stellen sammelt sich Platz, den Sie nie bewusst belegt haben.

Das Journal. systemd-journald behält Logs bis zu einer Obergrenze von zehn Prozent des Dateisystems, höchstens aber 4 GB. Auf einer 80-GB-Platte greift die 4-GB-Grenze, und das Journal nutzt sie mit der Zeit aus. sudo journalctl --disk-usage zeigt den aktuellen Stand.

Der Paketcache. apt-get hebt heruntergeladene .deb-Dateien unter /var/cache/apt/archives auf. sudo du -sh /var/cache/apt zeigt, ob sich das Aufräumen lohnt.

Alte Kernel. Jeder installierte Kernel belegt mehrere hundert MB unter /usr/lib/modules und /boot. Wer Kernel-Updates von Hand mit apt upgrade einspielt und apt autoremove nie aufruft, sammelt dort alte Versionen, von denen nur eine läuft.

Docker. Images, die beschreibbare Schicht laufender Container, Volumes und der Build-Cache liegen alle unter /var/lib/docker. Ein Image, das Sie einmal mit docker pull geholt haben, bleibt dort, bis Sie es löschen, auch wenn kein Container es mehr nutzt. Jedes docker build lässt Zwischenschichten im Build-Cache zurück. Und Container-Logs im Standardformat json-file wachsen ohne Grenze, bis Sie in /etc/docker/daemon.json eine max-size setzen. docker system df zeigt, welcher Teil davon von keinem Container gebraucht wird (RECLAIMABLE). Das sieht du nicht.

Snapshots und Backups. Ob ein Snapshot Ihres Anbieters gegen die 80 GB zählt, separat pro GB abgerechnet wird oder im Preis enthalten ist, steht nicht in der Spec-Zeile. Das regelt jeder Anbieter anders, und es ändert sich. Lesen Sie es auf der Produktseite nach, bevor Sie den ersten Snapshot anlegen, und suchen Sie dort nach beiden Wörtern, „Snapshots“ und „Backups“, weil manche Anbieter das eine anders abrechnen als das andere.

Eine Swap-Datei, die Sie selbst mit fallocate angelegt haben, zählt außerdem voll. Bei 2 GB Swap auf einer 20-GB-Platte sind das zehn Prozent.

Wie Sie sehen, wer den Platz belegt

Vier Befehle reichen. Die Ausgaben hier stammen von einem Beispielserver mit 80 GB und Docker; Ihre Zahlen sehen anders aus, die Struktur ist dieselbe.

df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        72G   19G   50G  28% /

Size minus Used minus Avail ist die für root reservierte Menge. Use% bezieht sich auf Used plus Avail, deshalb kann es 100 % erreichen, während Used noch unter Size liegt.

sudo du -xh --max-depth=1 / | sort -h | tail -n 5
1.4G	/home
2.2G	/opt
2.6G	/usr
12G	/var
19G	/

-x hält du auf dem Dateisystem von /, sonst zählt es /proc, /sys und ein eingehängtes Volume mit. --max-depth=1 zeigt nur die erste Ebene. Wo die Summe groß ist, gehen Sie eine Ebene tiefer: sudo du -xh --max-depth=1 /var | sort -h. Auf einem Server mit Docker landen Sie so fast immer bei /var/lib/docker. Zeigt df deutlich mehr belegt, als du insgesamt findet, hält meist ein Prozess eine gelöschte Datei offen; warum df und du sich widersprechen zeigt, wie Sie diesen Prozess mit lsof finden.

docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          14        6         5.8GB     3.1GB (53%)
Containers      6         6         412MB     0B (0%)
Local Volumes   9         4         2.3GB     1.1GB (47%)
Build Cache     38        0         1.9GB     1.9GB

RECLAIMABLE ist der Teil, den kein laufender Container braucht. In diesem Beispiel sind das über 6 GB, die ein einziger Befehl freigibt. docker system df -v schlüsselt die Summe nach Image und Volume auf.

lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda     252:0    0 74.5G  0 disk
├─vda1  252:1    0 73.4G  0 part /
├─vda14 252:14   0    4M  0 part
├─vda15 252:15   0  106M  0 part /boot/efi
└─vda16 252:16   0  913M  0 part /boot

lsblk zeigt das Blockgerät, das der Anbieter Ihnen gibt, und darunter die Partitionen. Die Zeile vda ist die Größe der virtuellen Platte, vda1 die Root-Partition. Nach einer Vergrößerung des Plans ist diese Ansicht die erste, die Sie prüfen: Steht bei vda mehr als bei vda1, ist die Platte gewachsen und die Partition nicht.

Drei Wege zu mehr Platz, nach Kosten sortiert

Aufräumen kostet nichts

sudo apt clean
sudo apt autoremove --purge
sudo journalctl --vacuum-size=200M
df -h /

apt clean leert /var/cache/apt/archives. autoremove --purge entfernt Pakete, die nur noch als Abhängigkeit eines gelöschten Pakets da sind, darunter alte Kernel, und mit --purge auch deren Konfiguration. journalctl --vacuum-size=200M kürzt die archivierten Journal-Dateien sofort auf 200 MB; dauerhaft setzen Sie SystemMaxUse=200M in /etc/systemd/journald.conf und starten den Dienst mit sudo systemctl restart systemd-journald neu. Ist /boot bereits voll, bricht das nächste Kernel-Update mit No space left on device ab und lässt dpkg in einem halbfertigen Zustand zurück; alte Kernel unter Ubuntu sicher entfernen beschreibt den Ausweg und woran Sie den laufenden Kernel erkennen.

Bei Docker:

docker system prune
docker image prune -a
docker builder prune
docker system df

docker system prune löscht gestoppte Container, ungenutzte Netzwerke, Images ohne Tag und den Build-Cache. docker image prune -a geht weiter und löscht jedes Image, das kein Container nutzt, auch getaggte, also auch das Image, das Sie nächste Woche wieder starten wollten; der nächste docker pull holt es erneut. Volumes fasst keiner der Befehle an, weil dort Daten liegen. docker volume ls -f dangling=true listet Volumes, die kein Container mehr referenziert; prüfen Sie den Inhalt, bevor Sie eines mit docker volume rm löschen. Docker-Speicher auf einem VPS aufräumen geht die Reihenfolge durch und erklärt, warum die Container-Logs unter /var/lib/docker/containers oft der größte Posten sind.

Plan vergrößern

Der zweite Weg ist das Upgrade des Plans, auf deutschen Anbieterseiten meist unter „Speicher erweitern“ oder „Upgrade“. Der Anbieter vergrößert das Blockgerät. Partition und Dateisystem darin wachsen nicht von selbst. Auf Ubuntu-Cloud-Images erledigt das cloud-init beim nächsten Start: Das Modul growpart schiebt das Ende der Root-Partition nach hinten, das Modul resizefs vergrößert ext4. Ein Neustart nach dem Upgrade reicht deshalb in den meisten Fällen. Zeigt lsblk danach immer noch vda größer als vda1, machen Sie es von Hand:

sudo growpart /dev/vda 1
sudo resize2fs /dev/vda1
df -h /

growpart liegt im Paket cloud-guest-utils. Beide Schritte laufen im Betrieb, ohne Aushängen. Das Argument 1 ist die Partitionsnummer, also vda1; liegt Ihr Root auf sda3, heißen die Befehle growpart /dev/sda 3 und resize2fs /dev/sda3. df -h / zeigt danach die neue Größe.

Zwei Einschränkungen. Ein größerer Plan bringt fast immer auch mehr CPU und RAM mit, die Sie bezahlen, ob Sie sie brauchen oder nicht. Und der Weg zurück ist meist versperrt: Ein Blockgerät verkleinern können die wenigsten Anbieter, weil das Dateisystem dabei beschädigt werden kann.

Ein Block-Volume anhängen

Der dritte Weg ist ein zusätzliches Blockgerät, meist „Volume“ oder „Block Storage“ genannt. Es wird pro GB abgerechnet, unabhängig vom Plan, und erscheint im Gast als zweite Platte, vdb oder sdb in lsblk. Sie formatieren es, hängen es unter einem Pfad wie /mnt/data ein und tragen es mit der Option nofail in /etc/fstab ein, damit ein fehlendes Volume den Start nicht blockiert. Die Größe wählen Sie frei, und die Root-Platte bleibt unangetastet. Ein Block-Storage-Volume an einen VPS anhängen geht die Schritte mit mkfs.ext4 und dem fstab-Eintrag durch.

Der Preis dafür ist Latenz. Ein Volume liegt auf einem Storage-Cluster im Rechenzentrum und wird über das Netzwerk angebunden, also macht jede einzelne Operation einen Umweg über das Netz. Für ein Backup-Ziel oder ein Medienarchiv ist das egal. Für eine Datenbank oder /var/lib/docker ist es das nicht, weil genau dort die vielen kleinen Zugriffe von oben stattfinden. Lokale NVMe gegen Netzwerkspeicher auf einem VPS misst den Unterschied mit fio, damit Sie entscheiden können, welche Daten auf welche Platte gehören.

Wann ein Storage-VPS oder Object Storage das richtige Produkt ist

Wenn die Daten schneller wachsen als alles andere, etwa bei einem Backup-Ziel oder einem Medienarchiv, ist ein normaler VPS das falsche Produkt. Ein Storage-VPS ist ein Server mit viel Platte aus HDD oder RAID und wenig CPU; die IOPS pro GB sind entsprechend niedrig. Object Storage hat gar kein Dateisystem, sondern eine S3-API, und wird pro gespeichertem GB und pro Zugriff bezahlt. Beides ist pro GB billiger als jede Root-Platte und langsamer bei kleinen Zugriffen. Der Vergleich Storage-VPS oder normaler VPS zieht die Grenze, und Storage-VPS-Anbieter in Deutschland listet, wer was anbietet.

Die Wörter auf deutschen Anbieterseiten

Die Produkte hinter der GB-Angabe sind bei Hetzner, netcup, Contabo und IONOS dieselben, die Namen unterscheiden sich. Diese Begriffe suchen Sie auf der Produktseite:

  • Speicherplatz oder Storage in der Plan-Tabelle: die Root-Platte, um die es hier ging. Achten Sie darauf, ob NVMe, SSD oder HDD dabeisteht. Fehlt die Angabe, fragen Sie nach.
  • Volumes oder Block Storage: das zusätzliche Blockgerät aus dem dritten Weg, pro GB abgerechnet.
  • Storage Box oder Object Storage: Speicher, der nicht als Platte am Server hängt, sondern über SFTP oder eine S3-API erreichbar ist.
  • Speicher erweitern oder Upgrade: die Vergrößerung des Plans aus dem zweiten Weg.
  • Snapshots und Backups: die beiden Wörter, deren Abrechnung Sie vor dem ersten Klick prüfen. Ob sie im Preis enthalten sind, pro GB kosten oder gegen die Platte zählen, steht nur dort.

FAQ

Warum zeigt df -h weniger als die 80 GB aus dem Angebot?

Weil drei Abzüge zwischen Angebot und Dateisystem liegen. Der Anbieter rechnet in GB (Milliarden Bytes), df in GiB (1024 hoch drei Bytes) und schreibt trotzdem G; aus 80 GB werden so 74,5 GiB. Das Image legt kleine Partitionen für den Bootloader an. Und ext4 reserviert fünf Prozent der Blöcke für root, die in Avail fehlen. sudo tune2fs -m 1 /dev/vda1 senkt die Reserve auf ein Prozent. Alles andere ist von Ihnen belegt und mit sudo du -xh --max-depth=1 / zu finden.

Zählen Snapshots und Backups zum Speicherplatz des VPS?

Das legt der Anbieter fest, und es steht nicht in der Spec-Zeile. Manche rechnen Snapshots pro GB separat ab, manche nehmen automatische Backups in den Planpreis auf, und beides kann sich beim selben Anbieter unterscheiden. Suchen Sie auf der Produktseite nach „Snapshots“ und „Backups“ und lesen Sie die Abrechnung nach, bevor Sie den ersten Snapshot anlegen. Ein Snapshot, den Sie im Panel des Anbieters anlegen, liegt außerhalb der VM; df im Gast ändert sich dadurch nicht.

Ist NVMe auf einem VPS wirklich schneller als eine SATA-SSD?

Auf dem Datenblatt liegt bei kleinen Zugriffen mehr als eine Größenordnung dazwischen. Auf einem geteilten VPS spüren Sie davon nur den Teil, den der Anbieter Ihnen zuteilt, weil die IOPS pro VM begrenzt sind und mehrere VMs auf demselben Laufwerk liegen. Messen Sie es mit fio und --direct=1 auf Ihrem eigenen Server, bevor Sie für NVMe mehr bezahlen. Für eine Datenbank oder Docker zählt der gemessene IOPS-Wert, für ein Backup-Ziel der Durchsatz, und beim Durchsatz ist der Abstand kleiner.

Die Platte ist voll, aber du findet den Platz nicht. Was jetzt?

Ein Prozess hält eine gelöschte Datei offen, meist ein Logfile, das Sie oder logrotate entfernt haben, während der Dienst weiter hineinschreibt. Der Kernel gibt die Blöcke erst frei, wenn der letzte Dateideskriptor geschlossen ist, darum sieht df sie belegt und du sieht sie nicht. sudo lsof -nP +L1 listet solche Dateien mit dem Prozess, der sie hält; ein Neustart dieses Dienstes gibt den Platz frei. Die zweite Ursache sind Dateien, die unter einem Einhängepunkt verdeckt liegen: Wurde nach /mnt/data geschrieben, bevor das Volume dort eingehängt war, liegen diese Daten auf der Root-Platte unter dem Mount.