Suche Tool: Änderungen im Unterverzeichnis protokollieren

Autor: Raphael Becker <rabe_at_uugrn.org>
Datum: Sun, 19 Jul 2009 12:50:02 +0200
Hallo zusammen,

ich bin auf der Suche nach einem Tool, mit dem ich einen
Vorher-Nachher-Diff auf einem Verzeichnisbaum anwenden kann.

Da das ganze "in place" sein soll, d.h. also zum Zeitpunkt des
Vergleichs nicht beide Versionen parallel existieren (jaja, mit ZFS
Snapshots *könnte* man auch das), muss der jeweilige Bestand
festgehalten werden, also eine Art Katalog-Snapshot.

Durch Vergleich von 2 (oder mehr) Ständen sollen Aussagen getroffen 
werden können.  Mich interessieren primär folgende Aussagen:

* Existenz:
  - Datei/Verzeichnis gelöscht
  - Datei/Verzeichnis dazugekommen
  - Datei/Verzeichnis behalten

* Metadaten
  - Dateigröße
  - Timestamp
  - ggf. Checksumme

Nicht notwendigerweise aber nice to have:

* Änderungen Bestandsdateien
  - Bestands-Datei: Verschiebungen (Inodes)
  - Hardlinks
  - Owner, Permissions
  - Attribute, ACLs
  - Checksummen

Ein "Änderungsreport" soll in verschiedenen Detailsgraden auf diesen
Daten arbeiten können oder bestimmte Fragestellungen beantworten, etwa:

* Gibt es neue Dateien? (ja/nein)
  - welche?
* Wurden Dateien gelöscht? (ja/nein)
  - welche?
* Wurden Dateien umbenannt/verschoben (ja/nein)
  - welche? (etwa durch Auswertung von inodes oder checksummen)
* Wurden Dateien kopiert? (ja/nein)
  - welche? (Neue Dateien, die eine Checksumme einer Bestandsdatei haben)
* Wurden Dateien modifiziert?
  - Vergleich von Checksummen auf Basis von Inode/Dateinamen
* Timestamps


Der Änderungsreport soll auf beliebige Stände anwendbar sein, also auch
dann sinnvolle Aussagen treffen, wenn man in der Zeit rückwärts
vergleicht oder Stände dazwischen überspringt.

Nice to have: Für einen Dateiname oder Inode eine Historie basierend auf
vielen "Snapshots" erstellen.

Mir ist klar, dass das Einsammeln dieser Daten auf Vorrat verschieden
"teuer" sein wird, d.h. etwa beim Protokollieren von Checksummen.

Die Aufzeichnung sollte in Dateien erfolgen, wobei ich nicht
notwendigerweise Wert darauf lege, dass es flache ASCII-Dateien sein
müssen. bdb, sqlite, etc wären auch ok.


Das Ausgabeformat der "Reports" sollte in irgendeiner Form tabellarisch
sein, da ich diese Ergebnisse nicht einfach nur darstellen, sondern 
weiter verarbeiten will. 

Beispiele:

* /usr/{src,ports} tracken
  -> Neuigkeiten vor/nach cvsup ermitteln
  -> Änderungen über defeinierte Zeiträume ermitteln

* Bei Installation von Software (Ports, Packages):
  -> Welche Dateien sind aus dem Package rausgefallen?
  -> Wurden Dateien geändert?
  -> funktioniert "make clean"?

* Backup ...
  -> Vorschau: Daten, die sich geändert haben 
  -> voraussichtliches Backupvolumen (Summe aller Dateigrößen)
  -> Vergleich soll/ist (Volumen) 
  -> Wachsumsentwicklung basierend auf letzte 1/7/30/100 Tage
  -> Optimierung von Backup-Perioden, Zeitpunkten, Methoden
     -> für bestimmte Subtrees
  -> Undo-Funktion: Wiederherstellen eines alten Standes durch 
     selektives Restoren von Dateien aus dem Backup.
 
* Sicherheitskritische Änderungen erkennen
  etwa: Snapshots bei Boot und Shutdown

  -> Wurden zwischen Shutdown und Boot Dateien verändert? 
     (Hat jemand von CD gebootet und mir was untergeschoben?)
       (wobei man die Snapshots dann natuerlich entsprechend 
        auch gegen Manipulation sichern müsste)

* Was tut $BLACKBOX auf der Platte?

* locate einer Datei zu verschiedenen Zeitpunkten
  -> in welchem Backup finde ich die letzte Version vor dem 1.4.?

Im Prinzip eine Art aufgebohrtes locate.updatedb(8) / locate(1). 


Anwendung:
1) Snapshot --> [DBnn] (wie locate.updatedb(8), als cronjob)

2) Report  <-- [DBnn]       (wie locate(1)) 
3) Report1 <-- [DBnn][DBmm] 
4) Report2 <-- [DBnn][DBmm] 
5) Report3 <-- [DBxx][DBxy][DBxz][...][DBzz] (Dateigeschichte ... )

Kennt jemand was in dieser Richtung? Wenn es sowas noch nicht gibt,
wieso nicht? ;-)

Gruß
Raphael

-- 
Raphael Becker          <rabe@uugrn.org>          http://rabe.uugrn.org/
                                   https://blogs.uugrn.org/freebsdtipps/
GnuPG:                E7B2 1D66 3AF2 EDC7 9828  6D7A 9CDA 3E7B 10CA 9F2D
.........|.........|.........|.........|.........|.........|.........|..


--
http://mailman.uugrn.org/mailman/listinfo/uugrn
Wiki: http://wiki.uugrn.org/wiki/UUGRN:Mailingliste
Archiv: http://lists.uugrn.org/

Empfangen am 19.07.2009

Dieses Archiv wurde generiert von hypermail 2.2.0 : 19.07.2009 CEST