Martin Schwarz schrieb am 04.01.2014 in <
news:1leylcq.c64fsw1r1gg78N%usene...@kuroi.inka.de>
> Thomas Kaiser <
Thomas...@phg-online.de> wrote:
>> (Dateiinhalte ist nochmal ein komplett anderes Thema -- 'zig
>> Frameworks in OS X bedienen sich Datenbank-Dateien, die ab und an
>> geschrieben werden und die zum Teil aufeinander aufbauen. Weder kann
>> beim Klonen eines gerade aktiven Systems sichergestellt werden, dass
>> eine solche Datei gerade in sich konsistent ist, noch, dass zwei
>> DB-Dateien, deren Inhalte aufeinander aufbauen zueinander konsistent
>> geklont werden, wenn der Vorgang eine gewisse Zeit braucht [1])
>
> Vielleicht eine dumme Frage, die ich mir bisher auch gar nicht
> gestellt habe:
>
> Wie geht Time Machine mit dieser Problematik um? Fordert es den
> jeweiligen Prozess noch schnell auf, seine Caches zu flushen, bevor es
> die DB-Datei von Platte liest?
Nein, die einzige "API" auf Backup-Seite existiert in der Möglichkeit,
Dateien von TimeMachine-Backups auszuschließen:
The Backup Core API includes a function you can use to exclude from
Backup temporary or otherwise unimportant folders and files your
application creates. In addition, you can use this function to allow
your users to make backup decisions from within the context of your
application.
> Die Alternative "nicht aus dem laufenden System heraus kopieren" steht
> ja hier nicht zur Verfügung.
Das ist ja unter anderem _der_ fundamentale Unterschied zwischen einem
blöden Klon und einem Backup: Ein Klon will eine 1:1-Kopie eines
bootbaren Systems sein, ein Backup ist genau das aber nie. Ein Backup
enthält wichtige System- und User-Daten sowie Software in konsistenter
Fassung und dient der Datenwiederherstellung.
Du kannst ein TimeMachine-Backup nicht direkt booten (nein, auch ab
10.7.2 nicht [1]) und das aus gutem Grund. Würdest Du einen Klon im
Notfall booten, so ist das auf einmal das Original und ohne weitere
Sicherungsschicht wäre dann Dein Pseudo-Backup (AKA Klon) ggf. aus dem
gleichen Grund futsch, der die eigentliche Installation oder die Daten
gehimmelt hat (Software läuft Amok, Schadsoftware, etc.)
Das Gute daran: Da bei einem Backup gar kein bootbarer Klon entstehen
muß, braucht man wahnsinnig viel gar nicht erst mitsichern. Und genau
das geschieht bei TimeMachine. Schon per default sind ganz viele Sachen,
bei denen solche kritischen Situationen auftreten könnten, exkludiert.
Nachschauen in der Shell per
defaults read /System/Library/CoreServices/backupd.bundle/Contents/Resources/StdExclusions
(das sind die Standard-Ausnahmen, die anhand Pfad-Kriterien nie
gesichert werden) und
sudo mdfind "com_apple_backup_excludeItem = 'com.apple.backupd'"
(das sind alles Pfade, die per Extended Attribut von $irgendwem --
Apple, Softwarehersteller oder auch aufgeklärter User -- willentlich
vom Backup ausgeschlossen wurden. Gibt noch weitere Ausschlüsse, siehe
bspw. <
http://pondini.org/TM/Works4.html>)
TimeMachine versucht ja bei jedem Lauf anhand des FSEvents-API zu
erkennen, in welchen Verzeichnissen sich was seit dem letzten Lauf
geändert hat (schlägt das fehl, dann muß es das komplette Quellvolume
untersuchen, was dann immer ziemlich lange dauert). Exakt der selbe
Mechanismus läuft aber auch während eines Backups weiter und am Ende
guckt TM nochmal nach, ob a) Dateien, die vorher nicht gesichert werden
konnten, weil sie offen/locked waren oder b) sich während des Backups
geänderte Dateien nochmal erneut zu sichern versucht werden sollen.
Schlägt auch dieser zweite Versuch fehl, dann war's das, die Datei wird
nicht gesichert und im Log wird das entsprechend vermerkt (auf die Tour
kann man auch Dateien im System haben, die nie gesichert werden können
und dann auch nicht werden).
Auf Programm(ierer)-Seite ist das bzgl. der Backup-Seite von TM ganz
simpel:
- Datenablage TM-kompatibel machen, d.h. eben keine großen DB-Dateien
pflegen sondern alles in kleine Dateibrocken im Dateisystem ablegen
- evtl. existente Datenbank-Dateien, die das Programm intern braucht, um
schneller auf Inhalte zuzugreifen, konzeptionell obsolet machen, d.h.
für Backup-Exklusion markieren und im Restore-Fall aus den kleinen per
TM gesicherten Dateibröckchen -- bspw. der Inhalt einzelner Mails --
die Datenbank wieder rekonstruieren (und genau das geschieht dann
auch, wenn man aus einem TM-Restore sein System neu aufsetzt, da kann
das Wiederanlegen diverser Indizes im Hintergrund den Rechner gerne
für paar Stunden unter Last halten)
- in Situationen, wo temporär Dateien entstehen, die eines Backups nicht
würdig sind, diese schon bei der Anlage passend per Extended Attribut
oder Pfad-Exklusion (siehe oben) markieren, d.h. abermals vom Backup
_ausschließen_.
Mehr an Backup-"API" gibt's bei TimeMachine nicht. Der ganze "Trick"
besteht darin, die Sachen so zu speichern, dass kleine Entitäten
(Dateibröckchen) draus werden und dass große Datenbanken gar nicht
mitgesichert werden müssen. Was völlig anderes ist die Restore-Seite: Da
bietet Apple entsprechende APIs an, um Programm_intern_ auf frühere per
TM gespeicherte _Objekte_ zuzugreifen (die allerdings physisch dann auch
nur wieder irgendwelche per TM gesicherten Dateien sind -- ein Beispiel
wären Kontakte im Adreßbuch, die auf Platte in Form irgendwelcher
Property Lists mit kryptischem Namen herumliegen, aber im Adreßbuch
selbst dann sinnvoll als Visitenkarten in früherer Version wieder
hergestellt werden können ohne dass man überhaupt wissen müsste, wo das
System solcherlei Kontakte-Property-List-Dateien überhaupt hinlegt).
Also nochmal in kurz: Es gibt kein Backup-API, weil's das nicht braucht,
da ein Backup per Definition keinen bootbaren Klon erstellt sondern
etwas, das per Restore erst wieder in ein lauffähiges System eingespielt
respektive verwandelt wird (und an der Stelle stellt sich das Problem
dieser offenen Datenbanken gar nicht, weil die erst gar nicht mitgesichert
werden [müssen]).
Gruss,
Thomas
[1] Ab 10.7.2 landet der bootbare Inhalt der "Recovery Partition" auf
direkt angeschlossenen TimeMachine-Backup-Disks, so dass man vom
TimeMachine-Medium in ein Notsystem booten kann, aus dem heraus man
dann ein Basis-System installieren oder aus der TM-Sicherung
wiederherstellen kann.