
How-to: Vergrößern einer Linux-VM-Festplatte und Dateisystems ohne Neustart
Warst du schon mal in der Situation, dass auf einem Linux-Server der Speicherplatz ausgegangen ist und du diesen erweitern musstest, den Server aber nicht neu starten konntest? In diesem Artikel zeige ich dir, wie du die Größe der Root-Partition erhöhen kannst, ohne den Server neu starten zu müssen.
Die virtuelle Festplatte zu vergrößern ist in der Regel schnell erledigt. Damit das Betriebssystem den zusätzlichen Speicherplatz aber auch wirklich nutzen kann, musst du innerhalb der virtuellen Maschine noch ein paar Änderungen vornehmen. Die gute Nachricht ist, dass die meisten modernen Linux-Distributionen die Online-Erweiterung von Dateisystemen unterstützen. Dadurch kannst du den verfügbaren Speicherplatz erweitern, ohne den Server neu starten oder laufende Anwendungen unterbrechen zu müssen.
Diese Anleitung erklärt den grundsätzlichen Ablauf und behandelt die gängigsten Speicherlayouts von Linux-VMs auf Plattformen wie:
- KVM / QEMU
- VMware ESXi
- Microsoft Hyper-V
- Xen
- VirtualBox
- Cloud-Anbieter mit VirtIO-, SCSI- oder NVMe-Datenträgern
Welche Befehle du am Ende benötigst, hängt von deinem Festplattenlayout, dem verwendeten Dateisystem und der zugrunde liegenden Speichertechnologie ab.
Den Speicheraufbau einer Linux-VM verstehen
Bevor du loslegst, solltest du verstehen, an welcher Stelle der zusätzliche Speicherplatz überhaupt verfügbar wird. Der Speicher einer virtuellen Maschine besteht aus mehreren Ebenen:
Hypervisor
|
↓
Virtuelle Festplatte (VMDK/QCOW2/VHDX/VHD)
|
↓
Linux-Blockgerät (/dev/sda, /dev/vda, /dev/nvme0n1)
|
↓
Partition / LVM / RAID
|
↓
Dateisystem (ext4, XFS, Btrfs)
|
↓
Eingehängtes Verzeichnis (/)Wenn du die virtuelle Festplatte vergrößerst, ändert sich zunächst nur die erste Ebene. Zum Beispiel:
Vorher:
Virtuelle Festplatte: 50GB
/dev/vda
└── /dev/vda1
└── ext4-Dateisystem (50GB)Nach dem Vergrößern der Festplatte:
Virtuelle Festplatte: 100GB
/dev/vda
└── /dev/vda1
└── ext4-Dateisystem (50GB)
Nicht zugewiesener Speicherplatz: 50GBDer zusätzliche Speicherplatz steht dem Betriebssystem noch nicht automatisch zur Verfügung. Erst nachdem du die Partition und anschließend das Dateisystem erweitert hast, kann Linux die zusätzliche Kapazität auch nutzen.
Voraussetzungen
Bevor du Änderungen vornimmst, solltest du Folgendes bereithalten:
- Administrativen Zugriff auf den Hypervisor der virtuellen Maschine.
- Die Berechtigung, die Größe der virtuellen Festplatte auf dem Hypervisor zu ändern.
- SSH-Zugriff auf die virtuelle Maschine.
- Einen aktuellen Snapshot oder ein aktuelles Backup.
- Einen Überblick über das aktuelle Speicherlayout.
1. Das aktuelle Festplattenlayout prüfen
Als Erstes solltest du dir ansehen, wie das System aktuell aufgebaut ist.
Beginne mit lsblk:
root@server01:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 252:0 0 50G 0 disk ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2 0 49G 0 part /
Dies zeigt:
- Die Festplatte (
vda) ist 50 GB groß. - Die Root-Partition (
vda2) ist nur 49 GB groß.
Prüfe anschließend die Belegung des Dateisystems:
root@server01:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda2 49G 43G 4.0G 92% / /dev/vda1 974M 120M 854M 13% /boot
2. Die virtuelle Festplatte vergrößern
Der erste Schritt erfolgt auf der Hypervisor-Seite. Vergrößere die virtuelle Festplatte auf die gewünschte Endgröße. Hat die Festplatte beispielsweise aktuell 50 GB und du benötigst weitere 50 GB, solltest du sie auf insgesamt 100 GB erweitern.
VMware
Vergrößere die Festplatte über:
- Virtual Machine → Edit Settings → Hard Disk → Increase Capacity
Powershell:
Resize-VHD
-Path "LinuxServer01.vhdx"
-SizeBytes 100GBVBoxManage modifymedium disk LinuxServer01.vdi --resize 102400
Weil:
100GB × 1024MB = 102400MB
qemu-img resize verhält sich etwas anders. Ohne ein + gibst du die endgültige Größe an:
qemu-img resize linux-server.qcow2 100G
Mit einem + wird die angegebene Größe zusätzlich hinzugefügt:
qemu-img resize linux-server.qcow2 +50G
Beide Befehle führen zum gleichen Ergebnis:
50GB + 50GB = 100GB
Läuft die VM bereits, kannst du stattdessen Folgendes verwenden:
virsh blockresize linux-server /var/lib/libvirt/images/linux-server.qcow2 100G
Der genaue Befehl hängt vom verwendeten Storage-Backend ab. Nutzt die virtuelle Festplatte beispielsweise LVM, kannst du sie so vergrößern:
lvextend -L +50G /dev/vg/vm-disk
An diesem Punkt ist die virtuelle Festplatte auf dem Hypervisor zwar größer, Linux hat diese Änderung aber möglicherweise noch nicht erkannt.
3. Die Festplatte unter Linux neu einlesen
Nachdem du die virtuelle Festplatte vergrößert hast, erkennt Linux den zusätzlichen Speicherplatz möglicherweise nicht sofort.
root@server01:~# lsblk NAME SIZE TYPE MOUNTPOINTS vda 50G disk ├─vda1 1G part /boot └─vda2 49G part /
Wie du siehst, wird noch die alte Größe angezeigt. Deshalb müssen wir das Blockgerät zunächst neu einlesen.
Je nach Festplattentyp unterscheidet sich der Befehl:
Für SCSI-Festplatten:
echo1 > /sys/class/block/sda/device/rescan
Für VirtIO-Festplatten:
echo1 > /sys/class/block/vda/device/rescan
Für NVMe:
nvme rescan
Überprüfen
Prüfe anschließend mit lsblk, ob Linux die neue Größe erkannt hat:
root@server01:~# lsblk NAME SIZE TYPE MOUNTPOINTS vda 100G disk ├─vda1 1G part /boot └─vda2 49G part /
Linux erkennt jetzt den zusätzlichen Speicherplatz. Die Partition selbst wurde allerdings noch nicht vergrößert.
4. Das Speicherlayout bestimmen
Wie du den Speicherplatz erweiterst, hängt davon ab, wie die Festplatte aufgebaut ist.
Zu den gängigsten Speicherlayouts gehören:
- Standardpartitionen
- LVM
- Software-RAID
- ZFS
- Verschlüsselte Datenträger
Am häufigsten kommen unter Linux Standardpartitionen und LVM zum Einsatz.
Standardpartitionen
Beispiel:
/dev/vda1 → /
Typische Werkzeuge::
- fdisk
- parted
- resize2fs
- xfs_growfs
LVM
Beispiel:
/dev/vda
└── partition
└── volume group
└── logical volume /
Typische Werkzeuge:
- pvresize
- lvextend
- resize2fs
- xfs_growfs
LVM ist in der Regel das am einfachsten zu erweiternde Speicherlayout.
Weitere Speichertechnologien
In manchen Umgebungen kommen außerdem folgende Technologien zum Einsatz:
- RAID
- ZFS
- Btrfs
- Verschlüsselte Datenträger
Für diese gelten jeweils eigene Vorgehensweisen zur Speichererweiterung.
5. Das Root-Dateisystem mit LVM erweitern
LVM wird häufig in Enterprise-Linux-Distributionen und vielen Cloud-Images verwendet.
LVM-Konfiguration prüfen
Prüfe zunächst, ob dein System LVM verwendet:
root@server01:~# lsblk NAME SIZE TYPE MOUNTPOINTS vda 50G disk └─vda2 50G part └─ubuntu--vg-root 50G lvm /
Nachdem du die virtuelle Festplatte auf 100 GB vergrößert und das Blockgerät neu eingelesen hast, sieht die Ausgabe so aus:
root@server01:~# lsblk NAME SIZE TYPE MOUNTPOINTS vda 100G disk └─vda2 100G part └─ubuntu--vg-root 50G lvm /
Die Festplatte und die Partition wurden bereits vergrößert, das logische Volume verwendet aber noch immer die ursprünglichen 50 GB.
Prüfe die Volume Groups:
root@server01:~# vgdisplay VG Name ubuntu-vg VG Size 98.00 GiB Alloc PE / Size 49.00 GiB Free PE / Size 49.00 GiB
Physical Volume vergrößern
root@server01:~# pvresize /dev/vda2 Physical volume "/dev/vda2" changed 1 physical volume(s) resized or updated
Logical Volume erweitern
root@server01:~# lvextend -l +100%FREE /dev/ubuntu-vg/root Size of logical volume ubuntu-vg/root changed from 49.00 GiB to 98.00 GiB. Logical volume ubuntu-vg/root successfully resized.
Alternativ kannst du auch eine feste Größe angeben:
lvextend -L +50G /dev/mapper/root
Dateisystem vergrößern
Für ext4:
root@server01:~# resize2fs /dev/ubuntu-vg/root resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/ubuntu-vg/root is mounted on /; on-line resizing required The filesystem on /dev/ubuntu-vg/root is now 25690112 (4k) blocks long.
Für XFS:
root@server01:~# xfs_growfs / data blocks changed from 12845056 to 25690112
Überprüfen
Kontrolliere abschließend mit df, ob der zusätzliche Speicherplatz verfügbar ist:
root@server01:~# df -h / Filesystem Size Used Avail Use% /dev/mapper/ubuntu--vg-root 98G 43G 51G 46% /
6. Eine Standardpartition erweitern
Manche Linux-Installationen verwenden ein klassisches Partitionslayout ohne LVM.
Beispiel:
root@server01:~# fdisk -l /dev/vda Device Start End Sectors Size /dev/vda1 2048 96471039 96468991 46G /dev/vda2 96471040 104857599 8386559 4G
Der wichtigste Wert ist der Start-Sektor.
Beim Neuerstellen der Partition muss dieser Start-Sektor exakt gleich bleiben. Ist das nicht der Fall, kann das Dateisystem beschädigt werden und die Daten sind möglicherweise nicht mehr erreichbar.
Swap deaktivieren (falls erforderlich)
Falls deine Swap-Partition als eigene Partition eingerichtet ist, solltest du sie zunächst deaktivieren. (⚠️ Hinweis: Stelle sicher, dass dein System eine Zeit lang auch ohne Swap stabil weiterlaufen kann.):
swapoff -a
Partitionen löschen
Jetzt erstellen wir die Partitionstabelle neu. Dazu löschen wir zunächst die beiden vorhandenen Partitionen.
Starte fdisk /dev/vda, lösche anschließend mit d zuerst Partition 2 und danach Partition 1:
root@prod-deb-01:~# fdisk /dev/vda Command (m for help): d Partition number (1,2, default 2): Partition 2 has been deleted. Command (m for help): d Selected partition 1 Partition 1 has been deleted.
⚠️ Wichtig: Bei diesem Schritt wird die Partitionstabelle geändert. Die vorhandenen Partitionen werden gelöscht und anschließend mit neuen Grenzen neu erstellt. Die Daten bleiben nur deshalb erhalten, weil die Partitionen mit genau denselben Start-Sektoren neu angelegt werden. Prüfe die Start-Sektoren deshalb sorgfältig, bevor du die Änderungen speicherst, und stelle sicher, dass du über ein aktuelles Backup oder einen Snapshot verfügst.
Partitionen neu erstellen
Anschließend legen wir die Partitionen wieder an. Da unsere Swap-Partition bisher 4 GB groß war, behalten wir diese Größe bei. Du kannst sie bei Bedarf natürlich auch vergrößern.
Zuerst /dev/vda1 erstellen:
- Drücke
n, um eine neue Partition anzulegen. - Wähle
pfür eine primäre Partition. - Übernimm den vorgeschlagenen First sector (
2048), indem du einfach Enter drückst. - Gib anschließend die gewünschte Partitionsgröße an. Wenn du die Festplatte beispielsweise auf 100 GB erweitert hast und 4 GB für Swap reservieren möchtest, gibst du
+96Gein.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-209715199, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-209715199, default 209715199): +96G
Created a new partition 1 of type 'Linux' and of size 96 GiB.
Anschließend die Swap-Partition erstellen
- Drücke erneut
nund anschließendp. - Übernimm den vorgeschlagenen Wert für First sector mit Enter.
- Übernimm auch den Standardwert für Last sector, indem du erneut Enter drückst.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (201328640-209715199, default 201328640):
Last sector, +sectors or +size{K,M,G,T,P} (201328640-209715199, default 209715199):
Created a new partition 2 of type 'Linux' and of size 4 GiB.
Da diese Partition als Swap verwendet werden soll, musst du jetzt noch ihren Typ in fdisk ändern.
- Drücke
t. - Wähle anschließend Partition 2.
- Mit
Lkannst du dir alle verfügbaren Partitionstypen anzeigen lassen. Gib anschließend82ein, um Linux swap / Solaris auszuwählen.
Command (m for help): t Partition number (1,2, default 2): 2 Partition type (type L to list all types): L 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT 10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/ 11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b 12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor 16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto 1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep 1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT Partition type (type L to list all types): 82
fdisk bestätigt anschließend die Änderung:
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
Speichere die Änderungen anschließend mit w:
Command (m for help): w
Vor dem Beenden kann folgende Meldung erscheinen:
The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Device or resource busy The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
Partitionstabelle ohne Neustart neu einlesen
Damit der Kernel die neue Partitionstabelle übernimmt, kannst du partprobe ausführen:
root@prod-deb-01:~# partprobe
Dateisystem vergrößern
Nachdem die Partition erweitert wurde, musst du noch das Dateisystem vergrößern.
ext4
resize2fs /dev/vda2
Beispiel:
resize2fs 1.47.0 Filesystem at /dev/vda2 is mounted on /; on-line resizing required The filesystem on /dev/vda2 is now 39062500 blocks long.
XFS
xfs_growfs /
Beispiel:
meta-data=/dev/vda2 data blocks changed from 12800000 to 39062500
BTRFS
btrfs filesystem resize max /
Neue Swap-Partition initialisieren
Da wir die Swap-Partition neu erstellt haben, muss sie jetzt neu initialisiert werden:
root@prod-deb-01:~# mkswap /dev/vda2 Setting up swapspace version 1, size = 4193276 KiB no label, UUID=c55c25a2-a386-4653-8455-4d9030586dd2
Anschließend musst du die Datei /etc/fstab bearbeiten und die alte UUID durch die neue ersetzen, die von mkswap ausgegeben wurde. Die betreffende Zeile hat keinen Einhängepunkt (mount point) und verwendet den Typ swap.
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> UUID=332f8fb5-ff1f-4297-b512-f2c93a277296 / ext4 errors=remount-ro 0 1 /dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0 UUID=c55c25a2-a386-4653-8455-4d9030586dd2 none swap sw 0 0
Swap wieder aktivieren
Nachdem du /etc/fstab angepasst hast, kannst du die Swap-Partition wieder aktivieren:
root@prod-deb-01:~# swapon -a
7. ZFS-Speicher erweitern
ZFS funktioniert etwas anders als herkömmliche Partitionen oder LVM. Nachdem du die virtuelle Festplatte vergrößert hast, musst du den zusätzlichen Speicherplatz dem ZFS-Pool zur Verfügung stellen.
Prüfe zunächst den Status des Pools:
zpool status
Erweitere anschließend das entsprechende Gerät:
zpool online -e pool_name device_name
Überprüfe zum Schluss, ob die neue Größe übernommen wurde:
zpool list
8. Überprüfen, ob die Erweiterung erfolgreich war
Prüfe zuerst die Größe des Dateisystems:
df-h / Filesystem Size Used Avail Use% /dev/vda2 96G 43G 49G47% /
Kontrolliere anschließend das Partitionslayout:
lsblk NAME SIZE TYPE MOUNTPOINTS vda 100G disk ├─vda1 1G part /boot └─vda2 96G part /
Zum Schluss kannst du noch die Uptime überprüfen, um sicherzugehen, dass der Server während der gesamten Erweiterung nicht neu gestartet wurde:
uptime14:32:51 up147 days,4:21,2 users, load average:0.05,0.02,0.00
Damit ist die Festplatte erfolgreich erweitert worden – ganz ohne Neustart.
Wann trotzdem ein Neustart erforderlich sein kann
Die Online-Erweiterung funktioniert auf den meisten modernen Linux-Systemen problemlos. In einigen Fällen lässt sich ein Neustart jedoch nicht vermeiden:
- Der Kernel kann die neue Partitionstabelle nicht neu einlesen.
- Das Layout der Root-Partition ändert sich unerwartet.
- Es werden ältere Dateisysteme verwendet.
- Verschlüsselte Datenträger erfordern zusätzliche Schritte.
- RAID-Metadaten müssen neu aufgebaut werden.
- Der Hypervisor unterstützt keine Online-Vergrößerung von Festplatten.
References
1. KVM / QEMU / libvirt
qemu-imgDokumentation:QEMU Utilities Documentation –qemu-img- Beschreibt das Erstellen und Vergrößern virtueller Festplatten im Offline-Betrieb, einschließlich der Syntax von
qemu-img resize.
- Beschreibt das Erstellen und Vergrößern virtueller Festplatten im Offline-Betrieb, einschließlich der Syntax von
virshReferenzhandbuch:libvirt Management Utilities –virsh blockresize- Erklärt, wie sich die Blockgeräte einer laufenden virtuellen Maschine mit
virsh blockresizevergrößern lassen.
- Erklärt, wie sich die Blockgeräte einer laufenden virtuellen Maschine mit
2. VMware ESXi & vSphere
- VMware ESXi Dokumentation zur Festplattenverwaltung:VMware Docs – Increasing the Virtual Disk Size
- Zeigt, wie sich die Größe einer virtuellen Festplatte über Edit Settings in vSphere bzw. ESXi erweitern lässt.
3. Microsoft Hyper-V
- Microsoft Learn PowerShell-Modul:Microsoft Learn –
Resize-VHD- Beschreibt die Syntax und Parameter des
Resize-VHD-Cmdlets zum Vergrößern von.vhdx-Dateien – sowohl online als auch offline.
- Beschreibt die Syntax und Parameter des
4. VirtualBox
- Oracle VirtualBox Handbuch:Oracle VM VirtualBox –
VBoxManage modifymedium- Offizielle Referenz für die Kommandozeile, einschließlich des Parameters
--resizezum Vergrößern virtueller Festplatten.
- Offizielle Referenz für die Kommandozeile, einschließlich des Parameters
5. Xen / XenServer / XCP-ng
- Offizielle XenServer-Dokumentation:XenServer Storage Management Guide
- Erklärt die Eigenschaften von Virtual Disk Images (VDIs) sowie das Erweitern von Storage Repositories.
- Xen Orchestra Dokumentation:Xen Orchestra Infrastructure & Storage Management
- Dokumentation zum Verwalten und Vergrößern virtueller Festplatten in modernen Xen-basierten Umgebungen.