Dateisystem-Typ direkt ermitteln statt aus der udev-Datenbank

Auf dem Testhost (Ceph RBD) meldete lsblk fuer jede Partition eines
eingebundenen Snapshots "kein Dateisystem" - auch fuer eine 31,5-GB-
Partition, auf der offensichtlich ext4 liegt. Nichts liess sich einhaengen.

Grund: lsblk nimmt FSTYPE aus der udev-Datenbank, und die ist bei frisch
gemappten rbd-Geraeten leer, weil udev dort keine blkid-Probe faehrt. Ein
direktes "blkid -p" auf denselben Geraeten liefert dagegen sauber vfat und
ext4. Der Typ wird jetzt so ermittelt, wenn lsblk nichts weiss.

Ausserdem: die Auswahl der Dateisysteme zeigte nur abgeschnittene
Mountpfade, die sich alle glichen, und vorausgewaehlt war das erste
gefundene - in der Praxis gern die 200-MB-EFI-Partition. Jetzt stehen dort
Geraet, Typ, Groesse und ein Hinweis ("Linux-Wurzelverzeichnis",
"Startpartition"), und die wahrscheinlichste Wurzel steht oben.

Auf pvetest01 gegen echte Snapshots geprueft: einbinden, alle drei
Dateisysteme mounten, Explorer, Web-Oberflaeche mit Download und ZIP,
Ausbruchversuch abgewiesen, restloses Aufraeumen auch nach hartem Abbruch.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
duffyduck
2026-07-31 09:44:56 +02:00
co-authored by Claude Opus 5
parent da08a81aab
commit 700492391a
3 changed files with 87 additions and 11 deletions
+6 -9
View File
@@ -649,9 +649,7 @@ class Explorer:
if not self.session or len(self.session.mounts) < 2:
message(win, "Es ist nur ein Dateisystem eingebunden.")
return
entries = []
for device, mountpoint in sorted(self.session.mounts.items()):
entries.append((mountpoint, "%s -> %s" % (device, mountpoint)))
entries = self.session.mount_entries()
chosen = choose(win, "Welches Dateisystem?", entries)
if chosen:
self.panes[0].root = chosen
@@ -857,16 +855,15 @@ def _main(stdscr, args):
try:
_show_notes(stdscr, session.notes)
mountpoints = sorted(set(session.mounts.values()))
if not mountpoints:
entries = session.mount_entries()
if not entries:
_show_notes(stdscr,
["Es wurde kein Dateisystem eingehaengt."] + session.notes,
"Nichts zu zeigen")
return 3
start = mountpoints[0]
if len(mountpoints) > 1:
entries = [(m, m) for m in mountpoints]
start = choose(stdscr, "Welches Dateisystem zuerst?", entries) or mountpoints[0]
start = entries[0][0]
if len(entries) > 1:
start = choose(stdscr, "Welches Dateisystem zuerst?", entries) or start
left = Pane(path=start, root=start, readonly=True,
title="%s @ %s" % (guest.label, name))