Am Freitag, 3. Juni 2011 schrieb Sven Hartge: > Jan Kappler <public@jan-kappler.de> wrote: [...] > > Ich habe gelesen, prinzipiell könnte man das mit CRON realisieren. > > Ich habe keine Erfahrung mit CRON, das wäre aber sicher nicht das > > Problem. Allerdings geht fschk nur bei nicht gemounteten > > Dateisystemen, zumindest interpretiere ich das so, also wird die > > Sache viel komplizierter. > > Man kann e2fsck mit "-n" aufrufen, damit er die Checks nur read-only > macht. Dies wird aber, da sich das Dateisystem ja dennoch ändert, viele > false-positives liefern, ist also keine sichere Aussage, ob ein Problem > besteht oder nicht. > > Und selbst, wenn man vorher einen Snapshot mittels LVM macht, ist das > Dateisystem dirty, wird also auch wieder mindestens eine Meldung > diesbezüglich liefern. Auch nach - mount -o remount,ro /mountpunkt ? Eigentlich müsste das Dateisystem dann alle noch ungeschriebenen Daten auf die Platte schreiben. Allerdings weiß ich nicht, ob das auch für das Journal zutrifft. Da gibts aber zumindest bei Ext auch eine Möglichkeit: - mount -o remount,commit=2 /mountpunkt - sleep 5 - mount -o remount,ro /mountpunkt - mount -o remount,commit=<was immer cat /proc/mounts da vorher zeigte> /mountpunkt Nun, allerdings würde ich schon erwarten, dass das Dateisystem bei einem Read only-Remount einen konsistenten Zustand herstellt. Ein kleiner Test zeigt, wie es gehen kann. Keiner schreibt auf /boot: merkaba:~> fsck -n /dev/sda3 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur- Lesen-Modus ist. boot: sauber, 304/73440 Dateien, 53513/292864 Blöcke merkaba:~> fsck -fn /dev/sda3 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur- Lesen-Modus ist. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung boot: 304/73440 Dateien (1.3% nicht zusammenhängend), 53513/292864 Blöcke Nun schreibt merkaba:~> while true ; do touch /boot/test ; sleep 0.2 ; done auf /boot: merkaba:~> fsck -fn /dev/sda3 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur- Lesen-Modus ist. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung Die Anzahl freier Inodes ist falsch (73136, gezählt=73135). Repariere? nein boot: ********** WARNUNG: Noch Fehler im Dateisystem ********** boot: 304/73440 Dateien (1.3% nicht zusammenhängend), 53513/292864 Blöcke merkaba:~#4> fsck -fn /dev/sda3 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur- Lesen-Modus ist. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung Die Anzahl freier Inodes ist falsch (73136, gezählt=73135). Repariere? nein boot: ********** WARNUNG: Noch Fehler im Dateisystem ********** boot: 304/73440 Dateien (1.3% nicht zusammenhängend), 53513/292864 Blöcke Und jetzt mit Read Only Remount: merkaba:~#4> mount -o remount,ro /boot merkaba:~> fsck -fn /dev/sda3 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung boot: 305/73440 Dateien (1.3% nicht zusammenhängend), 53513/292864 Blöcke merkaba:~> mount -o remount,rw /boot Allerdings: merkaba:~> while true ; do touch /boot/test ; sleep 0.2 ; done touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar touch: kann „/boot/test“ nicht berühren: Das Dateisystem ist nur lesbar ^C# Wer das Risiko eingehen kann und möchte, dass Dienste / Anwendungen ihre Daten nicht schreiben können, der kann, so wie es hier aussieht, zumindest ein Ext-Dateisystem auch dann prüfen, wenn es noch gemountet ist. Eine andere, durchaus auch riskante Möglichkeite wäre, Schreibzugriffe auf das Dateisystem so lange zu unterbinden, wie das Prüfen dauert. Riskant, weil der Kernel dann Hauptspeicher-technisch in Bedrängnis geraten kann. Okay, auch das nochmal mit einem verläßlicheren Schreibtest: I=0; while true ; let I=I+1 ; do touch /boot/test$I ; sleep 0.2 ; done Das Anlegen nur einer Datei triggert nur am Anfang, wenn Ext irgendwann die Datei mal geschrieben hat, nicht mehr unbedingt. merkaba:~> fsck.ext4 -fn /dev/sda3 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur- Lesen-Modus ist. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung Die Anzahl freier Inodes ist falsch (73134, gezählt=73116). Repariere? nein boot: ********** WARNUNG: Noch Fehler im Dateisystem ********** boot: 306/73440 Dateien (1.3% nicht zusammenhängend), 53513/292864 Blöcke merkaba:~#4> fsck.ext4 -fn /dev/sda3 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur- Lesen-Modus ist. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung Die Anzahl freier Inodes ist falsch (73134, gezählt=73110). Repariere? nein boot: ********** WARNUNG: Noch Fehler im Dateisystem ********** boot: 306/73440 Dateien (1.3% nicht zusammenhängend), 53513/292864 Blöcke merkaba:~#4> fsck.ext4 -fn /dev/sda3 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur- Lesen-Modus ist. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung Die Anzahl freier Inodes ist falsch (73134, gezählt=73104). Repariere? nein boot: ********** WARNUNG: Noch Fehler im Dateisystem ********** boot: 306/73440 Dateien (1.3% nicht zusammenhängend), 53513/292864 Blöcke merkaba:~#4> fsck.ext4 -fn /dev/sda3 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur- Lesen-Modus ist. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung Die Anzahl freier Inodes ist falsch (73134, gezählt=73099). Repariere? nein boot: ********** WARNUNG: Noch Fehler im Dateisystem ********** boot: 306/73440 Dateien (1.3% nicht zusammenhängend), 53513/292864 Blöcke merkaba:~#4> fsfreeze -f /boot merkaba:~> fsck.ext4 -fn /dev/sda3 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung boot: 370/73440 Dateien (1.4% nicht zusammenhängend), 53515/292864 Blöcke merkaba:~> fsfreeze -u /boot merkaba:~> fsck.ext4 -fn /dev/sda3 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur- Lesen-Modus ist. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung Die Anzahl freier Inodes ist falsch (73070, gezählt=73064). Repariere? nein boot: ********** WARNUNG: Noch Fehler im Dateisystem ********** boot: 370/73440 Dateien (1.4% nicht zusammenhängend), 53515/292864 Blöcke merkaba:~#4> fsfreeze -f /boot merkaba:~> fsck.ext4 -fn /dev/sda3 e2fsck 1.41.12 (17-May-2010) Warnung! /dev/sda3 ist eingehängt. Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung boot: 400/73440 Dateien (1.3% nicht zusammenhängend), 53515/292864 Blöcke merkaba:~> Der entscheidende Unterschied während des fs_freeze: merkaba:~> I=0; while true ; let I=I+1 ; do touch /boot/test$I ; sleep 0.2 ; done ^C# merkaba:~#130> rm /boot/test* Also keine Fehler in der Anwendung. Das Dateisystem schreibt die Dateien nach dem Unfreeze. Erforderlich hierfür ist entweder merkaba:~> apt-show-versions | grep util-linux util-linux/experimental uptodate 2.19.1-1 oder merkaba:~> dpkg -S $(which xfs_freeze) xfsprogs: /usr/sbin/xfs_freeze Wobei xfs_freeze möglicherweise auch nur mit XFS-Dateisystemen funktioniert. Und ich würde es vor dem Praxis-Einsatz immer erstmal wie oben geschehen mit dem Dateisystem meiner Wahl *testen*. Besonders schön ist die Freeze-Geschichte dann natürlich mit Snapshots: - /etc/init.d/mysql stop - oder besser "Mach mal konsistent"-Anweisung via MySQL-Client - sync; fsfreeze -f /mountpount - merkaba:~> btrfs subvolume snapshot / /schnappschnuss-2011-06-04 Create a snapshot of '/' in '//schnappschnuss-2011-06-04' merkaba:~> - Ganz wichtig immer: fsfreeze -u /mountpunkt - MySQL mach weiter Dabei kommt es jedoch drauf an, genau zu verstehen, was da vor sich geht. Bislang für mich ungeklärte Fragen: 1) Ist der Sync vor dem fsfreeze erforderlich, um zu garantieren, dass die MySQL-Datenbank in ihrem konsistenten Zustand auf der Platte gelandet ist? Wenn ja, wie vermeide ich das kurze Zeitfenster zwischen sync und freeze? Ich verstehe -f, --freeze This option requests the specified a filesystem to be frozen from new modifications. When this is selected, all ongoing transactions in the filesystem are allowed to complete, new write system calls are halted, other calls which mod‐ ify the filesystem are halted, and all dirty data, metadata, and log information are written to disk. Any process attempting to write to the frozen filesystem will block waiting for the filesystem to be unfrozen. Note that even after freezing, the on-disk filesystem can contain information on files that are still in the process of unlinking. These files will not be unlinked until the filesystem is unfrozen or a clean mount of the snapshot is complete. aus der fsfreeze-Manpage ja so, dass es im Grunde einen Sync macht... 2) Ist überhaupt das fsfreeze erforderlich oder macht btrfs subvolume snapshot das implizit? Solange ich das nicht besser weiß würde ich aber sync, fsfreeze und snapshot kurz aufeinanderfolgend machen - und hoffen, damit weg zu kommen. Ciao, -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7
Attachment:
signature.asc
Description: This is a digitally signed message part.