Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

SWAP deaktivieren, die zugehörige RAID-Partition entfernen, andere RAID-Partitionen verschieben und erweitern

profile picture
Author
Andreas Wahlen
Published
2023-02-02
Time to read
9 minutes reading time

Einführung

Ich nutze einen dedizierten Root-Server von hetzner.com, der über zwei 512 GB NVMe SSDs verfügt. Jede enthält die gleichen drei Partitionen für SWAP, /boot und / (alles andere). Alle drei Partitionen befinden sich in einem Software-RAID 1 Verbund mittels mdadm. Dadurch sind insgesamt drei Partitionen nutzbar:

  1. SWAP oder /dev/md0
  2. /boot oder /dev/md1
  3. / oder /dev/md2

Da die SWAP-Partition 32 GiB groß ist und mein Speicherplatz knapp wird, möchte ich SWAP deaktivieren, die zugehörige Partition entfernen und den gewonnenen Speicherplatz zur Partition /dev/md2 hinzufügen. Der schwierige Teil kommt dadurch zustande, dass mein System bereits in Benutzung ist und ich die Daten darauf nicht verlieren will. Die Änderungen sollen also ohne Datenverlust und ohne Einbeziehen eines zweiten Systems vonstattengehen. Dieses Tutorial zeigt, wie genau dies umgesetzt werden kann.

Info: Dieses Tutorial wurde auf Alma Linux (ähnlich zu dem bekannteren CentOS) getestet, sollte aber auch für viele andere Distributionen funktionieren, da es zum Großteil Standard Linux Programme verwendet.

Übersicht

Vorher:

RAID 1 md0
für SWAP
RAID 1 md1
für /boot
RAID 1 md2
für /
Disk 1
nvme0n1
Disk 1 Partition 1
nvme0n1p1
Disk 1 Partition 2
nvme0n1p2
Disk 1 Partition 3
nvme0n1p3
Disk 2
nvme1n1
Disk 2 Partition 1
nvme1n1p1
Disk 2 Partition 2
nvme1n1p2
Disk 2 Partition 3
nvme1n1p3

In Schritt 1 und 2 wird SWAP deaktiviert und die zugehörige Partition entfernt:

RAID 1 md1
für /boot
RAID 1 md2
für /
Disk 1
nvme0n1
ungenutzter Speicherplatz Disk 1 Partition 2
nvme0n1p2
Disk 1 Partition 3
nvme0n1p3
Disk 2
nvme1n1
ungenutzter Speicherplatz Disk 2 Partition 2
nvme1n1p2
Disk 2 Partition 3
nvme1n1p3

Schritt 3 erklärt, wie die übrigen Partitionen nach links verschoben werden können, sodass der freie Speicherplatz rechts aller Partitionen ist:

RAID 1 md1
für /boot
RAID 1 md2
für /
Disk 1
nvme0n1
Disk 1 Partition 2
nvme0n1p2
Disk 1 Partition 3
nvme0n1p3
ungenutzter Speicherplatz
Disk 2
nvme1n1
Disk 2 Partition 2
nvme1n1p2
Disk 2 Partition 3
nvme1n1p3
ungenutzter Speicherplatz

In Schritt 4 wird dann die Partition md2 so vergrößert, dass der gewonnene freie Speicherplatz ausgenutzt wird:

RAID 1 md1
für /boot
RAID 1 md2 (vergrößert)
für /
Disk 1
nvme0n1
Disk 1 Partition 2
nvme0n1p2
Disk 1 Partition 3 (vergrößert)
nvme0n1p3
Disk 2
nvme1n1
Disk 2 Partition 2
nvme1n1p2
Disk 2 Partition 3 (vergrößert)
nvme1n1p3

Begrifflichkeiten

  • Festplatte wird als Begriff sowohl für SSDs als auch HDDs genutzt
  • Festplattenpartition wird für gewöhnliche Partitionen auf einer einzelnen Festplatte als Abgrenzung zu RAID-Partitionen genutzt

Vorbereitung: Informationen über Festplatten und Partitionen sammeln

Im Allgemeinen hat sich gezeigt, dass die folgenden Befehle hilfreiche Informationen ausgeben, um den Stand der Dinge zu zeigen. Dazu gehören Angaben zu Name, Größe, UUID, Startsektor, Endsektor usw. der einzelnen Partitionen und Festplatten.

  • fdisk -l zeigt die Größe in Bytes und Sektoren sowie die Positionen von jeder Partition (RAID- und Festplattenpartitionen)
  • blkid listet Partitionen und Festplatten zusammen mit den zugehörigen UUIDs auf
  • lsblk zeigt die hierarchische Ansicht der Festplatten und RAID-Partitionen mit Größe, Typ und Einhängepunkt
  • df -h Perspektive des Betriebssystems auf die Partitionen mit Größe, freiem und belegtem Speicherplatz

Damit kann etwa der Zwischenstand visuell geprüft werden, um den Erfolg einer Aktion zu bestätigen.

Schritt 1 - SWAP deaktivieren

SWAP Speicher ist Speicherplatz auf der Festplatte, der genutzt wird, um den Arbeitsspeicher zu erweitern. In meinem Fall habe ich jedoch ausreichend Arbeitsspeicher, aber zu wenig Speicherplatz. Es wird häufig diskutiert, ob SWAP überhaupt noch sinnvoll ist angesichts moderner SSDs. Darauf wird hier jedoch nicht näher eingegangen.

Um SWAP vorübergehend (bis zum Neustart des Systems) zu deaktivieren, kann der folgende Befehl ausgeführt werden:

swapoff -a

Mit dem Programm htop (falls installiert) kann die aktuelle Größe des SWAP-Speichers gezeigt werden (oben links, direkt unter dem Arbeitsspeicher).

Um SWAP dauerhaft zu deaktivieren, muss die Zeile in /etc/fstab auskommentiert werden, die "swap" enthält, wie im Beispiel zu sehen:

proc /proc proc defaults 0 0
# /dev/md/0
#UUID=38c56f99-6dd4-43e2-801c-xxxxxxxxxxxx none swap sw 0 0
# /dev/md/1
UUID=8a084a81-e20b-4239-a8ef-xxxxxxxxxxxx /boot ext3 defaults 0 0
# /dev/md/2
UUID=85f9f200-0ade-42de-9eac-xxxxxxxxxxxx / ext4 defaults 0 0

Dadurch wird die SWAP-Partition bei den folgenden Systemstarts nicht erneut eingebunden. Die auskommentierte Zeile kann auch gelöscht werden, allerdings ist es grundsätzlich eine gute Idee den Weg zurück offen zu halten, falls etwas schief geht.

Nun sollte das System neu gestartet werden, um zu testen, ob der Schritt funktioniert hat und um den nächsten Schritt vorzubereiten.

Schritt 2 - SWAP-Partition entfernen

Vorbereitend muss einmal der Inhalt der Datei /proc/mdstat ausgelesen werden, da er später benötigt wird und im nächsten Schritt verändert wird.

cat /proc/mdstat

Zunächst sollte das RAID-Array der Partition entfernt werden (falls die SWAP-Partition kein RAID nutzt, sollte dieser Schritt übersprungen werden):

umount /dev/md0
mdadm --stop /dev/md0
mdadm --remove /dev/md0

Info: Der letzte Befehl kann fehlschlagen, das ist ok. Er dient nur zur Abwärtskompatibilität.

Anschließend müssen die sogenannten Superblocks der Festplattenpartitionen auf beiden Datenträgern einzeln entfernt werden. Um die betroffenen Festplattenpartitionen des RAID-Verbunds aufzulisten, wird der Inhalt der Datei /proc/mdstat herangezogen, der zuvor ausgelesen wurde.

Bei mir lauteten die Bezeichnungen bei /dev/md0 /dev/nvme0n1p1 und /dev/nvme1n1p1.

Der folgende Befehl bekommt all diese Partitionsbezeichnungen als Parameter (mit Leertaste getrennt) übergeben:

mdadm --zero-superblock /dev/nvme0n1p1 /dev/nvme1n1p1

Dann werden die Festplattenpartitionen mit fdisk und der Festplattenbezeichnung gelöscht:

fdisk /dev/nvme0n1

Info: Es handelt sich nicht um die Partitionsbezeichnung, sondern um die Bezeichnung der jeweils zugehörigen Festplatten.

Anschließend wird d eingegeben, um die Partition zu löschen. Daraufhin wird nach der Partitionsnummer gefragt, die in meinem Fall 1 ist. Durch Angabe dieser Nummer, wird die Partition gelöscht. Anschließend werden alle Änderungen mit w bestätigt. Dieser Schritt muss für alle Festplattenpartitionen bzw. Festplatten des RAID-Verbunds wiederholt werden.

Info: Ich musste zusätzlich zum Deaktivieren des RAID-Arrays die Zeile in /etc/mdadm.conf, die /dev/md0 betrifft auskommentieren, um das RAID-Array tatsächlich zu deaktivieren. Warum ist mir schleierhaft.

Der Bereich, der auf der Festplatte für die SWAP-Partition genutzt wurde ist jetzt frei. Im nächsten Schritt können die übrigen Partitionen nach links verschoben werden.

RAID 1 md0
für SWAP
RAID 1 md1
für /boot
RAID 1 md2
für /
Disk 1
nvme0n1
verfügbar
nvme0n1p1
Disk 1 Partition 2
nvme0n1p2
Disk 1 Partition 3
nvme0n1p3
Disk 2
nvme1n1
verfügbar
nvme1n1p1
Disk 2 Partition 2
nvme1n1p2
Disk 2 Partition 3
nvme1n1p3

Schritt 3 - Andere RAID-Partitionen verschieben

Nun kommen wir zum kritischen Teil. Hierzu muss ein separates Betriebssystem verwendet werden, das die Partitionen nicht benutzt, die verschoben werden sollen. Dazu habe ich das Rescue System von Hetzner verwendet, das über das Netzwerk gestartet wird und über die Administrationsoberfläche aktiviert werden kann.

Um eine Partition nach links (zum Anfang der Festplatte) zu verschieben, ist folgendes auszuführen:

echo '-32G,' | sfdisk --move-data /dev/nvme0n1 -N 2

dabei bedeutet 32G, dass die Partition um 32 GiB nach links verschoben werden soll (Minus meint links, Plus wäre rechts). Das -N 2 steht für Partitionsnummer 2.

Um in Schritt 4 eine RAID-Partition zu vergrößern, müssen alle Festplattenpartitionen (auf allen Festplatten des RAID-Verbunds) so verschoben werden, dass der freie Speicherplatz unmittelbar rechts von der zu vergrößernden Partition ist. Dazu kann dieser Schritt 3 für all diese Festplattenpartitionen wiederholt werden.

Die übrigen Festplattenpartitionen sind dann links auf der Festplatte. Als nächstes kann der "End Point" der Partitionen neben einem freien Festplatten-Bereich wie in Schritt 4 beschrieben nach rechts verschoben werden. In meinem Fall sind das die Festplattenpartitionen nvme0n1p3 und nvme1n1p3. Zusätzlich kann auch die RAID-Partition md2 vergrößert werden.

RAID 1 md1
für /boot
RAID 1 md2
für /
Disk 1
nvme0n1
Disk 1 Partition 2
nvme0n1p2
Disk 1 Partition 3
nvme0n1p3
verfügbar
Disk 2
nvme1n1
Disk 2 Partition 2
nvme1n1p2
Disk 2 Partition 3
nvme1n1p3
verfügbar

Schritt 4 - RAID-Partition vergrößern

Um die RAID-Partition zu vergrößern, sind die folgenden drei Schritte notwendig. Ein Neustart zwischen den einzelnen Schritten wird empfohlen, kann sogar notwendig sein.

Schritt 4.1 - Vergrößern der Festplattenpartitionen

Mit parted wird eine interaktive Umgebung für die Vergrößerung gestartet. Dort muss zunächst die richtige Festplatte mit dem Befehl select /dev/nvme0n1 ausgewählt werden. Dann wird für diese Festplatte eine Liste aller Partitionen und partitionsfreier Bereiche mit print free ausgegeben. resizepart wird nach der Partitionsnummer und nach der Zielgröße der Partition fragen.

Dieser Schritt muss für alle Festplattenpartitionen der RAID-Partition wiederholt werden.

Schritt 4.2 - RAID-Partition vergrößern

Dies ist kein alternativer Schritt zu Schritt 4.1, sondern ein zusätzlicher!

Nun muss mdadm noch mitgeteilt werden, dass es mehr Speicherplatz der Festplattenpartitionen für die RAID-Partition nutzen soll. In meinem Fall will ich /dev/md2 auf 485210 MiB vergrößern.

mdadm --grow --size=485210M /dev/md2

Schritt 4.3 - Dateisystem erweitern

Wie durch einen Aufruf von df -h möglicherweise bereits aufgefallen ist, wird dort noch immer die alte Größe der Partition angezeigt. Um dies zu ändern, fehlt ein letzter Schritt: Zu guter Letzt wird resize2fs -p /dev/md2 genutzt, um das Dateisystem auf die neue Größe von /dev/md2 zu erweitern.

Zusammenfassung

Wenn df -h (erneut) ausgeführt wird, sollte ersichtlich sein, dass die Partition, die es zu vergrößern galt (/dev/md2 in meinem Fall), tatsächlich größer geworden ist. Mission abgeschlossen!

License: MIT
Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue

Discover our

Dedicated Servers

Configure your dream server. Top performance with an excellent connection at an unbeatable price!

Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more