Froschs Blog

Computer und was das Leben sonst noch so zu bieten hat

Zur Website | Impressum

Das Piwigo-Desaster

5. Januar 2023 um 19:54 Uhr von Atari-Frosch

Zum Betrieb meiner Media-Site verwende ich seit gut fünf Jahren Piwigo. Da liegen nun mittlerweile gut 35.600 Medien, ganz überwiegend natürlich Fotos, aber auch Scans von Tickets etc. und einige Videodateien. Von den Fotos sind fast 32.000 öffentlich zugänglich. So weit, so gut.

Schon im November war mir eher zufällig aufgefallen, daß sich die Videodateien dort nicht mehr abspielen ließen. Den Grund konnte ich erstmal nicht feststellen. Erst später bemerkte ich, daß die Fotos nur noch in der jeweiligen Alben-Übersicht und generell in den kleineren Formaten angezeigt wurden, aber nicht mehr in der Einzeldarstellung. Da stand nur noch der ursprüngliche Dateiname. Nach etwas Sucherei konnte ich die Änderung an einem Datum festmachen: Am 12. November früh morgens hatte ich bei Piwigo einige Updates eingespielt. Das waren zum einen zwei oder drei Plugins gewesen und zum anderen ein Versions-Update, und zwar von 13.2.0 auf 13.4.0 (die 13.3.0 hatte ich verpeilt gehabt).

Und in dieser Update-Routine gab es einen bösen Fehler, der dazu führte, daß das Upload-Verzeichnis einfach mal weg war. Und damit alle Dateien, die ich in den letzten fünf Jahren hochgeladen hatte. Natürlich mache ich von der Datenbank von Piwigo – wie von allen Datenbanken auf diesem Server – täglich ein Backup. Von den hochgeladenen Bildern habe ich das bislang nicht gemacht. Ja, das war wohl ein Fehler, den ich gerade zähneknirschend korrigiere. Unter anderem.

Zwar liegen im Piwigo-Pfad /_data/i/upload/ auch nochmal alle Bilder, aber das sind diverse kleinere Versionen – ja, genau die, die noch angezeigt werden. Die ursprünglich hochgeladenen Versionen liegen da allerdings nicht. Was da liegt, wurde nachträglich durch imagemagick erzeugt, und die größte dort liegende Version ist immer noch kleiner als die Dateien, die ich hochgeladen habe. Also muß der Inhalt des Upload-Verzeichnisses wieder hergestellt werden.

Nun habe ich diese Fotos natürlich auf meiner Festplatte, und natürlich habe ich davon auch noch ein Backup. Allerdings nicht in der für die Veröffentlichung herunterskalierten Version mit 1200 px auf der breiteren Seite. Und nicht alle Bilder, die ich hier liegen habe, sind schon fertig bearbeitet und damit Piwigo bekannt. Und natürlich speichert Piwigo die Dateien nicht mit dem ursprünglichen Dateinamen ab, das wäre auch zu einfach. Stattdessen erzeugt es für jeden Tag, an dem Bilder hochgeladen wurden, einen Unterverzeichnis-Baum nach Jahr, Monat und Tag, verpaßt den Bildern neue Dateinamen und packt sie dort rein. Nur die Datenbank weiß, wie die Datei ursprünglich hieß. Das Filesystem weiß das nicht.

Für die Wiederherstellung waren nun also mehrere Schritte notwendig:

  1. Herausfinden, wie die Dateien, wie Piwigo sie im Filesystem sucht, ursprünglich hießen bzw. in welcher Tabelle Piwigo diese Information speichert.
  2. Aus dieser Tabelle pwg_images die ursprünglichen Dateinamen sowie den Pfad im Server-Dateisystem herausziehen.
  3. Ein Script schreiben, das einen Abgleich durchführt zwischen den JPG-Dateien aus dieser Liste und der Dateiliste im entsprechenden Verzeichnisbaum auf meiner Festplatte, um herauszufinden, welche Dateien nochmal benötigt werden und wie sie dann heißen müssen. Das Script greift sich die Dateien dann einzeln heraus, skaliert sie herunter und speichert sie in einem separaten Verzeichnis wieder ab. Diese Zielverzeichnisse werden mit den Upload-Pfaden, die Piwigo auf dem Server angelegt hat, abgeglichen, damit am Ende wieder alle Dateien da stehen, wo Piwigo sie sucht.
  4. Die Namen aller Dateien, die nicht JPG sind oder warum auch immer nicht bearbeitet werden können, werden dabei erstmal nur in eine separate Datei namens leftover.lst geschrieben. Das betrifft vor allem Videodateien, aber auch ein paar PNG-Files.
  5. Etwas tricky sind EXIF-Daten. Die sollen nämlich erhalten bleiben. Das funktioniert, also grundsätzlich. Hakelig wird es, wenn eine Datei keine hat. Das so abzufragen, daß diese Dateien dann in der leftover.lst landen und eben nicht versucht wird, sie zu skalieren und wieder abzuspeichern, hat mich besonders viel Zeit gekostet.
  6. Alle lokal so erzeugten Dateien wieder auf den Server direkt ins Upload-Verzeichnis von Piwigo kopieren. Kopieren, damit hier auch gleich ein Backup stehen bleibt. Und wenn ich erneut Dateien hochlade, ziehe ich sie aus dem Upload-Verzeichnis dann wieder mit ihren neu vergebenen Namen auf meinen lokalen PC herunter – auch wenn ich davon ausgehe, daß das Entwickler-Team von Piwigo diesen bösen Fehler mittlerweile beseitigt hat.

Das Script (Link zum Git-Repo) hat gestern mehrere Testläufe auf einen Teil meiner Bilddateien absolviert. Dabei habe ich noch einiges an Details verbessert und natürlich Fehler korrigiert. Erfolgreich erstellte Zieldateien ließ ich bei diesen Testläufen stehen, um beim Gesamt-Durchlauf Zeit zu sparen. Diesen Gesamt-Durchlauf startete ich dann, bevor ich ins Bett ging. Später im ersten Zwischenwach konnte ich dann sehen, daß das Script für den Rest knapp 1,5 Stunden gebraucht hatte – und, noch wichtiger, komplett ohne Fehlermeldungen durchgelaufen war.

In einem weiteren Zwischenwach startete ich den Kopiervorgang für all diese Dateien – insgesamt etwa 4,5 GB – auf den Server. Wegen der Dateirechte im Zielverzeichnis erstmal in mein User-Home, von wo aus ich sie dann direkt auf dem Server als root ins Upload-Verzeichnis von Piwigo weiterschob und dort die Dateirechte anpaßte. Wie es auf den ersten Blick aussieht, funktioniert da jetzt wieder alles – zumindest bei der Mehrheit der Fotos, die da jetzt mitgekommen sind.

Bemerkenswert finde ich, daß in der leftover.lst auch JPGs gelandet sind, die keine EXIF-Daten haben, obwohl sie aus einer der digitalen Canon-Kameras stammen. Außerdem landeten so ziemlich alle Dateien in dieser Liste, die durch die Scanner erzeugt worden waren, also digitalisierte Analog-Aufnahmen. Das wird noch richtig Arbeit. Mit Glück fällt dabei nochmal ein Script raus, um auch diese Arbeiten zumindest teilweise zu automatisieren.

[Update 2023-01-06 18:05] Leider mußte ich feststellen, daß ein Teil der Fotos im Portrait-Format nicht gedreht sind. Sie werden im Piwigo also auf der Seite liegend angezeigt. ToDo: Diese Fotos erkennen und mit Hilfe von PIL drehen. Erst als separates Script, damit ich hier nicht nochmal alles durchnudeln muß, dann als Teil des eigentlichen Desaster-Fix-Scriptes. [/Update]


History

Kommentieren

Bitte beachte die Kommentarregeln!

XHTML: Du kannst diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>