Linux root Partition im laufenden Betrieb vergrößern

Heute Morgen ist eine root-Partition auf einem Debian Server vollgelaufen. Da es unter Linux leider keine so komfortablen Werkzeuge zur Volumenverwaltung wie unter Windows gibt, hier die etwas umständliche, aber ebenso vollständige Anleitung in Schritten.

Die Platte in diesem Beispiel ist /dev/sda und die vergrößerte Version hat 80GiB.

/dev/sda
   +--- /dev/sda1  --> / (Linux boot)   bisher 30GiB
   +--- /dev/sda2  --> Swap             bisher 5iB

In diesem Fall gab s auf dem Boot-Volumen auch noch eine Swap-Partition, die in diesem Zuge kurzerhand auf ein zusätzliches Volumen verschoben wurde. Glücklicherweise ist beides im laufenden Betrieb möglich.

Lösung

Neue Disk-Größe einlesen

Nachdem die „Festplatte“ vergrößert wurde, erkennt Linux auch das nach einem rescan des SCSI-Busses. Je nach System mussm an das * durch das/die echte/n Gerät/e-Pfade ersetzen.

echo "- - -" > /sys/class/scsi_host/*/scan
echo 1 > /sys/class/scsi_device/*/device/rescan

Partitionen und Layout ansehen

Dann kann man sich das aktuelle Partitionslayout und die größere Disk mit fdisk ansehen.

root@raumstation:~# fdisk /dev/sda

Welcome to fdisk (util-linux 2.36.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x739a8a99

Device     Boot Start       End   Sectors Size Id Type
/dev/sda1  *     2048 167772126 167770079  80G 83 Linux

Command (m for help):q

root@raumstation:~#

Swap-Partition abschalten und entfernen

Die Linux-Swap Partiton schaltet man ab mit swapoff. Der Parameter -a entfernt alle Swap-Partitionen des Kernels. Wenn man aktuell mehrere nutzt, muss man natürlich nur die „falsche“ außer Betrieb nehmen.

root@raumstation:~# swapoff -a

Dann kann man die Partitionen bis zur Volumengrenze löschen.

root@raumstation:~# fdisk /dev/sda

<d> für "delete"
<2> Nummer für die Partitionsnummer (fdisk schlägt die höchste vor)
<w> für "Write"
<q> für "Auit"Quit"

Linux Boot Partition vergrößern

Die einfachste Möglichkeit ist das growpart Werkzeug. Das ist sehr klein und schnell installiert.

root@raumstation:~# apt-get install cloud-guest-utils

Dann gibt es den Befehl, der die Partition automatisch so groß wie möglich macht:

growpart /dev/sda 1

Linux Dateisystem vergrößern

Wenn die Partition vergrößert wurde, muss nun das Dateisystem darüber informiert werden. Das geht zum Glück ebenso schnell.

resize2fs /dev/sda1

Neues Swap-Volumen anlegen und einbinden

In diesem Fall haben wir ein zusätzliches Swap-Volumen angebunden (/dev/sde), mit einem rescan (siehe oben) im System sichtbar gemacht und darauf mit fdisk eine Partition angelegt.

Bei der Größe der Swap-Partition halten wir uns gerne an die steinalte Admin-Weisheit „Immer die Hälfte vom Arbeitsspeicher, mindestens aber 4 und nie mehr als 32g.“

Wenn das geschehen ist, erstellt man das Swap-System mit mkswap

mkswap /dev/sde1

… und schaltet das swapping wieder ein:

swapon /dev/sde1

Ältere HP-Switches (ProCurve) „Unable to negotiate with <DEVICE> port 22: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1“

Ältere HP Switches oder andere embedded-Systeme sprechen schon mal kein aktuelles SSH und aus Sicherheitsgründen lehnt der Default SSH-Client die Verbindung ab. Es gibt eine ganze Menge Key-Exchange-Methoden, die mittlerweile veraltet sind oder als unsicher gelten.

Der entscheidende Teil ist dabei der Letzte, der Angibt, welche Verfahren der Server anbietet:

Unable to negotiate with SWITCH.EXAMPLE.COM port 22: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1

Denn man muss seinem SSH-Client nur noch beibringen, dass dieser das für diese Verbindung akzeptieren soll.

Lösung

SSH versteht mit dem Parameter -o die „optionalen“ Verfahren für die Verbindung:

ssh -o KexAlgorithms=diffe-hellman-group14-sha1 [email protected]

Je nach Switch (=SSH-Server) einfach das passende Verfahren benennen, fertig.

Passiert das häufiger, also verbindet man sich öfter mit diesem Gerät, kann (sollte) man die passende Konfiguration in seine ~/.ssh/config eintragen:

Host SWITCH.EXAMPLE.COM
    Ciphers 3des-cbc
    KexAlgorithms +diffie-hellman-group14-sha1
    User administrator

Debian apt-get Fehler „Die folgenden Signaturen waren ungültig: EXPKEYSIG B188E2B695BD4743 DEB.SURY.ORG Automatic Signing Key“

Auch der Schlüssel von sury.org (oft genutztes PHP Repository) ist abgelaufen.

Die folgenden Signaturen waren ungültig: EXPKEYSIG B188E2B695BD4743 DEB.SURY.ORG Automatic Signing Key

Lösung

Das Debian-Paket-Repository sury.org hat seinen Paketsignaturschlüssel geändert. Um den Fehler zu beheben, holt man sich einfach den neuen Schlüssel mit:

apt-key adv --fetch-keys https://packages.sury.org/php/apt.gpg

Dann tut es auch sofort ein apt-get update wieder.

Debian apt-get Fehler „Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY B7B3B788A8D3785C“

Hat man das MySQL Repository zu seiner /etc/apt/sources.list hinzugefügt, tritt nach einer Weile bei einem apt-get update der Fehler auf:

Fehler:1 http://repo.mysql.com/apt/debian bullseye InRelease
  Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY B7B3B788A8D3785C

Lösung

Die fehlenden GPG-Keys müssen nur schnell hinzugefügt werden:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B7B3B788A8D3785C

Der strenge Syntax mit den Protokoll-Header („hkp://“) und dem Port (:80) ist dabei erst seit Bullseye (11) Pflicht.

Samba-Freigabe (SMB/CFIS) von Windows unter Ubuntu/Debian mounten

Samba ist das Standard-Tool für Unix-basierte Betriebssysteme um mit Windows-Freigaben via SMB oder CIFS zu interagieren. Es ermöglicht unter Linux die Datei- und Druckfreigabe von Windows-Computern aus zu nutzen. Grundsätzlich verwendet Samba das SMB/CIFS-Protokoll für einen ziemlich sicheren, stabilen und zuverlässigen Datei-/Druckerfreigabezugriff.

Gestandene Admins nutzen Samba natürlich auswendig. Für alle anderen ist diese Schritt-für-Schritt Anleitung gedacht.

Wir möchten einen Samba-Share (eine Windows-Freigabe) permanent unter Linux verbinden, so dass diese auch nach einem Neustart zur Verfügung steht.

Schritte zum Mounten von einer Freigabe unter Ubuntu und Debian

1. Das Debian-Paket cifs-utils auf dem System installieren:

sudo apt-get install cifs-utils

2. Erstellen des Ziel-Verzeichnis zum Mounten der Freigabe

sudo mkdir /media/freigabe

3. Credentials (Anmeldeinformationen) ablegen. Die Datei wird die unverschlüsselten Zugangsdaten enthalten und sollte daher aus Sicherheitsgründen mit einem Punkt (.) zu einer versteckten Datei gemacht werden. Es empfiehlt sich außerdem, diese im Home-Verzeichnis zu erstellen und mit entsprechend restriktiven Rechten zu versehen.

Datei anlegen …

vi /root/.smbcredentials

… mit diesem Inhalt:

username=benutzername
password=passwort

Zum Beispiel:

username=AD.EXAMPLE.COM\t.musterfrau
password=Schlup2s3i4mu867psie

Diese Datei dann speichern und idealerweise nur für root lesbar machen. Dadurch wird der Zugriff von allen Nicht-Root-Konten ausgeschlossen.

chown root:root /root/.smbcredentials
chmod 400 /root/.smbcredentials

4. Testen. Mit dem folgenden Befehl kann man die Windows-Freigabe jetzt auf dem Linux-System bereitstellen

sudo mount -t cifs -o rw,vers=3.0,credentials=/root/.smbcredentials //SERVER.AD.EXAMPLE.COM/freigabe /media/freigabe

Das jetzt manuell gemountete Dateisystem bleibt für dieses Sitzung erhalten. Nach einem Reboot ist /media/freigabe aber wieder leer.

5. Automount: Der Share kann nun zur /etc/fstab hinzugefügt werden. Dann wird die Remote-Freigabe beim Systemstart automatisch bereitgestellt.

sudo vi /etc/fstab

Am Ende der Datei diese Zeile hinzufügen:

//SERVER.AD.EXAMPLE.COM/freigabe /media/freigabe cifs vers=3.0,credentials=/root/.smbcredentials

Ausprobieren

Datei dann speichern und schließen. Die Verbindung lässt sich nun auch ohne echten reboot testen:

sudo umount /media/freigabe
sudo systemctl daemon-reload
sudo mount -a

Mögliche Fehler und Samba-Fehlersuche

Es gibt zahlreiche Dinge, die beim mounten schiefgehen könnten. Hilfreich ist bei der Fehlersuche immer die verbose Ausgabe von mount:

sudo mount -vvvv -t cifs -o rw,vers=3.0,credentials=/root/.smbcredentials //SERVER.AD.EXAMPLE.COM/freigabe /media/freigabe

Ich habe ein paar mal den Fehler „cifs_mount failed w/return code = -13“ gesucht. Der Fehler „-13“ bedeutet ausgeschrieben:

CIFS: Status code returned 0xc000006d STATUS_LOGON_FAILURE

Das steht schlicht für Name/Kennwort falsch. Mal stimmt die Domäne nicht, mal das Kennwort, mal der Name. Ein spezieller Stolperstein ist hier auch gerne die Begrenzung auf 20 Zeichen lange Benutzernamen – ist der Name länger, schlägt die Anmeldugn auf jeden Fall fehl.