Schlagwort-Archive: Linux

Linux: Volle Speicher analysieren und „verlorenen“ Platz wiederfinden

No space left on device

Wer diese Nachricht sieht hat meist etwas Arbeit vor sich. Aber was, wenn der Speicher eigentlich gar nicht so voll sein sollte? Nun, dann muss man auf die Jagd gehen.

Vorab: Ich werde mich hier auf Befehle für die Kommandozeile beschränken, da sich diese sowohl auf Desktop-Rechnern mit GUI als auch Servern nutzen lassen. Auch gehe ich von einem „einfachen“ Dateisystem ohne Kompression, Snapshots oder Subvolumes aus.

Fall 1: Es ist voll – Belegung analysieren.

Die einfachste Variante: Irgendwas belegt tatsächlich den Platz. Dies ist der Fall, wenn die Ausgabe von du -shx / bzw. du -shx /dein/ordner tatsächlich etwa dem „Used“-Wert aus df -h / bzw. df -h /dein/ordner entspricht.

Für diesen Fall gibt es viele Tools, welche bei der Analyse helfen können, z.B. ncdu, welches sich in fast allen Paket-Managern finden sollte. Mit ncdu -x / bzw. ncdu -x /dein/ordner ermittelt es die Dateigrößen und stellt diese in einer TUI dar. Über die Pfeiltasten kann man zwischen den Dateien und Ordnern wechseln, mit Enter kommt man in den Order bzw. bei .. wieder zurück und mit d kann man die Datei direkt löschen.

Fall 2: Es ist noch voll – Gelöschte Dateien

Wenn der Usage-Wert aus df größer als jener aus du ist, dann können gelöschte Dateien im Spiel sein. Zumindest, wenn diese noch geöffnet ist. Nehmen wir ein Beispiel: Wir haben eine 4GB ISO-Datei im Ordner, diese binden wir in eine VM ein. Etwas später stellen wir Fest, dass wir die Datei ja eigentlich nicht mehr brauchen und löschen sie aus dem Ordner. Nun sollte man erwarten, dass im Ordner wieder 4GB frei sind, oder? Sind sie nicht, denn wir haben die ISO ja noch in der VM eingebunden, daher hat Linux nur vorgemerkt, dass die Datei gelöscht werden soll, gibt den Speicher aber erst wieder frei, wenn diese nirgendwo mehr in Verwendung ist. Ähnliches kann auch beim Überschreiben auftreten, da Linux die vorherige Version verfügbar hält, so lange diese von einem Prozess genutzt wird.

Die einfachste Möglichkeit solche Situationen zu beheben ist der Holzhammer: Ein Reboot beendet alle Prozesse, entsprechend ist auch nichts mehr geöffnet und alles Markierte verschwindet tatsächlich. Wer etwas feinfühliger sein möchte kann schauen, welcher Prozess derzeit bereits gelöschte Dateien verwendet. Die volle Liste gibt es mit . Etwas übersichtlicher macht es der Befehl *lufthol*

lsof | grep deleted | awk '{if ($7 > sizes[$9]) {sizes[$9] = $7; cmd = "ps -o comm= -p " $2; cmd | getline name; close(cmd); names[$9] = name; pids[$9] = $2}} END {for (file in sizes) print sizes[file], names[file], pids[file], file}' | sort -nr | numfmt --to=iec

Dieser Zeigt jede gelöschte, aber noch geöffnete Datei 1×, die Größten finden sich ganz oben in der Ausgabe. Hier sind ggf. auch andere Speicherbereiche wie memfs oder /dev/shm/… mit aufgelistet, welche für die Dateisysteme nicht relevant sind.

Hier hat z.B. ein qemu-Prozess mit der PID 32387 einen für uns nicht relevanten memfd mit 32 Gigabyte. Ein systemd-Teil mit der PID 2448 hält wiederum 13MB durch die Datei /usr/lib/udev/hwdb.bin in Beschlag, welche zwischenzeitlich überschrieben wurden. Mit diesen Informationen kann man die zugehörige Software dann gezielt beenden bzw. neu starten um den Speicher wieder freizugeben.

Fall 3: Es ist doch voll – Mount in vollem Ordner

Ein etwas anderer Fall, bei dem sich df und du unterscheiden, kann auftreten, wenn man mit mehreren Partitionen oder Datenträgern arbeitet. Auch hier wieder ein Beispiel: Wir haben eine Festplatte mit installiertem Linux. Unter /mnt/iso/ speichern wir jetzt 5 verschiedene Linux-ISOs mit je ca. 2GB, belegen also 10GB. Nun merken wir, dass wir mehr Platz benötigen, bereiten eine zusätzliche Festplatte vor und hängen diese unter /mnt/iso/ ein. Nun sind die ursprünglichen Dateien ja noch unter /mnt/iso/ gespeichert, da dort aber ein anderes Dateisystem eingehangen ist, wird der Pfad bei du (oder auch ncdu) ignoriert. Ähnliches habe ich auch häufiger bei der Verwendung mäßig stabiler Software wie Docker entdeckt – dies „vergisst“ bei einigen Container-Neustarts einige mounts mitzunehmen und schreibt die Daten dann nicht auf die Datenpartition, sondern, für das Hostsystem erst mal unsichtbar, auf den Datenspeicher des Root-Dateisystems. Um dies zu analysieren verwende ich gerne einen bind-mount, diese nehmen keine anderen Dateisysteme mit und schaffen so eine Stelle, um mit ncdu das komplette Dateisystem zu erfassen.

mkdir /tmp/bind
mount -o bind / /tmp/bind
ncdu -x /tmp/bind
# Nachdem man fertig ist
umount /tmp/bind
rmdir /tmp/bind

Fall 4: Es ist voll kaputt – Dateisystemfehler

Natürlich kann es auch immer mal vorkommen, dass das Dateisystem tatsächlich einen Fehler hat und daher den freien Speicher falsch berechnet. Hier hilft dann oft (vorzugsweise von einem Live-System) die jeweiligen Scan- und Reparaturtools zu starten. Meist sollte ein fsck /dev/yourdevice das passende Programm auswählen.

Gitlab-CE: Passwortwechsel bei nächstem Login erzwingen

GitLab ist – wie der Name schon erahnen lässt – ein Git-basiertes Entwicklungsmanagement auf Ruby-Basis. Zusätzlich zur Versionsverwaltung gibt es auch Issue-Tracker, Wikis, CI/CD und Vieles mehr. Im Gegensatz zu GitHub lässt es sich auch lokal auf eigenen Systemen installieren, in der Community Edition dabei unter freier Lizenz. Als Alternative wäre noch Forgejo zu nennen, welches weniger kommerziell daher kommt.

Auf einer GitLab-Instanz hatte ich nun eine etwas andere Aufgabe: Ein verwendeter Zugang wurde als potentiell unsicher eingestuft. Nichts, was eine direkte Aktion notwendig machte, aber man sollte es auch nicht ignorieren. Normalerweise erzwinge ich in solchen Fällen einen Passwortwechsel beim nächsten Login. So wird der Nutzer zu geeigneter Zeit aktiv auf das Problem hingewiesen und es sind keine alternativen Kommunikationskanäle notwendig. Während GitLab prinzipiell einen erzwungenen Passwortwechsel unterstützt, gibt es offenbar keine Option dies über die üblichen Wege manuell auszulösen.

Der offizielle Weg

Die Offizielle Empfehlung ist recht klar: Als Admin unter Overview→User→Edit und dort ein neues Passwort festlegen. Dies ist temporär, der User muss es beim nächsten Login ändern. Hierbei wird auch sichergestellt, dass die aktuellen Kennwortrichtlinien eingehalten werden.

Für mich in diesem Fall kein sinnvoller Weg, da durch den Kennwort-Wechsel der Zugang umgehend nicht mehr möglich ist und ein separater, sicherer Kommunikationskanal notwendig ist um das neue, temporäre Kennwort zu übermitteln.

Eingeweide

Offiziell geht es also nicht, aber die Funktion selbst ist ja da. Über einige Tricks kann man dafür sorgen, dass der Passwortwechsel mit dem aktuellen Kennwort angefordert wird. Notwendig ist dazu ein Konsolenzugang zum Server, auf dem GitLab ausgeführt wird. Hier startet man eine Rails-Konsole (ggf. mit sudo), sucht den User und setzt das Ablaufdatum des Kennworts auf die aktuelle Zeit.

gitlab-rails console
user = User.find_by_username('bernd')
user.password_expires_at=Time.now
user.save
quit

Beim nächsten Login sollte nun der Passwortwechsel angefordert werden. Tipp: Es gibt auch ein verlockendes user.password_automatically_set. Dieses sorgt nicht für einen Passwortwechsel, sondern sperrt den interaktiven Login vollständig.

Eigentlich schade, dass so eine einfache und technisch vorhandene Möglichkeit nicht in den Dialogen angeboten wird. Auch wenn ich sicherheitstechnisch nachvollziehen kann, dass eine Sperrung und temporäres Passwort oft die bessere Wahl ist, sollte man den Admins nicht die Wahl vorenthalten Prozesse zu nutzen, welche den eigenen Anforderungen bessern entsprechen.

BitBastelei #637 – Freier IT-Fernsupport mit Rustdesk

BitBastelei #637 - Freier IT-Fernsupport mit Rustdesk

(305.9 MB) 00:41:08

2025-03-30 10:00 🛈

Wer sich auch nur etwas mit IT auskennt, dem dürfte das bekannt vorkommen: Freunde oder Familienmitglieder stehen bei jedem Hauch von PC-Problemen plötzlich auf der Matte. Dumm nur, wenn man selbst nicht vor Ort ist. Für genau solche Situationen gibt es Fernwartungssoftware. Heute schauen werfen wir einen Blick auf RustDesk, eine Open-Source-Alternative zu kommerziellen Diensten wie TeamViewer, AnyDesk & Co. Hiermit lässt sich schnell und einfach auf alle möglichen PCs von Linux, Windows und Mobilgeräten zuzugreifen. Entweder – analog zu den kommerziellen Dienstleistern – direkt über die Server des Projektes, oder – wenn man mehr Sicherheit möchte – auch komplett selbst verwaltet mit eigener Infrastruktur.

Inhalt

  • 00:00 Wozu Fernwartung?
  • 01:06 Andere Lösungen
  • 04:55 Übersicht Rustdesk
  • 07:12 Installation und Nutzung auf Debian 12
  • 13:11 Zusatzfunktionen
  • 18:15 Programmeinstellungen
  • 21:59 Nutzung unter Windows
  • 24:27 Mobilgeräte und das Scam-Thema
  • 29:23 Eigener Rustdesk-Server unter Debian 12
  • 36:55 Fazit und Bedenken

Links zum Thema

  • AnyDesk: https://anydesk.com/de
  • TeamViewer: https://www.teamviewer.com/de/
  • RealVNC: https://www.realvnc.com/de/
  • TigerVNC: https://tigervnc.org/
  • RustDesk: https://rustdesk.com/de/
  • Code-Rant 1: https://github.com/rustdesk/rustdesk/blob/cc860b290603fc913c3196999a1ffec407a2083d/src/platform/linux.rs#L323
  • Code-Rant 2: https://github.com/rustdesk/rustdesk/blob/cc860b290603fc913c3196999a1ffec407a2083d/src/platform/linux.rs#L631

Fehler und Ergänzungen:

  • 01:42 Es gibt teils externe Prüfungen des Codes. Als „normaler Anwender“ hat man aber keinen Zugriff.
  • 02:34 RealVNC selbst ist kein Open Source
  • 08:16 Der Kollege @zerobrain hatte zuletzt wohl einige Probleme mit Kubuntu. Ich konnte diese unter 24.10 nicht nachvollziehen
  • Danke an den Kollegen, der mich auf die interessante Code-Qualität aufmerksam gemacht hat

Transparenz

Die gezeigte Softwarevariante ist Open Source und kann kostenfrei genutzt werden. Von anderen erwähnten Lösungen rate ich wegen der nicht prüfbaren Codequalität eher ab.

adlerweb // BitBastelei 2025-03-15 22:01:13

Auch ist wieder beim "Tag des offenen Hackerspace" dabei - am 29.03. ab 15:00 sind die Türen geöffnet. Es gibt von über und bis viel zu entdecken.

haxko.space/veranstaltungen/ta

Eine Liste mit weiteren Spaces, die am mitmachen findet sich auf events.ccc.de/2025/02/28/tag-d

adlerweb // BitBastelei 2025-02-20 14:03:53

Scheint ein Bug im 6.13er Kernel zu sein. Tritt inzwischen auf mehreren Systemen mit Intel-PCH auf.

Oneliner um im Betrieb zu resetten:

usb_id=$(dmesg | grep "xHCI host controller not responding, assume dead" | tail -n 1 | awk '{print $3}' | sed 's/:$//'); echo -n "$usb_id" | tee /sys/bus/pci/drivers/xhci_hcd/unbind; sleep 5; echo -n "$usb_id" | tee /sys/bus/pci/drivers/xhci_hcd/bind

Ansonsten besser erst mal eine ältere Kernel-Version (LTS?) nutzen…

adlerweb // BitBastelei 2024-07-06 10:18:47

Ich mach viel Remote-Zeugs mit . ist da eigentlich cool, wenn auch bei komplexen Anwendungen sehr Bandbreitenintensiv. (remotedesktop.google.com/; LAN oder über Google-Server) oder kommerzielles wie (nomachine.com/ LAN/VPN/PortForwarding) klappt selbst für YouTube-anschauen & Co über WAN ganz gut. Audio war aber immer ein Krampf. Weder GRD noch NX schaffen es unter den Ton zuverlässig abzugreifen - warum auch (...)

BitBastelei #593 – Bluetooth LE (BLE) UART-Emulation mit ESP32-C3 und Arduino

BitBastelei #593 - Bluetooth LE (BLE) UART-Emulation mit ESP32-C3 und Arduino

(352.3 MB) 00:23:07

2024-05-26 10:00 🛈

Serielle Schnittstellen wie UART sind eine einfache und schnell zu nutzende Schnittstelle zwischen einem Mikrocontroller und einem PC oder Handy, oft per USB. Serial.println und schon erscheint der Text oder Messwert auf der Gegenseite. Was aber, wenn es drahtlos funktionieren soll? Das klassische Bluetooth bietet mit RFCOMM hier einen simplen Ersatz. Es gibt nur einen Haken: Neuere ESP32-Modelle wie der ESP32-C3 unterstützen nur die für wenig Energie optimierte Version „Bluetooth LE“, welche diesen Standard nicht unterstützt. Glück im Unglück: Mit ein paar Libraries und kleineren Einschränkungen kann man die Funktion nachbauen.

Inhalt

  • 00:00 Die Herausforderung
  • 03:45 UART/RFCOMM-Ersatz per BLE
  • 04:57 Arduino-Code
  • 11:36 BLE-Debugging unter Android
  • 14:18 Der Haken mit dem Puffer
  • 17:02 PC als Gegenstelle
  • 21:07 Fazit

Links zum Thema

Transparenz

Das Gerät wurde selbst gekauft und bezahlt.

BitBastelei #593 – Bluetooth LE (BLE) UART-Emulation mit ESP32-C3 und Arduino weiterlesen

adlerweb // BitBastelei 2024-05-18 22:48:28

TIL bei einer Reparatur @LUG_MYK

hat in der aktuellen Version den Installer so geändert, dass er immer eine -Partitionstabelle nutzt. Wenn das BIOS/EFI des Gerätes nur MBR kann, lässt sich Mint nach der Installation nicht mehr booten. Sehr Schade, dass man im Installer keine Option bietet die alte Methode zu nutzen. Sicher, man kann manuell partitionieren, aber das ist Laien nicht wirklich zuzumuten. Somit fällt Mint als einfache Option zur "Rettung" alter Systeme leider weg.

adlerweb // BitBastelei 2024-05-18 22:48:28

TIL bei einer Reparatur @LUG_MYK

hat in der aktuellen Version den Installer so geändert, dass er immer eine -Partitionstabelle nutzt. Wenn das BIOS/EFI des Gerätes nur MBR kann, lässt sich Mint nach der Installation nicht mehr booten. Sehr Schade, dass man im Installer keine Option bietet die alte Methode zu nutzen. Sicher, man kann manuell partitionieren, aber das ist Laien nicht wirklich zuzumuten. Somit fällt Mint als einfache Option zur "Rettung" alter Systeme leider weg.