Forum: PC-Programmierung [Linux] Änderungen im Dateisystem überwachen


von Sven (Gast)


Lesenswert?

Hallo zusammen,

ich suche eine Möglichkeit unter Linux (idealerweise mit C) Änderungen 
im Dateisystem festzustellen.
Die Standardantwort darauf lautet: inotify. Das ist zweifelsfrei ganz 
nett, skaliert jedoch nicht, da inotify nicht rekursiv arbeiten kann. 
Das hat zur Folge, dass man für jedes Verzeichnis eine extra Überwachung 
einrichten muss.  Das Limit hierfür liegt standardmäßig auf 8192 
Watches. Das Dateisystem, dass ich überwachen will, hat aber bereits 
jetzt schon ca 14000 Unterverzeichnisse. Tendenz steigend. Da ein neuer 
"watch" nicht unwesentlich Systemressourcen belegt möchte ich diese 
Standardeinstellung nicht groß anfassen. Irgendwann wird mir das nämlich 
auf die Füsse fallen.

Bei der Suche nach Alternativen bin ich bisher nicht fündig geworden. 
Die Lösungen, die ich bisher fand, setzten alle voraus, dass ich den 
Kernel patchen muss. Meine Begeisterung bei jedem Kernelupdate meinen 
Patch anzupassen ist nicht besonders hoch, zumal ich ungern am Kernel 
selbst Änderungen vornehmen möchte.

Kennt jemand von euch noch eine Möglichkeit, wie man das ganze angehen 
könnte?

Grüße

Sven

Der Hintergrund:
Das ganze soll in einem Backupszenario Anwendung finden. Alle 10 Minuten 
soll das Dateisystem gesichert werden. Gesichert wird dabei nur das 
Delta. Jedes mal das komplette Dateisystem nach Änderungen zu scannen 
ist mir dabei zu träge. Vielmehr möchte ich über einen daemon in 
Hintergrund alle Änderungen erfassen und in eine queue stecken um diese 
dann alle 10 Minuten abzuarbeiten um so den Server so wenig wie möglich 
zu belasten.

von Thorsten (Gast)


Lesenswert?

fatrace/fanotify sollte das Richtige in deiner Situation sein.

von Sven (Gast)


Lesenswert?

das geht schon mal in eine bessere Richtung.
Leider ist es mit fanotify, technisch bedingt, nicht möglich 
Dateiverschiebungen, Löschungen oder Umbenennungen zu erfassen. Dies ist 
für z.B. Virenscanner egal, für Backups jedoch nicht zu gebrauchen. Da 
fatrace auf fanotify aufbaut unterliegt es den gleichen Restriktionen.

Noch eine Idee?

von Sheeva P. (sheevaplug)


Lesenswert?

Sven schrieb:
> das geht schon mal in eine bessere Richtung.
> Leider ist es mit fanotify, technisch bedingt, nicht möglich
> Dateiverschiebungen, Löschungen oder Umbenennungen zu erfassen. Dies ist
> für z.B. Virenscanner egal, für Backups jedoch nicht zu gebrauchen. Da
> fatrace auf fanotify aufbaut unterliegt es den gleichen Restriktionen.
>
> Noch eine Idee?

Du kannst ein FUSE implementieren. Oder Du kannst gleich so etwas wie 
DRBD oder GlusterFS benutzen -- dann werden die Änderungen nicht erst 
nach zehn Minuten, sondern sofort auf einen (oder mehrere) Hosts 
repliziert.

von TuxDerFuchs (Gast)


Lesenswert?

Wie arbeitet denn rsync?

von Sven (Gast)


Lesenswert?

Sheeva P. schrieb:
> Du kannst ein FUSE implementieren.
wäre eine Möglichkeit. Das ganze gibt es quasi auch schon fertig: 
LoggedFS. Letztlich wird es mich wahrscheinlich Performance kosten, aber 
das könnte ich mal konkret testen.

> DRBD oder GlusterFS benutzen
schlecht, da es sich bei den Backupzielen nicht um von mir betriebene 
Server handelt. Die Backups werden einerseits via USB auf Festplatten 
und andererseits via FTP auf einen anderen Server geschoben.

TuxDerFuchs schrieb:
> Wie arbeitet denn rsync?
rsync scannt den kompletten Verzeichnissbaum, ggf. je nach Aufruf wird 
noch eine Prüfsumme für jede einzelne Datei berechnet.

von TuxDerFuchs (Gast)


Lesenswert?

Sven schrieb:
> rsync scannt den kompletten Verzeichnissbaum, ggf. je nach Aufruf wird
> noch eine Prüfsumme für jede einzelne Datei berechnet.

Ist das nicht das, was du möchtest?

von TuxDerFuchs (Gast)


Lesenswert?

Ach need schon gut. Gehe mal schlafen ?

von c.m. (Gast)


Lesenswert?

Sven schrieb:
> alle 10 Minuten abzuarbeiten um so den Server so wenig wie möglich
> zu belasten.

es ist wie immer: entweder kostet die sache speicher, oder cpu, oder es 
werden investitionen fällig … ;)
alle 10min zu sichern ist eigentlich wahnsinn, vor allem weil du (wieder 
"eigentlich") nur dateien sichern kannst die grade nicht in 
benutzung/halb geschrieben sind - du also dienste die auf das zu 
sichernde dateisystem zugreifen ausschalten müsstest, um die integrität 
der dateien sicher zu stellen.

aber ok. ich würde es mit rsync machen, auf ein anderes dateisystem, mit 
hardlinks. KISS eben.
wenn das alle 10min aufgerufen wird, unter der vorraussetzung das 
genügend speicher in der kiste ist um den dentry cache (aggressives 
caching konfigurieren!) gut halten zu können, geht das recht fix.
als andere möglichkeit böte sich noch ein loggendes dateisystem wie zum 
beispiel NILFS an, aber afaik is das immer noch nicht 
produktionsgeeignet.

nur mal so aus reiner admin-neugier: was sind denn die grotesken 
umstände, die ein 10-minütiges backup nötig erscheinen lassen? 
entwicklerdeppen? ^^

von LOL (Gast)


Lesenswert?

Mal abgesehen davon, das so etwas meiner Meinung nach die 
Standardanwendung für snapshots mit  btrfs bzw lvm + RAID ist (snapshot 
in Sekunden machen, Delta in Stunden berechnen und danach sichern):

Ich gehe mal davon aus, das diese 10Minuten Snapshots eher was für den 
Fall "uups, das wollte ich nicht löschen/überschreiben" sind.

Spricht da etwas gegen Hardlinks? Einfach den kompletten Dateibaum 
duplizieren, dauert auch nur Sekunden und funktioniert auf quasi jedem 
Linux-Dateisystem.

Und was die Delta-Sicherung angeht:
Je nach Anwendung reicht es, einfach nur nach den Zeitstempeln der 
Dateien zu gehen und die Dateien komplett zu sichern -> geht auch 
schnell. Oder halt das Delta nur von Dateien zu berechnen, wo die 
Zeitstempel neuer sind.

Da du das ja aller nn Minuten machst, kannst du einfach ein find nehmen, 
um die geänderten Dateien zu suchen. Das ist auch ziemlich schnell, je 
nach Dateisystem.
Es gibt natürlich auch Backup-Programme, die sowas intern können.

von LOL (Gast)


Lesenswert?

c.m. schrieb:
> aber ok. ich würde es mit rsync machen, auf ein anderes dateisystem, mit
> hardlinks. KISS eben.

Oh, wieder was über rsync gelernt. Ich sehe schon, ich nutz das zu 
wenig.

Darf ich das so verstehen, das rsync erstmal ne Kopie anlegt und dann 
für folgende backups immer wieder hardlinks zu dieser Kopie (es sei denn 
etwas ändert sich)? Dateisystemübergreifende hardlinks gibt es ja nicht.

von Harald A. (ngf_fo)


Lesenswert?

rsnapshot

von rsync (Gast)


Lesenswert?

LOL schrieb:
> Darf ich das so verstehen, das rsync erstmal ne Kopie anlegt und dann
> für folgende backups immer wieder hardlinks zu dieser Kopie (es sei denn
> etwas ändert sich)? Dateisystemübergreifende hardlinks gibt es ja nicht.

Ja, dank "copy on write" kann RSYNC so arbeiten. Ich mache das auch so 
und verwende ein Script, was lose auf diesem hier basiert:
https://wiki.ubuntuusers.de/Skripte/Backup_mit_RSYNC/

von c.m. (Gast)


Lesenswert?

LOL schrieb:
> Darf ich das so verstehen, das rsync erstmal ne Kopie anlegt und dann
> für folgende backups immer wieder hardlinks zu dieser Kopie


jau. das sieht dann etwa so aus:
1
du -hs /media/cm/BACKUP/*_backup/*
2
89G  /media/cm/BACKUP/cm_backup/2016_01_18-074127.done
3
93M  /media/cm/BACKUP/cm_backup/2016_01_18-090142.done
4
137G  /media/cm/BACKUP/cm_backup/2016_03_07-064049.done
5
71G  /media/cm/BACKUP/cm_backup/2016_03_11-094028.done
6
216M  /media/cm/BACKUP/cm_backup/2016_03_15-065646.done
7
38G  /media/cm/BACKUP/cm_backup/2016_03_18-063150.done
8
39G  /media/cm/BACKUP/cm_backup/2016_03_24-071326.done
9
42G  /media/cm/BACKUP/cm_backup/2016_04_04-093111.done
10
276M  /media/cm/BACKUP/cm_backup/2016_04_08-082605.done
11
57G  /media/cm/BACKUP/orin_backup/2016_01_13-083145.done
12
538M  /media/cm/BACKUP/orin_backup/2016_01_13-115019.done
13
104G  /media/cm/BACKUP/orin_backup/2016_03_07-075609.done
14
5,9G  /media/cm/BACKUP/orin_backup/2016_03_11-083900.done
15
1,1G  /media/cm/BACKUP/orin_backup/2016_03_18-064956.done
16
1,4G  /media/cm/BACKUP/orin_backup/2016_03_24-063329.done
17
975M  /media/cm/BACKUP/orin_backup/2016_04_04-095514.done
18
783M  /media/cm/BACKUP/orin_backup/2016_04_08-081012.done

das älteste backup beinhaltet die "orignaldateien", darauf folgende nur 
hardlinks und deltas.
auf rechner "cm" (cm_backup) sieht man das nicht so gut weil sich hier 
oft viele daten ändern, aber "orin" (orin_backup) zeigt das ganz 
anschaulich: ältestes backup groß, jüngere nur deltas/klein.

von Sven (Gast)


Lesenswert?

c.m. schrieb:
> alle 10min zu sichern ist eigentlich wahnsinn
Ich gebe zu. Etwas übertrieben. Aber bei den Anforderungen bin ich 
lieber erst einmal extrem. Abrücken davon werde ich noch früh genug.

> vor allem weil du (wieder
> "eigentlich") nur dateien sichern kannst die grade nicht in
> benutzung/halb geschrieben sind - du also dienste die auf das zu
> sichernde dateisystem zugreifen ausschalten müsstest, um die integrität
> der dateien sicher zu stellen.
Ja. Allerdings geht es nicht um eine vollständige Systemsicherung (die 
habe ich separat) sondern vielmehr um mehrere home-Verzeichnisse + ein 
globales Verzeichniss für alle User. Letzlich Anwendungsdaten. Diese 
lassen sich bezüglich der Integrität leichter sichern.

> aber ok. ich würde es mit rsync machen, auf ein anderes dateisystem, mit
> hardlinks. KISS eben.
das ist die derzeitig existierende Lösung.

> nur mal so aus reiner admin-neugier: was sind denn die grotesken
> umstände, die ein 10-minütiges backup nötig erscheinen lassen?
> entwicklerdeppen? ^^
Ja. Und ich bin einer davon :)
Und zugegeben. Nötig ist es nicht. siehe Rest meiner Antwort.

LOL schrieb:
> Mal abgesehen davon, das so etwas meiner Meinung nach die
> Standardanwendung für snapshots mit  btrfs bzw lvm + RAID ist (snapshot
> in Sekunden machen, Delta in Stunden berechnen und danach sichern):
Das wäre der Istzustand: 6 Platten, im Raid 6 über LVM. Cronjob, der 
täglich Snapshots anfertigt und davon ein inkrementelles Backup via 
rsync auf ne USB-Platte sichert. 2 Sicherungsplatten. Nummer 1 hängt 
immer dran, wird ca. alle 1-2 Monate gegen Nr. 2 gewechselt, die 
ausserhalb der Wohnung gelagert wurde. Ausgewählte Verzeichnisse werden 
nochmal über das Internet auf einen anderen Rechner via FTP geschoben. 
Erwähnte ich, dass ich leicht paranoid bin?

> Ich gehe mal davon aus, das diese 10Minuten Snapshots eher was für den
> Fall "uups, das wollte ich nicht löschen/überschreiben" sind.
wäre "nice to have"

> Spricht da etwas gegen Hardlinks? Einfach den kompletten Dateibaum
> duplizieren, dauert auch nur Sekunden und funktioniert auf quasi jedem
> Linux-Dateisystem.
wie gesagt. Das ist die aktuelle Lösung. Funktioniert, ist aber nicht 
wirklich perfomant. Das mag an meinem Server liegen. Außerdem wird es 
nachts gemacht. Von daher ist die Performance egal und bei einem 
täglichen Backup auch ok. Aber ich würde gerne wie erwähnt die 
Intervalle massiv verkürzen.

@all
Danke auf jeden Fall für die bisherigen Rückmeldungen. Ich sollte das 
ganze an dieser Stelle vielleicht etwas besser beschreiben:

Ich verfüge derzeit über ein Backupkonzept dass, realistisch betrachtet, 
wohl auch ausreichend, und für manche vielleicht auch schon etwas 
übertrieben ist. Die gesamte Zeit, die ich jetzt in Verbesserungen 
stecke werde ich im Ernstfall nicht wieder gut machen. Doch darum geht 
es mir nicht.

Manche Menschen haben eine Freude daran beispielsweise eine 
Modelleisenbahn aufzubauen. Das machen die nicht weil sie eine Karriere 
als Fahrdienstleiter planen, oder möglichst effektiv Spielzeugfiguren 
von A nach B befördern wollen. "Via destinatum est" Der Weg ist das 
Ziel. Ich will das nicht machen, weil es notwendig ist, sondern weil es 
mich interessiert das Optimum für meine Bedürfnisse zu erreichen.

Daher bin ich am Sammeln von Ideen wie ich ein möglichst effizientes 
Backup realisieren könnte. Und die erste Frage die sich da bei mir 
stellt ist:
"Wie ermittle ich möglichst effizient, welche Dateien ich wann sichern 
muss?"
Und mit effizient meine ich in diesem Fall technisch. Mir erscheint es 
sinnvoll nicht jedesmal alles gegenzuprüfen, sondern nur auf die 
Änderungen zu reagieren, also quasi einen Hook im Dateisystem zu haben, 
über den ich alle Änderungen mitbekomme.

von Thorsten (Gast)


Lesenswert?

Es gibt noch das Audit-Subsystem und das Tracing-Framework, das arbeitet 
aber eher auf der Syscall-Ebene.

von Simon S. (-schumi-)


Lesenswert?

Sollte nicht das hier genau das sein was du suchst? 
http://www.tummy.com/blogs/2010/11/01/fun-with-btrfs-what-files-have-changed/

Wobei ich mich frage ob du das überhaupt brauchst, denn das was du 
insgesamt umsetzen willst entspricht doch dem incremental snapshot 
transfer, oder? 
https://btrfs.wiki.kernel.org/index.php/Incremental_Backup

Noch ein paar Skripte drum rum, in den Cronjob damit und fertig ist die 
Laube - wenn ich dich richtig verstehe

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.