Linux Boot Partition vergrößern ohne LVM

August 8, 2022 - Lesezeit: 5 Minuten

Das die Boot Partition auf einem Linux Server vollläuft ist ein Problem das mir immer mal wieder über den Weg läuft. Man sollte meinen in Zeiten von LVM, Containern, Cloud etc. wäre das nicht mehr der Fall, aber bei Servern die schon sehr lange in Betrieb (aber trotzdem durch Upgrades aktuell sind, weil Linux das halt gut kann) sind kann es trotzdem immer wieder vorkommen. Auf jeden Fall bekommt man dann bei der Installation von Updates und neuen Kernel Images immer wieder Probleme. Meistens reicht es vorerst aus alte Kernel Images von der Boot Partition zu löschen (Achtung vorher mit uname -a immer prüfen welches Image der Server grad verwendet), aber auf Dauer ist das einfach lästig.

Also muss die Boot Partition vergrößert werden. Hat man ein LVM, kein Problem. Teilweise sind die LVM Installationen aber auch früher so gemacht worden, dass genau die Boot Partition nicht im LVM ist. Dann hat man mehr oder weniger ein Problem und bei den Szenarien ohne LVM auch. Jetzt kann man mit und ohne Live-System am Partitionslayout schrauben und sich irgendwie etwas zurechtfummeln. Das kann funktionieren, ist aber je nach Zeit und Kenntnisstand umständlich und auch fehleranfällig, dann kann man gleich den Server sauber neu aufsetzen. Will und kann man das nicht, ist aus meiner Erfahrung die einfachste Möglichkeit die Boot Partition auf eine neue Festplatte zu verschieben und dann zu vergrößern. Das hat bis jetzt immer funktioniert. Warum auf eine neue Platte? Weil keine bestehenden Partitionen auf der neuen Platte vorhanden sind und die Boot Partition dann nach hinten problemlos vergrößert werden kann.

Hinweis: Root/Sudo wird benötigt. Außerdem ist ein Backup natürlich dringend empfohlen, da Änderungen an den Festplatten immer ein Risiko mitbringen, dafür ist jeder selbst verantwortlich.

  1. Eine neue Festplatte einhängen falls eine Virtualisierung besteht oder einbauen, 1 GB reichen bereits, wer überzeugt ist das der Server auch in 10 Jahren noch so läuft macht auch einfach 2 GB und hat vermutlich seine Ruhe
  2. Damit die neue Festplatte erkannt wird muss der Server ggf. neugestartet werden oder folgendes Kommando ausgeführt werden, welches die verbundenen Devices neu einliest: echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan
  3. Prüfen mit z.B. lsblk ob die neue Festplatte nun erscheint und unter welcher Bezeichnung, in meinem Fall ist es /dev/sdb

WICHTIG Wenn es bei euch nicht /dev/sdb ist, im folgenden /dev/sdb immer entspechend ersetzen, sonst werden ggf. andere Partitionen oder Festplatten in eurem System verändert oder gelöscht.

  1. Mit fdisk /dev/sdb eine neue Partition erstellen (geht natürlich auch mit parted, falls man damit lieber arbeitet)
Befehl (m für Hilfe): n
Partitionstyp
   p   Primär (0 primär, 0 erweitert, 4 frei)
   e   Erweitert (Container für logische Partitionen)
Wählen (Vorgabe p): p
Partitionsnummer (1-4, Vorgabe 1): 1
Erster Sektor (2048-4194303, Vorgabe 2048):
Letzter Sektor, +Sektoren oder +Größe{K,M,G,T,P} (2048-4194303, Vorgabe 4194303): +1G
Eine neue Partition 1 des Typs „Linux“ und der Größe 1 GiB wurde erstellt.
Befehl (m für Hilfe): w
Die Partitionstabelle wurde verändert.
ioctl() wird aufgerufen, um die Partitionstabelle neu einzulesen.
Festplatten werden synchronisiert
  1. Zur Sicherheit dem Kernel die Änderungen an der Partitionstabelle nochmal mitteilen: partprobe
  2. Nun die Daten 1:1 von der alten Boot Partition auf die neue kopieren. Hier sollte NICHT mit cp gearbeitet werden sondern mit dd, welches bitgenau kopiert und somit auch das Dateisystem mitkopiert. dd arbeitet ohne Rückfragen, also den Befehl vorher gut checken: dd if=/dev/sda1 of=/dev/sdb1 bs=512 conv=noerror,sync
  3. Die neue Partition auf Fehler prüfen:
    e2fsck /dev/sdb1
    /dev/sdb1: sauber, 315/124496 Dateien, 157347/248832 Blöcke
  4. resize2fs /dev/sdb1 um die Partition auf die zuvor angelegten 1GB zu vergrößern
    resize2fs 1.44.1 (24-Mar-2018)
    Dateisystem bei /dev/sdb1 ist auf /boot eingehängt; Online-Größenänderung ist
    erforderlich
    old_desc_blocks = 1, new_desc_blocks = 4
    Das Dateisystem auf /dev/sdb1 is nun 1048576 (1k) Blöcke lang.
  5. /etc/fstab bearbeiten und die neue Boot Partition eintragen bzw. den alten Eintrag bearbeiten. Per blkid kann ggf. die UUID der neuen Boot Partition abgefragt werden und auch der Dateisystemtyp. Den bekommt man übrigens auch mit lsblk -f oder df -Th.
...
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=b214661e-58ef-4dc8-8d76-ea254ece99aa /boot           ext4    defaults        0       2
...
  1. System neustarten und danach mit df -h oder lsblk prüfen ob alles passt.