[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Suche Tool: Aenderungen im Unterverzeichnis protokollieren


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 *koennte* man auch das), muss der jeweilige Bestand
festgehalten werden, also eine Art Katalog-Snapshot.

Durch Vergleich von 2 (oder mehr) Staenden sollen Aussagen getroffen 
werden koennen.  Mich interessieren primaer folgende Aussagen:

* Existenz:
  - Datei/Verzeichnis geloescht
  - Datei/Verzeichnis dazugekommen
  - Datei/Verzeichnis behalten

* Metadaten
  - Dateigroesse
  - Timestamp
  - ggf. Checksumme

Nicht notwendigerweise aber nice to have:

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

Ein "Aenderungsreport" soll in verschiedenen Detailsgraden auf diesen
Daten arbeiten koennen oder bestimmte Fragestellungen beantworten, etwa:

* Gibt es neue Dateien? (ja/nein)
  - welche?
* Wurden Dateien geloescht? (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 Aenderungsreport soll auf beliebige Staende anwendbar sein, also auch
dann sinnvolle Aussagen treffen, wenn man in der Zeit rueckwaerts
vergleicht oder Staende dazwischen ueberspringt.

Nice to have: Fuer 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
muessen. bdb, sqlite, etc waeren 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
  -> Aenderungen ueber defeinierte Zeitraeume ermitteln

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

* Backup ...
  -> Vorschau: Daten, die sich geaendert haben 
  -> voraussichtliches Backupvolumen (Summe aller Dateigroessen)
  -> Vergleich soll/ist (Volumen) 
  -> Wachsumsentwicklung basierend auf letzte 1/7/30/100 Tage
  -> Optimierung von Backup-Perioden, Zeitpunkten, Methoden
     -> fuer bestimmte Subtrees
  -> Undo-Funktion: Wiederherstellen eines alten Standes durch 
     selektives Restoren von Dateien aus dem Backup.
 
* Sicherheitskritische Aenderungen erkennen
  etwa: Snapshots bei Boot und Shutdown

  -> Wurden zwischen Shutdown und Boot Dateien veraendert? 
     (Hat jemand von CD gebootet und mir was untergeschoben?)
       (wobei man die Snapshots dann natuerlich entsprechend 
        auch gegen Manipulation sichern muesste)

* 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? ;-)

Gruss
Raphael

-- 
Raphael Becker          <rabe@xxxxxxxxx>          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/