Ubuntu Linux - Festplatte mit LVM im laufenden Betrieb ohne Neustart vergrößern
Aus znilwiki
Unter Windows ein Klacks, unter Ubuntu nicht einfach:
Eine Festplatte im laufendem Betrieb vergrößern ohne reboot!
Changelog:
- 30.03.2015: Erste Version
- 15.12.2015: Rechtschreibfehler etc. entfernt
- 17.12.2015: Vorschlag von Steffen aufgenommen
- 27.03.2016: Voschlag von Timo mit scsitools aufgenommen
- 13.06.2018: Hinweise eingebaut falls es eine 2. Festplatte und/oder mehrere Partitionen sind
- 17.03.2020: Hinweis auf vergrößern ohne LVM hinzugefügt
- 23.12.2020: Hinweis auf growpart
- 30.07.2024: Hinweis auf https://pve.proxmox.com/wiki/Resize_disks
Warnung: Bitte lest euch erst alles durch! Und dann wählt wie ihr es machen wollt. Es gibt inzwischen an vielen Stellen mehrere Möglichkeiten wie man es macht. Die klassische Methode ist eine zusätzliche Partition dem LVM hinzu zu fügen. Das wird aber dann aber z.B irgendwann bei Snapshots blöd, Wenn die Partition sowieso schon eine eigene Festplatte ist so kann man die in der Regel einfach vergrößern und unter dem LVM erweitern ohne das da eine weitere Partition drauf muss. Schelchter sieht es aus wenn es nur eine Festplatte gibt und z.B. der Swap-Platz wieder am Ende liegt, dann muss in der Regel eine neue Festplatte dazu oder der neue Platz dahinter genutzt werden.
Dabei wird growpart auch ber der LVM Vergrößerung eingesetzt. Der Vorteil ist das man keine zusätzliche Partition erstellt sondern die vorhandene vergößert. Die Methode mit den Partitionen stößt nämlich irgendwann an ihre grenzen
Ausgangslage
- Ubuntu Server 14.04.1
- Eine Festplatte mit 20GB unter VMware ESXi
- Eingerichtet mit LVM bei der Installation
Da mein Server hier "ubuntu" heisst, ist die LVM-Bezeichnung
ubuntu--vg-root
root@ubuntu:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/ubuntu--vg-root 19G 1,3G 17G 8% / none 4,0K 0 4,0K 0% /sys/fs/cgroup udev 486M 4,0K 486M 1% /dev tmpfs 100M 680K 99M 1% /run none 5,0M 0 5,0M 0% /run/lock none 497M 0 497M 0% /run/shm none 100M 0 100M 0% /run/user /dev/sda1 236M 38M 187M 17% /boot
root@ubuntu:~# pvs PV VG Fmt Attr PSize PFree /dev/sda5 ubuntu-vg lvm2 a-- 19,76g 20,00m
Festplatte unter VMware vergrößern
Im vSphere Client bzw. über die Weboberfläche vergrößere ich jetzt die Festplatte von 20GB auf 40GB:
-
Jetzt noch OK geklickt und das war es schon.
Man könnte jetzt noch einen Snapshot machen (nach dem Vergrößern). Falls Ihr etwas falsch macht könnt Ihr dann zumindest in die Ausgangslage zurück.
Rescan 1 unter Linux
Ruft einmal
cfdisk
auf:
Wir sehen in diesem Fall das da am Schluss jämmerliche 1,05MByte frei sind - ggf. ist da auch gar nichts. Die letzte Partition ist sda5
Handelt es sich um eine 2. Festplatte so müsst Ihr ggf.
cfdisk /dev/sdb
Neue Methode
Deshalb stoßen wir eine Scan an damit Ubuntu die neue Größe sieht.
Am einfachsten geht das mit den scsitools:
sudo apt-get install scsitools sudo rescan-scsi-bus --forcerescan
eventuell heisst auf eurem (älteren oder SLES System) auch noch
sudo rescan-scsi-bus.sh --forcerescan
Alte Methode
Wenn Ihr die scsitools nicht installieren könnt geht es auch ohne,
dazu fragen wir zunächst ab welche Adapter wir denn haben:
grep mpt /sys/class/scsi_host/host?/proc_name
Findet Ihr nichts so versucht den Vorschlag von Steffen:
grep mpt /sys/class/scsi_host/host*/proc_name
Die Ausgabe sollte wie folgt sein:
/sys/class/scsi_host/host2/proc_name:mptspi
Damit ist host2
der richtige - auf diesen initialisieren wir nun den Rescan:
echo "- - -" > /sys/class/scsi_host/host2/scan
und kontrollieren hinterher cfdisk
denn hinterher den freien Speicher sieht.
Falls es nicht geklappt hat - wartet einen kurzen Moment und probiert es noch mal.
Klappt das hartnäckig nicht so gebt folgenden Befehl ein (für host2
):
find /sys -name rescan | grep host2
Ausgabe sollte wie folgt sein:
/sys/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/rescan
so, jetzt schicken wir eine 1 an diesen - kopiert den Pfad dazu am besten:
echo 1 > /sys/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/rescan
spätestens jetzt sollte cfdisk
den neuen freien Speicher sehen:
Da sind unsere 20 zusätzlichen Gigabyte ja!
Partition anlegen
pvresize /dev/sdb
und überspringt den Teil hier
Startet
cfdisk
bzw.
cfdisk /dev/sdb
bei der 2. Festplatte (c wäre die dritte usw.).
Und wählt oben die Zeile mit dem freien Speicher aus und geht unten dann auf [ New ]
und danach auf [ Logical ]
:
-
Die vorgeschlagene Größe übernehmt ihr einfach.
Er hat nun die Partition angelegt als sda6
. wir müssen aber den Typ noch ändern über [ Type ]
:
-
Der Typ muss 8E
sein (LVM)
Bei Flags darf nicht "Boot" stehen!!
Und nun gehen wir einmal auf [ Write ]
sonst war die ganze Arbeit umsonst:
und bestätigen das ganze indem wir
yes
eintippen. (oder Ja
bei der deutschen Version)
Dann den cfdisk
über [ Quit ]
verlassen.
Partition dem LVM hinzufügen
Zunächst machen wir noch einmal einen neuen Rescan damit sda6 gefunden wird:
partprobe
Geben wir nun
pvs
ein so sehen wir nur den bisherigen Bereich:
PV VG Fmt Attr PSize PFree /dev/sda5 ubuntu-vg lvm2 a-- 19,76g 20,00m
Das Schlüsselwort hier ist der VG der hier ubuntu-vg
lautet - die Bezeichnung brauchen wir um unsere neue Partition dem LVM hinzu zu fügen:
vgextend ubuntu-vg /dev/sda6
Ausgabe:
No physical volume label read from /dev/sda6 Physical volume "/dev/sda6" successfully created Volume group "ubuntu-vg" successfully extended
Der Befehl pvs
sollte nun so etwas ausgeben:
PV VG Fmt Attr PSize PFree /dev/sda5 ubuntu-vg lvm2 a-- 19,76g 20,00m /dev/sda6 ubuntu-vg lvm2 a-- 20,00g 20,00g
Vorhandenes LVM Volume erweitern
Falls Ihr eine Platte mit mehreren Volumes habt könnt Ihr euch vorher mit
lvs
euch diese anzeigen lassen und den richtigen Namen wählen.
Wir erweitern nun das vorhandene Volume um den neuen freien Speicherplatz:
lvextend -l+100%FREE /dev/ubuntu-vg/root
Ausgabe:
Extending logical volume root to 38,76 GiB Logical volume root successfully resized
Nun steht der freie Speicher dem vorhandenen Volume zur Verfügung, wird aber noch nicht genutzt:
df -h
Ausgabe:
Filesystem Size Used Avail Use% Mounted on /dev/mapper/ubuntu--vg-root 19G 1,3G 17G 8% / none 4,0K 0 4,0K 0% /sys/fs/cgroup udev 486M 4,0K 486M 1% /dev tmpfs 100M 684K 99M 1% /run none 5,0M 0 5,0M 0% /run/lock none 497M 0 497M 0% /run/shm none 100M 0 100M 0% /run/user /dev/sda1 236M 38M 187M 17% /boot
Der Pfad den wir brauchen ist
/dev/mapper/ubuntu--vg-root
und zur Zeit noch 19GB.
Jetzt müssen wir das Dateisystem noch erweitern, dazu nutzen wir den Pfad aus der obigen Ausgabe:
Für ext4 Dateisystem nutzen wir resize2fs. Bei anderen Dateisystem würde es eine Magic Block Fehlermeldung geben.
Bei zum Beispiel XFS müsstet Ihr xfs_growfs nutzen mit dem Pfad.
resize2fs /dev/mapper/ubuntu--vg-root
Ausgabe:
resize2fs 1.42.9 (4-Feb-2014) Das Dateisystem auf /dev/mapper/ubuntu--vg-root ist auf / eingehängt; Online-Grössenveränderung nötig old_desc_blocks = 2, new_desc_blocks = 3 Das Dateisystem auf /dev/mapper/ubuntu--vg-root ist nun 10160128 Blöcke groß.
Nachkontrolle:
root@ubuntu:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/ubuntu--vg-root 39G 1,3G 35G 4% / none 4,0K 0 4,0K 0% /sys/fs/cgroup udev 486M 4,0K 486M 1% /dev tmpfs 100M 684K 99M 1% /run none 5,0M 0 5,0M 0% /run/lock none 497M 0 497M 0% /run/shm none 100M 0 100M 0% /run/user /dev/sda1 236M 38M 187M 17% /boot
Ohne LVM
Wenn die Festplatte ohne LVM eingerichtet wurde, also direkt formatiert, geht das vergrößern auch (1x beim Kunden getestet):
- Vergrößert die Festplatte unter VMware
- Führt die Punkte aus 3. (ReScan aus) damit das System die neue Größe bemerkt.
führt folgende Befehle aus - die Nummer an die Nummer der Festplatte anpassen:
growpart /dev/sda 3 resize2fs /dev/sda3
würde die Festplatte /dev/sda3
vergrößern.
Beim ersten Befehl ist ein Leerzeichen zwischen den sda und der 3 - das muss so!
Wenn er growpart
nicht findet so installiert es nach. Unter Ubuntu / Debian ist es verfügbar, CentOS oder Redhat weis ich nicht)
Externe Links
Eventuell Hilfreiche Links wie man es auch noch machen kann (mit fdisk statt cfdisk) etc.
Konnte ich neulich unter SLES12 gebrauchen.
- https://www.rootusers.com/how-to-increase-the-size-of-a-linux-lvm-by-adding-a-new-disk/
- https://www.suse.com/documentation/sled-12/book_sle_deployment/data/sec_yast2_i_y2_part_expert.html
- https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/xfsgrow.html
- Ohne LVM: https://unix.stackexchange.com/questions/373063/auto-expand-last-partition-to-use-all-unallocated-space-using-parted-in-batch-m