Ausschalten ohne Herunterfahren
Hallo,
also tripwire hat mit Deinem ursprünglich gepostetem Thema nichts zu tun.
Und das Du in diesem Zusammenhang darauf gestoßen bist, kann ich mir auch
nicht so richtig vorstellen. Mehr dazu vielleicht hier:
http://web.mit.edu/rhel-doc/4/RH-DOCS/r ... -host.html
oder auch:
http://www.rrzn.uni-hannover.de/sicherheit.html
oder auch:
http://www.luug-hn.org/artikel/tripwire/tripwire.html
Gruß
Matthias
also tripwire hat mit Deinem ursprünglich gepostetem Thema nichts zu tun.
Und das Du in diesem Zusammenhang darauf gestoßen bist, kann ich mir auch
nicht so richtig vorstellen. Mehr dazu vielleicht hier:
http://web.mit.edu/rhel-doc/4/RH-DOCS/r ... -host.html
oder auch:
http://www.rrzn.uni-hannover.de/sicherheit.html
oder auch:
http://www.luug-hn.org/artikel/tripwire/tripwire.html
Gruß
Matthias
Ganz im Gegenteil. Ich finde diese Diskussion eigentlich ganz interessant.ThoWaBu hat geschrieben:Ich glaube der Thread bringt nichts...
Natürlich sollte man ein Linux-System runterfahren, aber wenn man doch mal "den Stecker ziehen" muss weil das System hängt ist es gut zu wissen an welchen Stellen man nach den Ursachen für die evtl. auftretenden Probleme suchen muss.
Wollte ich mein system gegen ein "hartes Ausschalten" sichern wollen, so würde ich neben dem "readonly" mounten von "/usr" und co. eine Quersummen liste aller wichtigen Dateien anlegen und aktuell halten. ungefähr so:
Am Ende der einer Festplatte eine kleine Partition anlegen (50Mb oder so) und mit ext3 formatieren.
Dann würde ich ein Script schreiben, das
beim Herunterfahren:
1. Die Partition mountet
2. Den Ordnerbaum des Systems auf die Partition schreibt.
3. Die md5summen aller Dateien in den Baum schreibt sowie die Atime und Mtime der Summen auf die der Originalen setzt
4. die Partition unmountet.
und eim start:
1. Die Partition mountet
2. Die md5 summen auf der Partition mit denen der gerade erzeugten vergleicht und bei Differenz den Dateinamen ausgibt || in eine Datei schreibt
3. die Partition unmontet.
Die Analyse kann noch verrfeinert werden indem man die Atime und Mtime berücksichtigt. Ist die Datei neuer als seine md5summe so ist es wahrscheinlich, daß sie nicht defekt ist sondern absichtlich modifiziert wurde. Wenn man unwichtige Dateien wie logs, temp, und Pidfiles auschleißt kann man das Script noch beschleunigen.
Ein weitere Möglichkeit wäre die Partition direckt zu lesen und blockweise Quersummen zu bilden und die zu speichern. Dann könne mit hilfe der Quersummen, eine persistente Version der Partition wieder hergestellt werden (aber das kommt schon einem Raid5 nahe).
Am Ende der einer Festplatte eine kleine Partition anlegen (50Mb oder so) und mit ext3 formatieren.
Dann würde ich ein Script schreiben, das
beim Herunterfahren:
1. Die Partition mountet
2. Den Ordnerbaum des Systems auf die Partition schreibt.
3. Die md5summen aller Dateien in den Baum schreibt sowie die Atime und Mtime der Summen auf die der Originalen setzt
4. die Partition unmountet.
und eim start:
1. Die Partition mountet
2. Die md5 summen auf der Partition mit denen der gerade erzeugten vergleicht und bei Differenz den Dateinamen ausgibt || in eine Datei schreibt
3. die Partition unmontet.
Die Analyse kann noch verrfeinert werden indem man die Atime und Mtime berücksichtigt. Ist die Datei neuer als seine md5summe so ist es wahrscheinlich, daß sie nicht defekt ist sondern absichtlich modifiziert wurde. Wenn man unwichtige Dateien wie logs, temp, und Pidfiles auschleißt kann man das Script noch beschleunigen.
Ein weitere Möglichkeit wäre die Partition direckt zu lesen und blockweise Quersummen zu bilden und die zu speichern. Dann könne mit hilfe der Quersummen, eine persistente Version der Partition wieder hergestellt werden (aber das kommt schon einem Raid5 nahe).
Folgendes ist passiert:
Ich bin über ssh mit einem Rechner verbunden. Ich komme ausversehen ans Netzwerkkabel und es flutscht raus. Ich stecke es wieder rein und auf einmal steht der Rechner. So jetzt haben wir den Salat wieder. Ich kann auf keien Konsole wechseln und jeder ping oder login versuch von außen scheitert. Also Kiste einfach ausgeschaltet.
Was mache ich jetzt? Nach diesem Thread hab ich immer mehr das gefühl, das Linux damit überhaupt nicht umgehen kann. Es funktioniert alles einwandfrei, aber warum sagen dann so viele, dass so viel kaputt gehen kann?
Soll ich jetzt neu installieren? Das müsste ich ja dann jeden Monate machen, weil debian testing bleibt mir schon oft stehen...
Das mit dem m5sum check habe ich noch lange nicht fertig, bin noch relativer neuling...
Hängt sich bei euch die Kiste nie auf?
Ich bin über ssh mit einem Rechner verbunden. Ich komme ausversehen ans Netzwerkkabel und es flutscht raus. Ich stecke es wieder rein und auf einmal steht der Rechner. So jetzt haben wir den Salat wieder. Ich kann auf keien Konsole wechseln und jeder ping oder login versuch von außen scheitert. Also Kiste einfach ausgeschaltet.
Was mache ich jetzt? Nach diesem Thread hab ich immer mehr das gefühl, das Linux damit überhaupt nicht umgehen kann. Es funktioniert alles einwandfrei, aber warum sagen dann so viele, dass so viel kaputt gehen kann?
Soll ich jetzt neu installieren? Das müsste ich ja dann jeden Monate machen, weil debian testing bleibt mir schon oft stehen...
Das mit dem m5sum check habe ich noch lange nicht fertig, bin noch relativer neuling...
Hängt sich bei euch die Kiste nie auf?
Alle Fehler können auftreten müssen aber nicht.
Sowas geht in 70% aller Fälle gut und hat keine Folgen. In 20% gehen nur unwichtige Daten verloren. Die restlichen 10% sind die um die man sich sorgen muß. Wenn der Rechner hochfährt und funktioniert ist vorerst alles gut. Behalte nur im Hinterkopf, daß er dir mal abgestürzt ist und wenn dann mal etwas seltsames passiert schau auch nach ob es mit dem Absturz zu tun hat.
Ich habe hier einen Rechner, der hängt sich einmal in der Woche auf (defekter Speicher), aber bisher ist nichts kaput gegangen (nungut postgesql mosert dann immer wegen des falschen pidfiles).
Jedoch wurde mal wegen eines Stromausfalles einer meiner Rechner "hart" ausgeschaltet, danch war das Dateisystem völlig in den binsen.
Aber wie schon gesagt es kann was passieren, muß aber nicht.
Sowas geht in 70% aller Fälle gut und hat keine Folgen. In 20% gehen nur unwichtige Daten verloren. Die restlichen 10% sind die um die man sich sorgen muß. Wenn der Rechner hochfährt und funktioniert ist vorerst alles gut. Behalte nur im Hinterkopf, daß er dir mal abgestürzt ist und wenn dann mal etwas seltsames passiert schau auch nach ob es mit dem Absturz zu tun hat.
Ich habe hier einen Rechner, der hängt sich einmal in der Woche auf (defekter Speicher), aber bisher ist nichts kaput gegangen (nungut postgesql mosert dann immer wegen des falschen pidfiles).
Jedoch wurde mal wegen eines Stromausfalles einer meiner Rechner "hart" ausgeschaltet, danch war das Dateisystem völlig in den binsen.
Aber wie schon gesagt es kann was passieren, muß aber nicht.
Ok, könnt ihr mir helfen so ein Script zu schreiben?
Wie lasse ich die md5summe von so vielen Dateien berechnen?
Wie Vergleiche ich das dann?
Bis jetzt siehts so aus
:
Welche Programme können den Ordnerbaum des System speichern?ToPeG hat geschrieben: 1. Die Partition mountet
2. Den Ordnerbaum des Systems auf die Partition schreibt.
3. Die md5summen aller Dateien in den Baum schreibt sowie die Atime und Mtime der Summen auf die der Originalen setzt
4. die Partition unmountet.
und eim start:
1. Die Partition mountet
2. Die md5 summen auf der Partition mit denen der gerade erzeugten vergleicht und bei Differenz den Dateinamen ausgibt || in eine Datei schreibt
3. die Partition unmontet.
Die Analyse kann noch verrfeinert werden indem man die Atime und Mtime berücksichtigt. Ist die Datei neuer als seine md5summe so ist es wahrscheinlich, daß sie nicht defekt ist sondern absichtlich modifiziert wurde. Wenn man unwichtige Dateien wie logs, temp, und Pidfiles auschleißt kann man das Script noch beschleunigen.
Wie lasse ich die md5summe von so vielen Dateien berechnen?
Wie Vergleiche ich das dann?
Bis jetzt siehts so aus

Code: Alles auswählen
#!bash
mkdir /mnt/hda9
mount /dev/hda9 /mnt/hda9
umount /dev/hda9
rm -r /mnt/hda9
Ich habe mal ein kleines Script geschrieben, das meinen Anforderungen entspreicht 
http://nopaste.debianforum.de/3511
Und dazu noch eine Konfigurationsdatei
http://nopaste.debianforum.de/3512
Das Script läuft lange bei großen und vielen Dateien.
Das Script auf das gesammte Dateisystem los zu lassen würde ich für eine weniger gute Idee halten.

http://nopaste.debianforum.de/3511
Und dazu noch eine Konfigurationsdatei
http://nopaste.debianforum.de/3512
Das Script läuft lange bei großen und vielen Dateien.
Das Script auf das gesammte Dateisystem los zu lassen würde ich für eine weniger gute Idee halten.

- KBDCALLS
- Moderator
- Beiträge: 22456
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Du kannst es Datei runterladen.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
Dann will ich ein wenig zum script schreiben um es dir leichter zu machen damit um zu gehen.
Ganz vorweg. Das cript ist in Perl geschrieben die Programiersprache aller Admins (neben bash, phyton, ruby, PHP, ...
)
Um das Script ausführbar zu machen speicherst du es irgendwo (mit einem leicht zu merkenden namen wie "dateipruefung"). Am besten legst du unter "/root" einen Odner "/root/bin" und speicherst es dort. Danach änderst du die DateiEigenschaften so, daß es für alle ausführbar wird. (oder nur für root, wenn du es sicherer haben willst) Das kannst du über die Konsole mit dem Befehl erreichen.
Das Script unterteilt sich in vier Abschnitte:
0. Die zu ladenden Module und etwas MagicLine
1. Die Konfiguration
2. Die Funktionen
3. Das Programm
zu 0.
Das hat dich erstmal nicht zu interessieren. Darauf komme ich noch zurück.
zu 1.
Hier hast du alle möglichen konfigurationsparametter vor Augen. Du kannst deine Einträge hier machen aber es gibt weitere Eingabemöglichkeiten.
Die zweite Möglichkeit der konfiguation ist über eine Konfigurationsdatei. Der Pfad und ihr Name wird in die Anfürungszeichen an der Stelle geschrieben. Die zweite Datei von mir ist ein Beispiel wie sie ausehen kann.
Die dritte Möglichkeit ist über die Kommandozeile. Zur genauen Konfiguartion komme ich noch.
zu 2.
Hier findest du eine mehr oder wehiger sortierte liste der funktionen die das Programnm Benutzt um seine Aufgaben zu erfüllen.
Die zentralen Funktionen sind hier "test_recursiv" und "create_recursiv".
Die erste überprüft, sich selbst aufrufend alle registierten Dateien ob sie sich verändert haben. Die zweite erstellt die zur Überprüfung nötigen Datensätze.
Dann haben wir da noch "read_data" Diese funktion ließt einen datensatz der als Referenz abgespeichert wurde und gibt den Inhalt zurück. "write_data" schreibt einen solchen Datensatz.
"make_md5_sum" ließt eine Datei und erzeugt aus den gelesenen Daten eine md5summe (in Abschnitt 0. steht "use Digest::MD5 qw(md5_base64)" damit importeiren ich ein PerlModul, das md5summen erzeugen kann und mache die Funktion "md5_base64" für mich verfügbar)
"read_dir" dient dazu ein Verzeichnis zu lesen und die datein enthaltenen Datei- und Ordnernamen zurück zu geben.
"create_dir" erzeugt einen Ordner oder eine Ordnerhirarchie. Wenn z.B der Ordner "DEF" in "/A/B/C" erzeugt werden soll, aber nur "/A" existiert so erzeugt die Funktion auch "B" und "C" und legt den ordner "DEF" darin.
"fehler" Dient zur ausgabe von Fehlermeldungen. Ich ahbe noch nichst besonderes gemacht und so wird nur der Programmname und die übergebne Meldung auf dem StandardFehlermelungsKanal (Konsole) ausgeben.
"msg" Macht auch nur eine ausgabe auf der Konsole dient aber zur Ausgabe von normalen Nachrichten.
"hilfe" Wird diese Funktion aufreufen so gibt sie informationen über die Optionen die von der Konsole aus erreichbar sind.
"load_conf" ließt eine Konfiguration aus einer Datei.
"read_conf" ließt die von der Konsole übergebenen Optionen.
Und nun
zu 3.
Das Programm selber.
Als erstes versuche es das Programm eine voreingestellte Configurationsdatei zu laden. (siehe in 1. "confdat") Dann werden die Kommadozeilenoptionen ausgelesen.
danach sortieret das Programm die Liste der Ordner und Dateien, die ignoriert werden sollen und lösche alle doppelten. Danch versucht es ein externes Kommando aus zu führen und wenn das erfolgreich war, wird entweder Die Daten zu der zu überwachenden dateien gesammelt oder die Dateien überprüft. Danch wird wieder externes Kommando aus geführt.
Und nun zu den möglichen Einstellungen am Programm:
-Eine extrene Konfiguartionsdatei Laden:
Programm intern (P): confdat => "</pfad(dateiname>"
Konfiguartiondateioption (K): nicht verfügbar (ist auch nicht sinnvoll denke ich)
Kommandozeilenoption (O): -f <pfad/dateiname>
-Ordner (mitsammt seinen Subordnern) dessen Dateien überwacht werden sollen.
P: start => "</pfad>"
K: start = </pfad>
K: start = "</pfad>"
K: start = '</pfad>'
K: start[STR] = </pfad>
K: start[STR] = "</pfad>"
K: start[STR] = '</pfad>'
O: -s </pfad>
-Ordner in dem die Datensätze gespeichrt werden sollen
P: ziel => </pfad>
K: ziel = </pfad>
K: ziel[STR] = </pfad>
(rest sieh oben)
O: -z </pfad>
-Kommando, das vor dem Programm ausgeführt werden soll.
P: vor => "<Kommado>"
K: vor = <Kommado>
K: vor[STR] = <Kommado>
O: -p <Kommado>
-Kommando, das nach dem Programm ausgeführt werden soll.
P: nach => "<Kommado>"
K: nach = <Kommado>
K: nach[STR] = <Kommado>
O: -a <Kommado>
-Was das programm nun machen soll. Entweder die Datenbank erstellen oder die Dateien überprüfen.
P: aktion => "create" (zum erstellen der Datenbank)
P: aktion => "check" (zum überprüfen der Dateien)
K: aktion = create (zum erstellen der Datenbank)
K: aktion[STR] = create (zum erstellen der Datenbank)
K: aktion = check (zum überprüfen der Dateien)
K: aktion[STR] = check (zum überprüfen der Dateien)
O: -c (zum erstellen der Datenbank)
O: -t (zum überprüfen der Dateien)
-Eine Liste der auszuschließenden Dateien/Ordner
P: exclude => ["</pfad1>", "</pfad2>", "</pfad3>" ...]
K: exclude[ARR]=</pfad1>, </pfad2>, </pfad3> ...
K: exclude[ARR]="</pfad1>", "</pfad2>", "</pfad3>" ...
K: exclude[ARR]='</pfad1>', '</pfad2>', '</pfad3>' ...
O: -e </pfad1> (kann mehrfach Aufgerufen werden, jeder Aufruf hängt den angebenen an die Liste)
-Welche Daten von den Dateinen sollen gepeichert werden?
P: mode => "md5" (nur md5summen werden gespeichert)
P: mode => "stat" (nur die Dateieigenschaften werden gespeichert)
P: mode => "both" (md5summen und die Eigenschaften werden gespeichert)
K: mode = md5 (nur md5summen werden gespeichert)
K: mode[STR] = md5 (nur md5summen werden gespeichert)
K: mode = stat (nur die Dateieigenschaften werden gespeichert)
K: mode[STR] = stat (nur die Dateieigenschaften werden gespeichert)
K: mode = both (md5summen und die Eigenschaften werden gespeichert)
K: mode[STR] = both (md5summen und die Eigenschaften werden gespeichert)
O: -m md5 (nur md5summen werden gespeichert)
O: -m stat (nur die Dateieigenschaften werden gespeichert)
O: -m both (md5summen und die Eigenschaften werden gespeichert)
Das ist jetzt etwas lang geworden, aber ich hoffe es hilft dir weiter. Wenn du noch irgendwo genauere Erklärungen brauchst Frage einfach.
p.s.:
Ganz wichtig ist, das alle Pfadangaben absolut sind allso mit "/" beginnen und Ordner kein abschlißtendes "/" haben, andernfalls kann das Script ganz ordntlich ins Schleudern kommen und eventuell auch Schaden anrichten, indem es Dateien überschreibt.
Ganz vorweg. Das cript ist in Perl geschrieben die Programiersprache aller Admins (neben bash, phyton, ruby, PHP, ...

Um das Script ausführbar zu machen speicherst du es irgendwo (mit einem leicht zu merkenden namen wie "dateipruefung"). Am besten legst du unter "/root" einen Odner "/root/bin" und speicherst es dort. Danach änderst du die DateiEigenschaften so, daß es für alle ausführbar wird. (oder nur für root, wenn du es sicherer haben willst) Das kannst du über die Konsole mit dem Befehl
Code: Alles auswählen
chmod 0755 <dateiname>
Das Script unterteilt sich in vier Abschnitte:
0. Die zu ladenden Module und etwas MagicLine

1. Die Konfiguration
2. Die Funktionen
3. Das Programm
zu 0.
Das hat dich erstmal nicht zu interessieren. Darauf komme ich noch zurück.
zu 1.
Hier hast du alle möglichen konfigurationsparametter vor Augen. Du kannst deine Einträge hier machen aber es gibt weitere Eingabemöglichkeiten.
Die zweite Möglichkeit der konfiguation ist über eine Konfigurationsdatei. Der Pfad und ihr Name wird in die Anfürungszeichen an der Stelle
Code: Alles auswählen
confdat =>
Die dritte Möglichkeit ist über die Kommandozeile. Zur genauen Konfiguartion komme ich noch.
zu 2.
Hier findest du eine mehr oder wehiger sortierte liste der funktionen die das Programnm Benutzt um seine Aufgaben zu erfüllen.
Die zentralen Funktionen sind hier "test_recursiv" und "create_recursiv".
Die erste überprüft, sich selbst aufrufend alle registierten Dateien ob sie sich verändert haben. Die zweite erstellt die zur Überprüfung nötigen Datensätze.
Dann haben wir da noch "read_data" Diese funktion ließt einen datensatz der als Referenz abgespeichert wurde und gibt den Inhalt zurück. "write_data" schreibt einen solchen Datensatz.
"make_md5_sum" ließt eine Datei und erzeugt aus den gelesenen Daten eine md5summe (in Abschnitt 0. steht "use Digest::MD5 qw(md5_base64)" damit importeiren ich ein PerlModul, das md5summen erzeugen kann und mache die Funktion "md5_base64" für mich verfügbar)
"read_dir" dient dazu ein Verzeichnis zu lesen und die datein enthaltenen Datei- und Ordnernamen zurück zu geben.
"create_dir" erzeugt einen Ordner oder eine Ordnerhirarchie. Wenn z.B der Ordner "DEF" in "/A/B/C" erzeugt werden soll, aber nur "/A" existiert so erzeugt die Funktion auch "B" und "C" und legt den ordner "DEF" darin.
"fehler" Dient zur ausgabe von Fehlermeldungen. Ich ahbe noch nichst besonderes gemacht und so wird nur der Programmname und die übergebne Meldung auf dem StandardFehlermelungsKanal (Konsole) ausgeben.
"msg" Macht auch nur eine ausgabe auf der Konsole dient aber zur Ausgabe von normalen Nachrichten.
"hilfe" Wird diese Funktion aufreufen so gibt sie informationen über die Optionen die von der Konsole aus erreichbar sind.
"load_conf" ließt eine Konfiguration aus einer Datei.
"read_conf" ließt die von der Konsole übergebenen Optionen.
Und nun
zu 3.
Das Programm selber.
Als erstes versuche es das Programm eine voreingestellte Configurationsdatei zu laden. (siehe in 1. "confdat") Dann werden die Kommadozeilenoptionen ausgelesen.
danach sortieret das Programm die Liste der Ordner und Dateien, die ignoriert werden sollen und lösche alle doppelten. Danch versucht es ein externes Kommando aus zu führen und wenn das erfolgreich war, wird entweder Die Daten zu der zu überwachenden dateien gesammelt oder die Dateien überprüft. Danch wird wieder externes Kommando aus geführt.
Und nun zu den möglichen Einstellungen am Programm:
-Eine extrene Konfiguartionsdatei Laden:
Programm intern (P): confdat => "</pfad(dateiname>"
Konfiguartiondateioption (K): nicht verfügbar (ist auch nicht sinnvoll denke ich)
Kommandozeilenoption (O): -f <pfad/dateiname>
-Ordner (mitsammt seinen Subordnern) dessen Dateien überwacht werden sollen.
P: start => "</pfad>"
K: start = </pfad>
K: start = "</pfad>"
K: start = '</pfad>'
K: start[STR] = </pfad>
K: start[STR] = "</pfad>"
K: start[STR] = '</pfad>'
O: -s </pfad>
-Ordner in dem die Datensätze gespeichrt werden sollen
P: ziel => </pfad>
K: ziel = </pfad>
K: ziel[STR] = </pfad>
(rest sieh oben)
O: -z </pfad>
-Kommando, das vor dem Programm ausgeführt werden soll.
P: vor => "<Kommado>"
K: vor = <Kommado>
K: vor[STR] = <Kommado>
O: -p <Kommado>
-Kommando, das nach dem Programm ausgeführt werden soll.
P: nach => "<Kommado>"
K: nach = <Kommado>
K: nach[STR] = <Kommado>
O: -a <Kommado>
-Was das programm nun machen soll. Entweder die Datenbank erstellen oder die Dateien überprüfen.
P: aktion => "create" (zum erstellen der Datenbank)
P: aktion => "check" (zum überprüfen der Dateien)
K: aktion = create (zum erstellen der Datenbank)
K: aktion[STR] = create (zum erstellen der Datenbank)
K: aktion = check (zum überprüfen der Dateien)
K: aktion[STR] = check (zum überprüfen der Dateien)
O: -c (zum erstellen der Datenbank)
O: -t (zum überprüfen der Dateien)
-Eine Liste der auszuschließenden Dateien/Ordner
P: exclude => ["</pfad1>", "</pfad2>", "</pfad3>" ...]
K: exclude[ARR]=</pfad1>, </pfad2>, </pfad3> ...
K: exclude[ARR]="</pfad1>", "</pfad2>", "</pfad3>" ...
K: exclude[ARR]='</pfad1>', '</pfad2>', '</pfad3>' ...
O: -e </pfad1> (kann mehrfach Aufgerufen werden, jeder Aufruf hängt den angebenen an die Liste)
-Welche Daten von den Dateinen sollen gepeichert werden?
P: mode => "md5" (nur md5summen werden gespeichert)
P: mode => "stat" (nur die Dateieigenschaften werden gespeichert)
P: mode => "both" (md5summen und die Eigenschaften werden gespeichert)
K: mode = md5 (nur md5summen werden gespeichert)
K: mode[STR] = md5 (nur md5summen werden gespeichert)
K: mode = stat (nur die Dateieigenschaften werden gespeichert)
K: mode[STR] = stat (nur die Dateieigenschaften werden gespeichert)
K: mode = both (md5summen und die Eigenschaften werden gespeichert)
K: mode[STR] = both (md5summen und die Eigenschaften werden gespeichert)
O: -m md5 (nur md5summen werden gespeichert)
O: -m stat (nur die Dateieigenschaften werden gespeichert)
O: -m both (md5summen und die Eigenschaften werden gespeichert)
Das ist jetzt etwas lang geworden, aber ich hoffe es hilft dir weiter. Wenn du noch irgendwo genauere Erklärungen brauchst Frage einfach.
p.s.:
Ganz wichtig ist, das alle Pfadangaben absolut sind allso mit "/" beginnen und Ordner kein abschlißtendes "/" haben, andernfalls kann das Script ganz ordntlich ins Schleudern kommen und eventuell auch Schaden anrichten, indem es Dateien überschreibt.
Cool, jez habe ich es soweit das es funktioniert. Ist ja garnicht mal so schwer.
Allein der Ordner /etc hat er ja in 3 Sekunden gechekt und Änderungen findet er auch die kleinste...
Aber welche Ordner sind jetzt relevant? Klar, meine persönlichen Daten kommen Natürlich dazu. /etc ist auch wichtig. Was ist mit dem Rest?
Für /usr brauch er schon so seine Minute.
Allein der Ordner /etc hat er ja in 3 Sekunden gechekt und Änderungen findet er auch die kleinste...
Aber welche Ordner sind jetzt relevant? Klar, meine persönlichen Daten kommen Natürlich dazu. /etc ist auch wichtig. Was ist mit dem Rest?
Für /usr brauch er schon so seine Minute.
-
- Beiträge: 429
- Registriert: 09.10.2003 16:17:33
- Wohnort: Ilmenau
-
Kontaktdaten:
Wenn ein Rechner unter "vollast" steht, müsste doch auch die verbrauchte Leistung größer sein, als wenn man alles runterfährt. Wenn man nun urplötzlich unter Vollast den Strom "klaut" müssten doch die Induktivitäten im Rechner eine Spannungsspitze erzeugen, die dann die Hardware zerstören könnte oder ist ein Löschdiode in einem AT Netzteil? Lieg ich da jetzt vollkommen falsch, wenn nicht wäre der Datenverlust unter umständen noch zu verkraften, ich installier mir lieber Debian neu, als mein Board und Komponenten auf den Schrott zu liefern.
Ja schon, bin aber zur Zeit etwas beschäftigt. Was das starten betrifft so wäre es das günstigste es mit einem "Deamonscript" in "/etc/init.d/" zu starten, dann kqannst du es in beim erreichen eines Runnlevels und beim verlassen starten. Gib mir etwas Zeit, dann baue ich dir eines zusammen.
Was die zu überprüfenden Ordner betrifft. Ich habe ind das Script ja eine Ausschlusliste eingebaut. wenn es auf "/" startest und "/mnt", "/media", "/tmp", "/dev", "/sys", "/var", "/proc" ausschließt, dann dürften alle wichtigen Dateien abgedekt sein.
Mal sehen, vielleicht mach ich am Wochenende ein Debianpaket aus dem ganzen.
Was die zu überprüfenden Ordner betrifft. Ich habe ind das Script ja eine Ausschlusliste eingebaut. wenn es auf "/" startest und "/mnt", "/media", "/tmp", "/dev", "/sys", "/var", "/proc" ausschließt, dann dürften alle wichtigen Dateien abgedekt sein.
Mal sehen, vielleicht mach ich am Wochenende ein Debianpaket aus dem ganzen.

Hmm...
Die Zeile 118 funktioniert nicht
der Grund liegt in Zeile 211:
Das Problem ist wenn "/" an die Funktion "read_dir" übergeben wird, so wird bei der Rückgabe an das "/" noch "/<name>" angehägt allso kommt "//<name>" zurück. Das muß beachtet werden. Änder die Zeile so ab:
Dann dürfte es funktionieren, hoffe ich 
Die Zeile 118 funktioniert nicht
Code: Alles auswählen
next if(grep{ $_ eq $d }@{$config{exclude}});
Code: Alles auswählen
map{$_="$dir/$_"}@liste;
Code: Alles auswählen
if($dir=~m|/$|)
{ map{$_=$dir.$_}@liste; }
else
{ map{$_="$dir/$_"}@liste; }

Ich habe "create_dir" (zeile 219) geändert. Jetzt sollte es auch mit nicht existemtem Ziel-Verzeichnis umgehen können.
Code: Alles auswählen
sub create_dir($)
{
my ($dir)=@_;
my @d_liste=split('/', $config{ziel}.$dir);
shift(@d_liste) if($d_liste[0] eq '');
my $d_now='';
for my $d (@d_liste)
{
$d_now.="/$d";
unless(-d $d_now)
{
my $d_neu=$d_now;
mkdir($d_neu) or fehler("Konnte Verzeichnis $d_neu nicht erzeugen! ($!)");
}
}
}
Natürlich musste es mir jetzt im denkbar ungünstigesten Moment passierren:
Das Skript wird als cronjob Täglich ausgeführt.
Dummerweise habe ich danach ein dist-upgrade durchgeführt und als ich den PC dann runterfahren wollte, hing es sich auf. Also habe ich das tolle Skript bemüht, und siehe da es funktioniert bestens, und meldet mir fast 6000 Änderungen an Dateien. Die Ordnernamen dieser Dateien waren dann eigentlich genau die Namen, dessen Pakete upgegraded wurden, also alles ok. Sollte allerdings doch was passiert sein, kann ich es in dem Heuhaufen nicht finden.
Deshalb wäre es doch das beste man lässt es taäglich als cronjob laufen (für Abstürze zwischendurch) und dann nochmal als allererstes beim Runterfahren (für hänger beim Shutdown).
Ansonsten passiert das, wie bei mir.
Wie kann man das denn davor schalten, wenn man bei KDE auf Herunterfahren oder Neustarten klickt?
Das Skript wird als cronjob Täglich ausgeführt.
Dummerweise habe ich danach ein dist-upgrade durchgeführt und als ich den PC dann runterfahren wollte, hing es sich auf. Also habe ich das tolle Skript bemüht, und siehe da es funktioniert bestens, und meldet mir fast 6000 Änderungen an Dateien. Die Ordnernamen dieser Dateien waren dann eigentlich genau die Namen, dessen Pakete upgegraded wurden, also alles ok. Sollte allerdings doch was passiert sein, kann ich es in dem Heuhaufen nicht finden.
Deshalb wäre es doch das beste man lässt es taäglich als cronjob laufen (für Abstürze zwischendurch) und dann nochmal als allererstes beim Runterfahren (für hänger beim Shutdown).
Ansonsten passiert das, wie bei mir.
Wie kann man das denn davor schalten, wenn man bei KDE auf Herunterfahren oder Neustarten klickt?
Allso mein Vorschag wäre es das Script über den das init System zu starten.
Du könntest das script
http://nopaste.debianforum.de/3596
nach /etc/init.d/ unter dem Namen "dateipruefung" kopieren und in die runnlevel die links setzen. Bei "stop" werden die Daten Gelesen, bei "start" wird geprüft. die Ausgabe wird umgelenkt auf "/root/dateipruefung.msg" für die Meldungen und "/root/dateipruefung.err" für Fehlermeldungen.
Du könntest das script
http://nopaste.debianforum.de/3596
nach /etc/init.d/ unter dem Namen "dateipruefung" kopieren und in die runnlevel die links setzen. Bei "stop" werden die Daten Gelesen, bei "start" wird geprüft. die Ausgabe wird umgelenkt auf "/root/dateipruefung.msg" für die Meldungen und "/root/dateipruefung.err" für Fehlermeldungen.
Ok, dann möchte ich nochmal zusammenfasssen und ein paar Dinge fragen:
1. Der Festplattencache geht verloren und Schreibvorgänge auf die Festplatte können unvollständig sein.
Frage: Das Script von ToPeG (es zeigt alle Dateien an, die sich nach dem letzten durchlauf des Scriptes geändert haben) hilft mir dabei doch nur, wenn ich dann alle Dateien die sich geändert haben, durchforste und auf unvollständigkeit überprüfe?
2. Das Dateisystem wird nicht aufgeräumt.
Frage: Was bedeutet das? Was wird beim herunterfahren aufgeräumt?
3. Was nutzt ReadOnly-Mounten von /usr /sbin usw...?
So lange in die Dateien nicht regelmäßig geschrieben wird (was ja die Vorraussetzung für RO sein muss) kann daran doch auch nichts kaputt gehen, oder?
1. Der Festplattencache geht verloren und Schreibvorgänge auf die Festplatte können unvollständig sein.
Frage: Das Script von ToPeG (es zeigt alle Dateien an, die sich nach dem letzten durchlauf des Scriptes geändert haben) hilft mir dabei doch nur, wenn ich dann alle Dateien die sich geändert haben, durchforste und auf unvollständigkeit überprüfe?
2. Das Dateisystem wird nicht aufgeräumt.
Frage: Was bedeutet das? Was wird beim herunterfahren aufgeräumt?
3. Was nutzt ReadOnly-Mounten von /usr /sbin usw...?
So lange in die Dateien nicht regelmäßig geschrieben wird (was ja die Vorraussetzung für RO sein muss) kann daran doch auch nichts kaputt gehen, oder?