# scdbackup-0.9.2 http://scdbackup.webframe.org scdbackup@gmx.net Thomas Schmitt http://scdbackup.sourceforge.net Zweck: Backup grosser Datenmengen auf ein oder mehrere CDs, DVDs, BDs, einfach (keine Ausreden, den Backup nicht zu machen), keine speziellen Werkzeuge zum Lesen des Backups noetig Formate: ISO 9660 Filesystem (lesbar machen mit : mount) afio-Archiv (lesbar mit : afio ... /dev/cdrom) star-Archiv (lesbar mit : star ... &2 read dummy done ) | afio ... Es gibt eine passende Option, die den Pruefkommandos mitteilt, dass es sich um ein Multi-Volume-Archiv handelt (siehe unten). Die Ueberlaufgroesse fuer CD kann durch den Konfigurationsfile scdbackup_media_cap_value oder die Shellvariable SCDBACKUP_MEDIA_CAP anders eingestellt werden. (DVD: sdvdbackup_media_cap_value , SDVDBACKUP_MEDIA_CAP) Wenn Sie die Standardwerte 650m / 4480m aendern, muessen Sie sich das auf einem Zettel notieren oder die Groesse auf die raedchen-Floppy schreiben. Wiederaufnahme eines Backuplaufs Alle Backupkommandos koennen mit dem ersten Argument -resume und auf Wunsch mit einer Nummer als zweitem Argument gestartet werden. Sie beginnen dann mit dem existierenden Backupskript an dem Stueck, das durch die Nummer bezeichnet wird. Ein Minuszeichen vor der Nummer bewirkt, dass nur dieses eine Stueck erzeugt wird und das Skript dann endet. Wenn die Nummer fehlt (oder das zweite Argument "AUTO" lautet) dann beginnt das Skript bei dem Stueck, dessen Nummer im Statusfile steht ({skriptname}.pieceno). scdbackup , scdbackup_sys und scdbackup_afio erkennen folgende Optionen, wenn sie als erstes Argument angegeben werden : -prepare_only nur vorbereiten fuer -resume, keine CD brennen -last_volume_count gibt die Anzahl der Backupstuecke aus Das Skript outer_loop zeigt (in englisch), wie man sie nutzen kann. Ergebnis CDs oder DVDs ueberpruefen Zuallererst : dieses Pruefkommando stellt *nicht* sicher, dass der Backup enthaelt was *gewuenscht* ist. Ob scdbackup oder auch man selbst alles richtig gemacht hat, muss man durch qualifiziertes Betrachten des CD-Inhalts feststellen. Das heisst mindestens : Auf plausible Datenmenge achten, einige Filenamen mit ASKME lokalisieren und auf der entsprechenden CD nachsehen, ob sie dort auch vorhanden sind. Was diese Pruefung aber sicherstellt ist, dass der Datenstrom korrekt auf die CD uebertragen wurde und dass er ohne Verfaelschung wieder heruntergelesen werden kann. (Es besteht nur die extrem winzige Chance von 1 zu 3e38, dass eine Verfaelschung unerkannt bliebe.) Geprueft werden also CD-Rekorder, CD-Medium und CD-Lesegeraet. Damit eine CD ueberpruefbar ist, muss sie von scdbackup 0.8 oder moderner erzeugt worden sein, wobei der File scdbackup_make_checksum_value seinen Inhalt aus KONFIGURIEREN_* noch haben muss. Mit dieser Einstellung registrieren die Kommandos scdbackup, scdbackup_home, scdbackup_sys und scdbackup_afio die Groesse und eine MD5 Pruefsumme von jedem Teilstueck, das geschrieben wird. Diese Aufzeichnung dient spaeter der Pruefung der CD. Sie liegt aber erst seit scdbackup Version 0.8.3 am Ende der Nutzdaten auf dem Medium. Bei allen Versionen ab 0.8 ist sie auf jeden Fall in einem Listenfile auf der Festplatte des Rechners gespeichert. scdbackup_verify Liest rohe Daten von einer CD und prueft, ob es dieselben sind, die an cdrecord uebergeben wurden. Es liest die Daten von /dev/cdrom und vergleicht sie mit dem juengsten geschriebenen Teilstueck. scdbackup_verify -auto sammelt aufgezeichnete Pruefsummen aus allen Quellen und prueft, ob eine passt oder einen offensichtlichen Fehler anzeigt. So kann man noch nach Jahren bequem CDs pruefen. Andere Datenquellen (CD-Laufwerke) oder Aufzeichnungen aelterer CDs koennen mit Optionen von scdbackup_verify ausgewaehlt werden. ZB. scdbackup_verify /dev/cdrom -auto Bei Backups aus Versionen 0.8 bis 0.8.2 muss man dazu allerdings die Liste der Pruefsummenrecords haben. Siehe Ausgabe von scdbackup_verify -hilfe bzw. File scdbackup_verify_hilfe wegen einer Beschreibung der Optionen, dem Namen des Listenfiles und weiteren Beispielen. Das Kommando liest die gesamte CD und berichtet das Ergebnis sowohl durch einen Text auf stderr als auch durch seinen Exitwert : * "OK ..." und ein Exitwert von 0 zeigen eine erfolgreiche Pruefung mit positivem Ausgang an. * Verschiedene Beschwerden in GROSSBUCHSTABEN und ein Exitwert 1 bedeuten eine fehlerhafte oder verwechselte CD. sdvdbackup_verify DVD Version des obigen. Nutzt einen anderen Listenfile ! Die Liste der Records wird normalerweise im File logs/backup_log bzw. logs/backup_dvd_log unter dem Installationsdirectory von scdbackup gespeichert. Bei normaler Installation von scdbackup muss man zum Lesen der Liste der User sein, der die CD gebrannt hat. Man kann die Adresse dauerhaft aendern und zwar durch diese Files : scdbackup_checksum_list_value bzw. sdvdbackup_checksum_list_value Man kann sie auch durch exportieren von Shellvariablen zeitweilig ueberstimmen: SCDBACKUP_CHECKSUM_LIST bzw. SDVDBACKUP_CHECKSUM_LIST Die Pruefsummenberechnung und die Prueflaeufe basieren auf den Optionen -filter_md5 , -compare_checksum und -search_md5 von bin/cd_backup_planer . Das Format der Pruefsummenrecords und -marken ist weiter unten in Anhang VERIFIZIEREN beschrieben. Bei Multi-Volume-Archiven (siehe oben) muss man die Kapazitaetsgrenze angeben, die beim Schreiben des Backups eingestellt war. zB: scdbackup_verify /dev/cdrom -auto - - 650m sdvdbackup_verify /dev/dvd -auto - - 4480m Wenn die Ueberpruefung gleich nach dem Schreiben fehlschlaegt, dann kann man das Backupstueck wiederholen, indem man bei -resume die Nummer mit angibt. ZB. sdvdbackup -resume 3 Man sollte die gelagerten Backups regelmaessig auf korrekte Lesbarkeit pruefen. scdbackup_verify -auto Wenn dabei die Pruefung fehlschlaegt, sollte man moeglichst schnell den ganzen Backup mit allen Stuecken durch einen neuen ersetzen. Sollte das nicht moeglich sein, dann kann man mehrfach versuchen, den Daten- traeger auf eine zuverlaessige Platte zu kopieren und dann pruefen, ob es vielleicht doch geklappt hat. Das kann gerade bei leicht beschaedigten DVDs durchaus Erfolg bringen dd if=/dev/cdrom of=/tmp/hoffentlich_gesunder_image_file bs=2048 scdbackup_verify /tmp/hoffentlich_gesunder_image_file -auto Wenn das geklappt hat, kopiert man das ganze auf einen neuen Datentraeger cat /tmp/hoffentlich_gesunder_image_file | scdbackup -pipe_to_media DVD liefern oft deutlich mehr Daten als draufgeschrieben wurden. Wenn man die Groesse der Nutzdaten bereits grob kennt, sollte man das Einlesen auf diese Groesse plus drei MB beschraenken. ZB: dd if=/dev/cdrom of=/tmp/hoffentlich_gesunder_image_file bs=1M count=1718 nachdem sdvdbackup_verify /dev/cdrom -auto_end nach ""1715m bytes" Erfolg oder Misserfolg gemeldet hatte. Wenn die Groesse nicht von vorherigen Verify-Laeufen bekannt ist, dann kann man die Ausgabe nach dem erfolgreichen Verfizieren auf der Platte begrenzen: dd if=/tmp/hoffentlich_gesunder_image_file bs=1M count=1718 | \ sdvdbackup -pipe_to_media Hinweis: alte Filesysteme vertragen evtl. keinen File mit 4200 MB. Wenn man erwarten muss, dass sich ein Backup spaeter nicht mehr neu machen laesst (zB. weil es kein Backup sondern eine Datenauslagerung ist), dann sollte man den Einsatz von Blockpruefsummenlisten erwaegen und auch mehrere identische Kopien herstellen. Siehe Anhang REDUNDANZ. CD-RW und DVD-RW loeschen , Datentraeger unlesbar machen Wenn eine CD-RW bereits beschrieben wurde und wiederverwendet werden soll, ist es noetig, sie zu loeschen. Das selbe kann u.U. bei DVD-RW noetig sein. Der Vorgang des Loeschens beschaedigt natuerlich die Daten auf der CD-RW. Wenn automatisches Loeschen mit "1" (oder "j") konfiguriert ist, dann werden bei jedem Backup die Datentraeger entsprechend ihrem automatisch erkannten Typ und Zustand vorbehandelt. Normalerweise ist diese Typerkennung zuverlaessig. Wenn jedoch der Typ des Datentraegers nicht erkannt werden kann oder wenn er sich fuer das backupkommando nicht eignet, dann bricht der backuplauf ab. Er kann wiederaufgenommen werden, nachdem der Datentraeger von Hand in einen beschreibbaren Zustand gebracht und das automatische Loeschen zeitweilig ausgeschaltet wurde: export SCDBACKUP_BLANKEN=0 scdbackup -resume Nicht nur in Problemfaellen sondern auch mit gut erkennbaren Datentraegern kann es sinnvoll sein, das Loeschen getrennt vom Backup vorher zu erledigen. Je nach Optionen, Brenner und Schreibprogramm kann das Loeschen einige Zeit dauern. So ist es nuetzlich, einige geloeschte CD-RW bereit zu haben. Ausserdem koennte man manchmal ungewoehnliche Blanking Options anwenden wollen. Bei DVD+RW ist kein Loeschen noetig, um den Datentraeger wieder beschreibbar zu machen. Nichtsdestotrotz kann die Option "shred" sehr hilfreich fuer den persoenlichen Datenschutz sein. DVD-RW fuer den Gebrauch mit den Programmen growisofs oder cdrskin sollten ein einziges mal mit Option "force" geloescht und in den missverstaendlich benannten Modus "Restricted Overwrite" gebracht werden. Beide Programme verhaltien sich mit ihnen danach genau wie mit DVD+RW. DVD-RW fuer cdrecord oder wodim muessen vor jeder Wiederverwendung genau wie CD-RW geloescht werden. Das selbe trifft auch bei growisofs und cdrskin auf DVD-RW zu, die fabrikneu unformatiert beschrieben wurden oder in den Modus "Sequential" gebracht wurden. "shred" ist eine Option, die Datentraeger nicht unbedingt wieder schreibbar macht, sondern ihn mit Zufallsdaten fuellt. Danach sind die vorher gespeicherten Daten nicht mehr ohne besondere Anstrengungen lesbar. Die Menge der Zufallsdaten kann mit dem zweiten Argument eingestellt werden. scdbackup_blank fordert dazu auf, die CD-RW einzulegen und 'Enter' zu druecken. Wenn ein Argument bei diesem Programm angegeben wird, dann wird es als Blanking Option verwendet. Uebliche Werte sind "fast" (nur das noetigste loeschen) oder "all" (die ganze CD-RW bearbeiten). Eine (englische) Liste der moeglichen Optionen erhaelt man mit der Option: blank=help des Brennprogramms (cdrecord, wodim, oder cdrskin). Wenn im File scdbackup_blanken_value automatisches Loeschen bestellt ist, dann wird die dortige Blanking Option verwendet. Im Zweifelsfall wird Option "fast" verwendet. sdvdbackup_blank DVD Version des obigen. Das Verhalten haengt etwas vom konfigurierten Schreib- programm und Medientyp ab. Fuer DVD+RW wirkt nur Option "shred". Fuer cdrecord, wodim und DVD-RW : siehe scdbackup_blank. Fuer growisofs, cdrskin mit DVD-RW : Die Optionen "all", "full" und "sequential" fuehren zum Modus "Sequential", alle anderen fuehren zum bequemen Modus "Restricted Overwrite". Beide Kommandos versuchen herauszufinden, welche Art von Medium sich im Laufwerk befindet. Das haengt stark von nicht ausdruecklich offiziellen Ausgaben der Programme dvd+rw-mediainfo bzw. cdrecord, wodim oder cdrskin ab. Falls die Klassifizierung misslingt, wird der Anwender gefragt, einen der Typen "CD-RW", "DVD-RW" oder "DVD+RW" zu authorisieren. Der Bestimmungsversuch und ggf. die Frage kann durch das dritte Argument des Kommandos vermieden werden. zB: sdvdbackup_blank all - DVD-RW WARNUNG: Diese Kommandos nicht bei einmal beschreibbaren Medien anwenden ! Wenn zB. eine DVD-R nicht erkannt oder vom Anwender zur DVD+RW erklaert wird, dann wird sie durch "shred" endgueltig verbraucht. Nach einem kleinen Backup kann man die Ueberreste von groesseren Backups ohne Probleme von einer DVD+RW lesen, bis diese wirklich ueberschrieben werden. DVDs mit vertraulichen Daten sollte man daher vor der Wiederverwendung mit sdvdbackup_blank shred behandeln. Bei hohem Sicherheitsbeduerfnis durchaus mehrfach wiederholen. Option "shred" erklaert zunaechst was im einzelnen passieren wird und fragt erneut nach einer Bestaetigung durch die Eingabetaste. Die Aktionen bestehen noetigenfalls aus einem einen geigneten Loeschvorgang und danach dem Schreiben der festgelegten Datenmenge auf den Datentraeger. Diese Menge kann mit dem zweiten Argument des Kommandos eingestellt werden. Zum Beispiel : sdvdbackup_blank shred 4.7e9 Fehlt das zweite Argument, dann gilt die Einstellung scdbackup_media_cap_value bzw. sdvdbackup_media_cap_value . Normalerweise sollte die Standardgroesse von 4480m ausreichen, um jedes echte Datenbyte auf einer DVD zu erschlagen. Man kann sich auch an der Maximalgroesse orientieren, die growisofs beim Schreiben meldet. Wegen der Pruefsummenmarke sollte man 200 abziehen (zB.: shred 4700372792 ). Ueberreste von Backups, die mit Version 0.8.3 oder moderner gemacht wurden, kann man mit dem Kommando scdbackup_verify -scan_print aufspueren. zB zeigt : - 1_1 A40907.115444 4699824167 7ec3be0efef3f27dd7ec90216d2ee3b4 an, dass Backupdaten bis Byte Nummer 4699824167 geschrieben wurden. Die Option "shred" produziert einen Pruefsummenrecord namens "shredded" und kann daher zusammen mit s*backup_verify auch als Qualitaetstest fuer den ganzen Datentraeger verwendet werden. Eine grosse Organisation, die davon ausgeht, viele Feinde zu haben, schreibt vor, dass zusaetzlich zum Ueberschreiben mit Zufallsdaten auch noch mit einem Byte ("character") und seinem binaeren Komplement ueberschrieben werden muss. Ausserdem wird eine Pruefung des Zufallsschreibens verlangt. Dieselbe Organisation erlaubt bei "TOP SECRET" Medien keine solche Loeschung sondern verlangt deren voellige physikalische Zerstoerung. Obwohl ich bezweifle, dass das binaere Komplement bei CD/DVD seine gewuenschte Wirkung entfaltet, gibt es zwei Optionen , die diese beiden Schreibvorgaenge erledigen. Ein vorschriftsmaessiger Durchgang sieht dann etwa so aus : export SCDBACKUP_BLANK_CHARACTER="U" sdvdbackup_blank character 4.7e9 sdvdbackup_blank complement 4.7e9 sdvdbackup_blank shred 4.7e9 sdvdbackup_verify Als konstantes Byte wird hier das grosse "U" verwendet (= 01010101). Mit der Variablen SCDBACKUP_BLANK_CHARACTER kann man einen anderen normalen Buchstaben oder eine Ziffer bestellen. Von Sonderzeichen sollte man Abstand nehmen. Inkrementelle Backups Bei groesseren Datenmengen wird es laestig bis unmoeglich die alten Daten mit jedem Lauf neu zu sichern. Um dies (mit gewissen Einschraenkungen) zu vermeiden, kann man ein inkrementelles Backupschema verwenden. Solch ein Backup besteht aus einem Basisbackup, der schon etwas aelter sein kann jedoch eine vollstaendige Kopie aller Files jeden Alters enthaelt. Auf diesem Basisbackup setzen Auffrischungsebenen auf, die zunehmend kurz- fristigere Ergaenzungen enthalten. Das spart eine Menge Zeit und CDs, bietet jedoch eine aehnliche Sicherheit wie eine Reihe von vollstaendigen Backups. Man sollte etwas von der Ersparnis in haeufigere Backups und laengere Lagerzeiten der CDs investieren, um die geringere Redundanz der Medien auszugleichen. Es muss betont werden, dass die korrekte Rueckinstallation eines mehrebigen Backups wesentlich komplizierter ist, als bei einem Vollbackup. Bedenken Sie Ihre zukuenftige Situation, falls Sie den Backup wirklich in vollem Umfang benoetigen sollten. Waegen Sie ab, ob die Entlastung gegenueber einem Vollbackup wirklich die zusaetzliche Belastung im Notfall rechtfertigt. Beginnen Sie aber spaetestens mit inkrementellen Backups, wenn Sie Vollbackups wegen ihres Aufwandes auslassen muessten. Zu Anfang muss eine Backupkonfiguration erzeugt werden. Sie speichert alle Parameter des Backups und der Zeitpunkte, zu denen Backups gemacht wurden. Danach wird automatisch ein erster Basisbackup (-level 0) gestartet. Waehlen Sie einen Konfigurationsnamen, der sich zur Erzeugung eines Directory eignet. Z.B.: $HOME/my_backup : $ scdbackup ... die ueblichen Argumente Ihres backups ... \ -conf_dir $HOME/my_backup -level -create_configuration Nach diesem ersten Lauf braucht man beim Backup nur noch den Namen der Konfiguration und die gewuenschte Auffrischungsebene anzugeben. Am naechsten Tag kann man zB. dieses Kommando ausfuehren, um einen Backup derjenigen Files zu machen, die seit dem -level 0 geandert oder neu erzeugt wurden : $ scdbackup -conf_dir $HOME/my_backup -level 1 Die Optionen -conf_dir und -level werden im Ausgabetext von bin/cd_backup_planer -hilfe erklaert. Dort gibt es auch ein Beispielschema. Mehrere unabhaengige Konfigurationen koennen festgelegt werden. Verschiedene Konfiguration stoeren sich auch dann nicht, wenn sie die selben Daten sichern. Nicht nur scdbackup sondern auch scdbackup_home und scdbackup_afio koennen auf die hier beschriebene Art verwendet werden. Die Zustandsaufzeichnungen in den Leveldirectories der Konfiguration verbrauchen einigen Plattenplatz, obwohl sie von gzip komprimiert werden. Man sollte die Groesse des Files $HOME/my_backup/level_0/content_file_list.gz waehrend des Level 0 Laufs beobachten und im Notfall den Lauf abbrechen. Dabei darf man sich nicht ueber die lange Verzoegerung wundern, mit der der File auf der Platte waechst. Das liegt an der gzip Pipe und man bekommt rechtzeitig mit, wenn die Groesse auszuufern droht. Wenn man den Plattenplatz oder die Rechenzeit fuer die Zustandsaufzeichnung nicht aufbringen kann, laesst sich dieses Feature durch die Option -disable_safe_leveling waehrend des Laufs mit -level -create_configuration abschalten. In diesem Fall koennen aber Umnennungen und Loeschungen nicht mehr erkannt werden und fehlen deshalb auch in hoehern Backupleveln. Solch ein Backup ist immer noch eine gute Quelle, um begrenzte Datenunfaelle zu beheben. Er kann aber unbrauchbar sein, um das ganze Backupgebiet akkurat wiederherzustellen. Die Grundeinstellung von scdbackup konfiguriert eine Methode, die auf dem traditionellen Verhalten von Inode-Nummern (POSIX "file serial numbers") beruht. Wenn Ihr Filesystem sich nicht an die Tradition haelt, werden Sie bei den hoeheren Leveln verdaechtig grosse Backups bekommen. Teilen Sie mir dann bitte den Typ des betroffenen Filesystems mit und verwenden Sie die alte pruefsummenbasierte Methode wie in Anhang INODE beschrieben. Wenn Sie je einen inkrementellen Backup komplett wiederherstellen muessen, dann werden Sie zunaechst das Level 0 einkopieren (zB. mit cp -dR ). Danach entfernen Sie die Files, die verschwunden waren, als Level 1 gemacht wurde. Dann kopieren Sie Level 1 ein. Das wird mit allen hoeheren Backuplevels wiederholt. Fuer das Loeschen enthaelt das letzte Stueck eines jeden Levels ein komprimiertes Shellskript /added_by_scdbackup/VANISHED.sh.gz . Nicht zum Spass laufen lassen ! Weitere Informationen ueber die Zustandsaufzeichnung finden Sie in der Ausgabe von bin/cd_backup_planer -hilfe . Suchen Sie nach "Backup mit mehreren Levels wiederherstellen" und lesen Sie auch die Beschreibung der einzelnen dort erwaehnten Optionen. Die Entscheidung ueber die Aufnahme eines Fileobjekts in den Backup wird anhand folgender Kriterien getroffen: mtime (anzeigen mit: ls -l), ctime (ls -lc), ggf. die Pruefsumme des Fileinhalts (bei alter Methode, wenn ein Oberdirectory eine junge Zeitmarke hat), ggf. die Device- und die Inode-Nummer (bei neuer Methode), eine Wirtschaftlichkeitsueberlegung, die eventuell ein ganzes Directory statt vieler kleiner Files in den Backup nimmt. Backup Informationsskripte Jede Backup-CD enthaelt ein Skript namens ASKME, das Auskunft darueber gibt, auf welcher CD eine gegebene Fileadresse sein muesste. Das das Skript nur die Fileadressen kennt, die das Formatierprogramm erhalten hat, kann es nicht sicher sagen, ob der gesuchte File zur Zeit des Backups vorhanden war. Es kann aber sagen, auf welcher CD man danach suchen muss. ASKME benoetigt lediglich eine bash- oder ksh-Shell, aber kein installiertes scdbackup, um Auskuenfte zu erteilen. Siehe Text askme_hilfe wegen einer Anleitung. Bei inkrementellen Backups sind auch die Informationsskripte der aelteren Level auf jeder CD gespeichert. Weil sie sehr gross werden koennen und dann auch praktisch nicht mehr verwendbar sind, werden von neu eingerichteten Backup- konfigurationen nur Rumpfskripte erzeugt, die lediglich das Datum, das Level und das Backupstueck nennen koennen. Um fuer Suchoperationen verwendbar zu sein, muss die Backupkonfiguration mit der zusaetzlichen Option -info_script -full erzeugt werden, oder alle Backuplaeufe muessen diese Option verwenden. Inkrementelle Backups mit Rumpfskripten durchsucht man mit dem Kommando scdbackup_askme, das im naechsten Abschnitt erklaert wird. Bei ISO 9660 formatierten Backups ist das Informationsskript im Wurzeldirectory des Backupstuecks. Bei Backups im Format afio (oder star) ist es das erste Fileobjekt im Backupstueck. Sein Name und seine Adresse hangen von den Einstellungen zur Backupzeit ab. Man kann die genaue Adresse im afio-Archiv mit diesem Befehl erfragen : afio -t /dev/cdrom 2>/dev/null | head -1 Die Antwort sollte in etwa so lauten u/thomas/scdbackup/scdbackup-0.9.2/tmp/ASKME_1000.1.z (Wenn keine plausible Antwort herauskommt, mal 2>/dev/null weglassen.) Das Skript kann auf so ziemlich jeder Shell laufen aber es hat den Nachteil, dass es recht langsam ist. Mit mehreren Levels von grossen Platten kann man Minuten auf die Antwort warten. Backup Such- und Rueckspeicherprogramm Das Kommando scdbackup_askme verwendet ein binaeres Programm, das suchfaehige ASKME-Skripte auslesen und dann die Suche wesentlich schneller durchfuehren kann. Es kann auch nach Textstuecken (wie fgrep) und regular expressions (wie grep) suchen. Der eigentliche Vorteil von scdbackup_askme ist seine Faehigkeit, Inhaltslisten und Loeschlisten aus einem Konfigurationsdirectory fuer inkrementelle Backups zu lesen. Es kann diese Listen auch vom jeweils letzten Backupstueck eines Backuplevels lesen. Beginnend mit scdbackup Version 0.8.7 gibt es Inhaltslisten auch auf dem letzten Stueck von nicht-inkrementellen ISO 9660 Backups. Die Inhaltslisten enthalten ausfuehrlichere Informationen als ASKME-Skripte. Man kann mit ihnen zB. sicher feststellen, ob ein bestimmter File im Backup ist (wogegen ASKME oft nur ein darueberliegendes Directory kennt). Es ist auch moeglich, aus einer Inhaltsliste die Adresse eines Files auf dem Datentraeger zu bestimmen (wogegen ASKME nur die Originaladresse of der Platte kennt). Auf Basis von Inhaltslisten kann scdbackup_askme auch Files aus ISO 9660 formatierten Backups rueckspeichern. Die Kommandos scdbackup_askme und sdvdbackup_askme koennen durch Startfiles voreingestellt werden. Siehe weiter unten: "Startfiles fuer das Such-" Beispiele (siehe Text doc/scdbackup_askme_hilfe wegen Optionen und Details) Die ASKME-Skripte von einem Backupdatentraeger (ISO-Format) auswerten: scdbackup_askme /cdrom/ASKME -levelall -search_grep 'baeume/.*eiche' scdbackup_askme /cdrom/ASKME -levelall -search_sh '/home/*/baeume/*eiche*' Eine inkrementelle Backupkonfiguration auf der Festplatte auswerten: scdbackup_askme $HOME/my_backup -levelall -search_sh -dialog Nachdem der aktuelle Stand der Backuplevels geladen wurde, wird der User nach Optionen oder Suchtexten gefragt. Wegen der Option -search_sh werden die Suchtexte dann als Shellparsermuster mit den Quelladressen der Fileobjekte verglichen. In diesem Modus gibt es ein Arbeitsdirectory, auf das sich Suchtexte beziehen, die nicht mit '/' beginnen. Die besonderen Filenamen '.' und '..' werden verstanden. -pwd -cd:/home/*/baeume *eiche* */*eiche* ../*eiche* -search_shpat *baeume/*eiche* -search_shname *eiche* -page:20 *eiche* Durch -search_shpat passt das Zeichen '/' auch auf *,? und []. Dadurch kann man sehr pauschal nach Schnipseln von Filenamen suchen. -search_shname vergleicht den Suchtext mit den einzelnen Filenamen. Aehnlich wie das Shellkommando find / -name '*eiche*'. -page:20 laesst die Ausgabe des Ergebnisses nach je 20 Zeilen anhalten und verlangt nach der Enter-Taste. Die Eingabe @ unterdrueckt dieses Anhalten zeitweise. Die Eingabe @@@ bricht die Ausgabe ab. Unabhaengig vom Suchmodus suchen die Optionen -l und -ls_d immer nach Shellparserregeln. Sie verhalten sich aehnlich wie die Shellkommandos ls und ls -d : -ls:.. -cd:.. -ls_d:*baeum* -ls_d:*baum* Alle Suchmodi koennen auch auf die Zieladdresse angewendet werden. -search_target Fuer die weiteren Beispiele schaltet man besser wieder auf Standardsuche um -search_sh Die aktuellen Einstellungen anzeigen lassen -status Alle moeglichen Einstellungen anzeigen lassen -status:long Den Hilfetext anzeigen lassen -hilfe Um einzelne Files oder ganze Directorybaeume zurueckzuspeichern muss man zuerst einen geeigneten Restoremodus einstellen. Dieser hier schuetzt existierende Files auf der Platte und erlaubt, nach Rueckspeicherproblemen weiterzumachen -restore_mode:overwrite_off:on_error_ignore Das Programm braucht die Adresse, an der der Datentraeger gemountet wird, und kann das Laufwerk dann ueber die Programm mount und eject entsprechend bedienen -restore_from:/cdrom -media_mode:load_eject:mount_umount Die Originaldaten sind geschuetzt. Damit trotzdem alles zurueckkopiert werden kann, wird auf ein Ausweichdirectory umgeleitet -restore_skip:/home/thomas -restore_to:/home/test/thomas Nun wird der Directorybaum /home/thomas/gif in dieses Ausweichdirectory kopiert -restore:/home/thomas/gifs Der User wird aufgefordert, die noetigen Datentraeger einzulegen. Man kann einzelne davon ueberspringen, aber dann ist das Ergebnis in /home/test/thomas/gifs natuerlich nicht vollstaendig. All obigen Operationen lassen sich auch auf Basis von inkrementellen Backupinformation direkt auf dem Backupdatentraeger (ISO-Format) ausfuehren. Die Listen sind auf dem letzten Stueck des jeweiligen Levels gespeichert: scdbackup_askme /cdrom/added_by_scdbackup -levelall -search_sh -dialog Der User wird aufgefordert, dias letzte Stueck eines jeden Levels einzulegen. Mit der Eingabe "@@@" und der Bestaetigung "j" zeigt er an, dass das oberste Level gelesen und damit das Baummodell komplett ist. Dann startet der Dialog wie im vorhergehenden Beispiel. Rueckspeicherlaeufe, die aus irgendeinem Grund abgebrochen wurden, koennen an der letzten Position wieder aufgenommen werden mit: scdbackup_askme -resume Man kann auch selbst ein bestimmtes Start-Level anwaehlen scdbackup_askme -resume:1 und darin auch noch das Backupstueck scdbackup_askme -resume:1:4 Die Option -resume funktioniert auch im Dialog, jedoch nur fuer Rueckspeicher- operationen, die in der selben Dialogsitzung stattgefunden haben, oder fuer solche, die kunstvoll mit den Optionen -resume_last_* und -resume_opt_text vorbereitet wurden. Auch abgebrochene -resume Laeufe koennen mit -resume fortgesetzt werden. Wenn der Programmabbruch ein Fileobjekt auf der Platte in einem Zustand hinterlassen hat, der weder dem Zustand vor der Rueckspeicherung noch einer korrekten Rueckspeicherung entspricht, dann verweigert die Option -resume die Arbeit und verlangt, dass man sich um den betroffenen File kuemmert. Im Dialogmodus kann man "weiter" eingeben, nachdem man den File geprueft und eventuell geloescht oder repariert hat. Im Nicht-Dialog bricht das Programm immer ab und man muss die ausloesende Option -resume_last_dirty im File $(scdbackup -where tmp)/askme_resume_state_"$UID"_dirty entweder entfernen oder ihre Fileadresse leermachen. Fileobjekte, die als "dirty" registriert wurden, sind in jeder Weise fragwuerdig. Die Directories ueber diesen Files koennen ihrem Besitzer zu grosszuegige Rechte geben, oder aber fuer alle zu knappe Rechte bieten. Man muss das ggf. pruefen. (Normalerweise hat der Besitzer aber sowieso rwx-Rechte an seinen eigenen Directories.) scdbackup_askme hat die Anmutung einer Kommandozeilenshell,aber es sollte nicht schwer sein, ein grafisches Frontend zu schaffen. In doc/saskme_frontend.c findet sich Beispielcode fuer die Aufgabe, scdbackup_askme per Fork zu starten und mit ihm in Dialog zu treten. (Kein GUI. Nur Code fuer den Anschluss.) Zugriffsrechte Nach der Installation von scdbackup darf zunaechst nur der Besitzer (und der Superuser) von ihr Gebrauch machen. In feindlichen Umgebungen oder auch nur bei anwenderfreundlicher Softwareausstattung sollte man unbedingt bei dieser Einstellung bleiben. Wenn noetig sollte man dann fuer weitere Backupuser eine weitere Installation von scdbackup durchfuehren. Im Fall eines rein persoenlichen Computers mag es tolerabel scheinen, wenn der Superuser die scdbackup-Installation des Desktopbenutzers mitverwendet. Man muss sich aber im klaren sein, dass der Besitzer der Installation dem Superuser Streiche spielen kann und dass Webbrowser oder andere Programme mit voller Unterhaltungsausstattung eventuell Chancen bieten, die Identitaet dieses Desktopusers zu uebernehmen. Es kann auch wuenschenswert sein, dass sich mehrere User eine Installation von scdbackup teilen. Dann sollte der Superuser eine Installation machen, die er aber auf *keinen Fall selbst* benutzt. Im Falle von Zugriffsschema "nur_gruppe" muss der Superuser noch die Installation der gewuenschten Gruppe zuordnen (zB. mit chgrp -R ). Das Skript ./SETZ_ZUGRIFF erlaubt es, die Beschraenkungen zu lockern. Es erwartet als einziges Argument einen der folgenen Namen von Zugriffsschemata : nur_besitzer das ist die oben beschriebene Grundeinstellung nur_gruppe erlaubt den Gruppenmitgliedern das gleiche wie dem Besitzer jeder_user erlaubt jedem User, Backups zu machen, aber versucht, ihn am Fummeln zu hindern. Nicht unbedingt sicher. eigenbau vorbereiteter Name fuer eine selbstgemachte Einstellung. Dazu SETZ_ZUGRIFF editieren und nach diesem Text suchen : "Hier die Eigenbau-Rechteverteilung eintragen" (Vorsicht : ./translator_german ueberschreibt SETZ_ZUGRIFF) ungeschuetzt wie der Name sagt : total ungeschuetzt und total unsicher Diese Einstellungen sind permanent und werden bei jedem Lauf von ./KONFIGURIEREN_CD oder ./KONFIGURIEREN_DVD erneut auf die Files uebertragen. ----------------------------------------------------------------------------- Innereien - Anhaenge Siehe auch Inhaltsverzeichnis am Anfang dieses Textes. ----------------------------------------------------------------------------- Anhang DIRECTORIES : Die Bestandteile des scdbackup-Systems sind auf mehrere Unterdirectories verteilt. Insbesondere sind die Files, die beim normalen Betrieb erzeugt oder erweitert werden, und die, die nur bei der Konfiguration geschrieben werden, von denen getrennt, die normalerweise unveraendert bleiben. Das Installationsdirectory scdbackup-0.9.2 enthaelt nach der Installation folgende Datenfiles : TIMESTAMP enthaelt die Zeitmarke des tar-Archives cd_get_variables liest die Konfiguration fuer CD dvd_get_variables liest die Konfiguration fuer DVD scdbackup_switcher Verteilerskript fuer Aktions- und Sprachauswahl Einige symbolische Links verweisen auf das ./doc Directory : COPYING LIESMICH README Folgende Directories entstehen unterhalb von scdbackup-0.9.2 : aux einige Teile, die in keine andere Kategorie passen bin Binaerprogramme, die aus C-Sourcen enstehen cmd dem Anwender zugaengliche Kommandos conf Konfigurationsfiles und anwenderdefinierte Zwischenskripte doc Dokumentation inst Konfigurationsskripte logs Listenfiles mit Pruefsummenrecords scripts Arbeitsskripte des scdbackup-Systems (bash oder ksh) src C-Sourcefiles der Programme in ./bin tmp Files, die fuer einen Backuplauf erzeugt werden Um das scdbackup-System anwenden zu koennen, muessen mindestens die Directories ./logs und ./tmp schreibbar sein. Es gibt Konfigurationsfiles, mit denen man diese beiden Directories auf Adressen ausserhalb des scdbackup-Directory umleiten kann. Man sollte deshalb generell vermeiden, Unterdirectories von scdbackup direkt zu adressieren, sondern ihre Adressen lieber mit $(scdbackup -where xyz) abfragen. Siehe auch die Beispiele in diesem Text. Aeltere Anwenderprogramme, die direkt innere Bestandteile von scdbackup verwenden, werden nun diese Skripte und Programme nicht mehr finden. Das betrifft nicht Anwendungen, die sich auf die Verwendung der Kommandos scdbackup* und sdvdbackup* beschraenken und auf Konfigurationsfiles nicht direkt zugreifen. Um den Uebergang zu erleichtern, gibt es das Skript ./inst/COMPATIBILITY_LINKS das eine Reihe von symbolischen Links im Directory scdbackup-0.9.2 anlegt. Damit sollten die in frueheren Beschreibungen von scdbackup empfohlenen Anwendungen ohne Aenderungen funktionieren. Eventuell dann noch fehlende Files kann man selbst linken. ZB. : cd $(scdbackup -where) ln -s $(scdbackup -where scripts)/cd_afio_kommando cd_afio_kommando Dennoch empfehle ich, betroffene Anwendungen auf die neue Directorystruktur umzustellen. Aus Sicherheitsgruenden sollte eine Anwenderinstallation von scdbackup *nicht* dem FHS gehorchen. FHS richtet sich hauptsaechlich an Systemfiles. Wenn man unbedingt fuer den Superuser eine Installation nach Vorschrift des FHS haben will, dann muss man sie folgendermassen ueber das System verstreuen : Konfigurationsfile : Inhalt : $HOME/.scdbackup_dir /opt/scdbackup-0.9.2 /opt/scdbackup-0.9.2/scdbackup_conf_dir /etc/opt/scdbackup-0.9.2 /etc/opt/scdbackup-0.9.2/scdbackup_tmp_dir_value /var/opt/scdbackup-0.9.2/tmp /etc/opt/scdbackup-0.9.2/scdbackup_logs_dir_value /var/opt/scdbackup-0.9.2/logs Siehe unten, Anhang KONFIGURATION, wegen der Bedeutung dieser Files. Um folgendem Befehl des FHS zu gehorchen: "Programs to be invoked by users must be located in the directory /opt//bin", kann man den Inhalt von ./cmd nach ./bin verschieben. ----------------------------------------------------------------------------- Anhang KONFIGURATION : Diese drei Konfigurationsfiles werden von beiden Subsystemen CD und DVD benutzt : $HOME/.scdbackup_dir Die Adresse des scdbackup-Directory (solch ein File wird auch von WEITERER_USER angelegt) Kann durch Variable SCDBACKUP_DIR ueberstimmt werden $HOME/.scdbackup_lang Die Dialogsprache. Zur Zeit werden nur zwei Sprachen angeboten : en (englisch) und de (deutsch). Jeder andere Inhalt dieses Files fuehrt zu en . Durch Variable SCDBACKUP_LANG ueberstimmbar. $HOME/.scdbackup_userid nur noetig, wenn die Shellvariable EUID nicht automatisch gesetzt wird. Dieser File kann dann eine eindeutige Dezimalzahl enthalten, um den jeweiligen User von allen anderen Usern des Systems zu unter- scheiden. Wenn sie $EUID leer vorfinden, fragen die Konfigurationsskripte nach dieser Nummer und legen den File an. Ueberstimmbar durch Variable SCDBACKUP_USERID . (Diese Zahl gibt einem aber nicht die Rechte irgend- eines anderen Users.) Die folgenden Konfigurationsfiles werden von ./KONFIGURIEREN_CD im Directory ./conf erzeugt. (DVD Konfigurationsfiles sind weiter unten aufgelistet) Diese Adresse kann ueberstimmt werden durch den Inhalt des Files $(scdbackup -where)/scdbackup_conf_dir bzw. durch die Variable SCDBACKUP_CONF_DIR . Die aktuelle Adresse erfragt man mit scdbackup -where conf Jeder der Files *_value kann durch eine Shellvariable ueberstimmt werden. Diese Variable heisst wie der Fileanfang, wird jedoch grossgeschrieben. Beachten Sie jedoch, dass eine leere Variable nichts ueberstimmt. Beispiel: Files scdbackup_scsi_adr_value , scdbackup_speed_value , scdbackup_buffer_value ueberstimmen, um den grausam schnellen IDE-Rekorder zu benutzen, der mein System mit Filebuffer (auch IDE) uebel ruckeln laesst. export SCDBACKUP_SCSI_ADR="1,0,0" export SCDBACKUP_SPEED="12" export SCDBACKUP_BUFFER="-" scdbackup_scsi_adr_value die Adresse des CD Recorders (zB. 3,0 , ATA:1,0,0 , /dev/hdc) scdbackup_speed_value Schreibgeschwindigkeit (zB. 12) scdbackup_blanken_value Legt fest, ob die CD vor dem Schreiben geloescht werden soll : "0"=nein , "1"=ja (wie "fast") , "fast"=schnell , "all"=die ganze CD (langsam) "fast" und "all" werden als blank= Option an das Brennprogramm uebergeben. Ausserdem kann bestellt werden, dass blank= nicht als separater Lauf ausgefuehrt wird sondern im Schreiblauf stattfindet: "inline_all" , "inline_fast" Der Text kann auch alle drei Argumente fuer den Lauf von scdbackup_blank enthalten.(zB. all - CD-RW) scdbackup_use_prog_value fuer KONFIGURIEREN_CD, um sich an die Antwort auf die Frage zu erinnern, die die folgenden vier Files beeinflusst: scdbackup_mkisofs_value Name und Optionen des ISO 9660 Formatierprogramms. (zB. mkisofs -J -l -L -R) scdbackup_path_list_value enthaelt ggf. Optionen fuer cd_backup_planer, um das ISO Formatierprogramm mit Option -path-list auszufuehrt. U.a. steht hier der Filename fuer die temporare Adress liste. Der Text "mkisofs_path_list" wird beim Lesen dieses Files zu "mkisofs_path_list"_$EUID und der Text "=EUID=" wird zu $EUID. (Nur beim File, nicht bei Variable $SCDDBACKUP_PATH_LIST) scdbackup_iso_filetypes_value enthaelt ggf. Optionen fuer cd_backup_planer, die es erlauben, andere Filetypen als "data" und "dir" an das ISO Formatierprogramm zu uebergeben. Aeltere Versionen von mkisofs vertragen keine symbolischen Links. scdbackup_cdrecord_value Name und Optionen des Programms, das CDs schreibt. (zB. cdrecord -v ) scdbackup_cdrecord_opt_value weitere Optionen des Programms, das CDs schreibt, die nur beim Datenschreiben aber nicht beim Loeschen angewendet werden. (zB. -fs=8m -eject) scdbackup_split_dir_value fuer KONFIGURIEREN_CD, um sich an die Antwort auf die Frage zu erinnern, die die folgenden Files beeinflusst: scdbackup_large_file_iso_value Optionen fuer cd_backup_planer, die bei ISO Format die Behandlung grosser Files steuern. Der Text "=EUID=" wird beim Lesen dieses Files durch die Userid Nummer ersetzt. (Nur beim File, nicht bei Variable $SCDBACKUP_LARGE_FILE_ISO) scdbackup_large_file_afio_value Wie scdbackup_large_file_iso_value bei afio Format. Wirkt nicht auf scdbackup_sys. sdvbackup_afio_value Name eines zu afio aufruf-kompatiblen Programms und seiner Optionen fuer den Schreibmodus. Das Programm muss die Option "-Z" fuer Kompression erkennen und sein Ergebnis bei "-" als Zielfile auf die Standard- ausgabe leiten. Es muss die Adressen seiner Eingabe- files an der Standardeingabe ablesen. (-> man afio) Grundeinstellung : afio -o scdbackup_buffer_input_value fuer KONFIGURIEREN_CD, um sich an die Antwort auf die Frage zu erinnern, die die folgenden beiden File beeinflusst: scdbackup_buffer_value Name des Pufferfiles oder - (zB. /buf/isofs) scdbackup_afio_compress_value Kompression bei afio-Format direkt steuern : 0 = nein , 1 = ja , - = nur wenn echter Pufferfile (Default ist - ) scdbackup_z_cap_value geschaetzte Kapazitaet fuer komprimierte afio-Archive. Wenn leer oder 0, dann wird das Skript cd_dir_afiosize verwendet. scdbackup_sys_excl_value enthaelt eine Liste von Directories, die vom Systembackup ausgeschlossen sein sollen. scdbackup_t_lock_value Das Sperrverfahren anwenden. Fileinhalt : 1 = ja, Sperrfiles im scdbackup Directory speichern /pfad = ja, Sperrfiles in /pfad speichern (zB. /tmp) alle anderen Fileinhalte bewirken kein Sperren. scdbackup_bin_sbin_root_value Oberdirectory fuer Installation der Kommandos scdbackup_is_configured zeigt durch Inhalt "yes" an, dass scdbackup erfolgreich fuer DVD konfiguriert wurde. Weitere Konfigurationsfiles koennen zwar nicht mit den Eingaben zu ./KONFIGURIEREN_CD eingestellt werden. Man kann sie aber aendern oder mit Variablen ueberstimmen. scdbackup_use_shell_value enthaelt die Adresse eines bash kompatiblen Interpreters. scdbackup_media_cap_value maximale Kapazitaet eines CD-Mediums bei afio. Wenn ein afio-Archiv diese Groesse uebersteigt, dann wird es auf der ersten CD unterbrochen und auf einer weiteren fortgesetzt. Von KONFIGURIEREN_CD zunaechst auf 650m gesetzt. Diese Groesse steuert auch Blankingoption "shred". scdbackup_max_size_value Stueckgroesse wenn Option -max_size fehlt. (640m wenn auch dieser File und Variable fehlen) scdbackup_blank_speed_value Geschwindigkeit beim Blanken von CD-RWs (zB. 4) fuer den Fall, das die von der Schreibgeschwindig- keit abweichen soll. (Dieser File wird nicht von KONFIGURIEREN_CD erzeugt und ist normalerweise auch nicht noetig) scdbackup_make_checksum_value enthaelt Optionen fuer die Berechnung von MD5 Pruefsummen. Der File wird beim ersten Lauf von KONFIGURIEREN_CD erzeugt. Man kann seinen Inhalt auf ein einzelnes "-" aendern oder leermachen, um die Berechnung zu verhindern. scdbackup_checksum_list_value Adresse des Files mit den Pruefsummeneintraegen. (default : .../scdbackup-0.9.2/logs/backup_log ) scdbackup_verify_adr_value Default fuer datenquelle bei scdbackup_verify (default : /dev/cdrom ) scdbackup_keep_buffer_value wenn dieser File den Text "1" enthaelt, wird ein eventueller Pufferfile nicht geloescht und erst durch das naechste Backupstueck ueberschrieben. scdbackup_options_with_iso_value zusaetzliche Optionen fuer cd_backup_planer die auf alle Backuplaeufe wirken sollen, die ISO 9660 Filesysteme produzieren. scdbackup_options_with_afio_value zusaetzliche Optionen fuer cd_backup_planer die auf alle Backuplaeufe wirken sollen, die afio-Archive produzieren. Die folgenden Konfigurationsfiles werden von ./KONFIGURIEREN_DVD im Directory ./conf erzeugt. (CD Konfigurationsfiles sind weiter oben aufgelistet) Diese Adresse kann ueberstimmt werden durch den Inhalt des Files $(scdbackup -where)/scdbackup_conf_dir Wie bei den Konfigurationsfiles des CD Subsystems kann jeder File *_value durch eine Shellvariable ueberstimmt werden. ZB: Ueberstimmen von sdvdbackup_dev_adr_value und sdvdbackup_speed_value : export SDVDBACKUP_SCSI_ADR="/dev/sr2" export SDVDBACKUP_SPEED="1" sdvdbackup_dev_adr_value Devicefile-Adresse des DVD Brenners (zB. /dev/dvd) Wird ggf. fuer growisofs benutzt. sdvdbackup_scsi_adr_value die SCSI-Adresse des CD Recorders (zB. 3,0) Wird ggf. fuer cdrecord, wodim oder cdrskin benutzt. sdvdbackup_speed_value Brenngeschwindigkeit (zB. any, 1) scdbackup_blanken_value Legt fest, ob die DVD vor dem Schreiben geloescht werden soll : "0"=nein , "1"=ja (wie "fast") , oder auch diese Optionen fuer sdvdbackup_blank : "fast"=schnell , "all"=die ganze CD (langsam) Der Text kann auch alle drei Argumente fuer den Lauf von scdbackup_blank enthalten. sdvdbackup_use_prog_value fuer KONFIGURIEREN_DVD, um sich an die Antwort auf die Frage zu erinnern, die die folgenden beiden Files beeinflusst: sdvdbackup_mkisofs_value Name und Optionen des ISO 9660 Formatierprogramms. (zB. mkisofs -J -l -L -R) sdvdbackup_path_list_value enthaelt ggf. Optionen fuer cd_backup_planer, um das ISO Formatierprogramm mit Option -path-list auszufuehrt. U.a. steht hier der Filename fuer die temporare Adress liste. Der Text "mkisofs_path_list" wird beim Lesen dieses Files zu "mkisofs_path_list"_$EUID und der Text "=EUID=" wird zu $EUID. (Nur beim File, nicht bei Variable $SCDDBACKUP_PATH_LIST) sdvdbackup_iso_filetypes_value enthaelt ggf. Optionen fuer cd_backup_planer, die es erlauben, andere Filetypen als "data" und "dir" an das ISO Formatierprogramm zu uebergeben. Aeltere Versionen von mkisofs vertragen keine symbolischen Links. sdvdbackup_cdrecord_value Name and Optionen des Programms das DVDs schreibt. (zB. /u/test/scdbackup-0.9.2/scripts/growisofs_wrapper ) sdvdbackup_cdrecord_opt_value weitere Optionen des Programms, das DVDs schreibt (zB. -final_eject bufsize=64m) sdvdbackup_stream_rec_value Option zur Kontrolle des langsamen Gegenlesens bei DVD-RAM, BD-RE und formatierten BD-R. Sie wird nur verwendet, wenn der DVD Schreibprogrammname mit 'cdrskin ' oder 'xorriso -as cdrecord' beginnt. sdvdbackup_split_dir_value fuer KONFIGURIEREN_DVD, um sich an die Antwort auf die Frage zu erinnern, die die folgenden zwei Files beeinflusst: sdvdbackup_large_file_iso_value Optionen fuer cd_backup_planer, die bei ISO Format die Behandlung grosser Files steuern. Der Text "=EUID=" wird beim Lesen dieses Files durch die Userid Nummer ersetzt. (Nur beim File, nicht bei Variable $SDVDBACKUP_LARGE_FILE_ISO) sdvdbackup_large_file_afio_value Wie sdvdbackup_large_file_iso_value bei afio Format. Wirkt nicht auf sdvdbackup_sys. sdvbackup_afio_value Name eines zu afio aufruf-kompatiblen Programms und seiner Optionen fuer den Schreibmodus. Grundeinstellung : afio -o (Siehe oben scdbackup_afio_value wegen Details) sdvdbackup_buffer_input_value fuer KONFIGURIEREN_DVD, um sich an die Antwort auf die Frage zu erinnern, die den folgenden File beeinflusst: sdvdbackup_buffer_value Name des Pufferfiles oder - (zB. /buf/isofs_dvd) sdvdbackup_afio_compress_value Kompression bei afio-Format direkt steuern : 0 = nein , 1 = ja , - = nur wenn echter Pufferfile (Default ist - ) sdvdbackup_z_cap_value geschaetzte Kapazitaet fuer komprimierte afio-Archive. Wenn leer oder 0, dann wird das Skript cd_dir_afiosize verwendet. sdvdbackup_sys_excl_value enthaelt eine Liste von Directories, die vom Systembackup ausgeschlossen sein sollen. sdvdbackup_t_lock_value Das Sperrverfahren anwenden. Fileinhalt : 1 = ja, Sperrfiles im scdbackup Directory speichern /pfad = ja, Sperrfiles in /pfad speichern (zB. /tmp) alle anderen Fileinhalte bewirken kein Sperren. sdvdbackup_bin_sbin_root_value Oberdirectory fuer Installation der Kommandos sdvdbackup_is_configured zeigt durch Inhalt "yes" an, dass scdbackup erfolgreich fuer DVD konfiguriert wurde. Weitere Konfigurationsfiles koennen zwar nicht mit den Eingaben zu ./KONFIGURIEREN_DVD eingestellt werden. Man kann sie aber aendern oder mit Variablen ueberstimmen. sdvdbackup_use_shell_value enthaelt die Adresse eines bash kompatiblen Interpreters. sdvdbackup_media_cap_value maximale Kapazitaet eines DVD Mediums bei afio. Wenn ein afio-Archiv diese Groesse uebersteigt, dann wird es auf der ersten CD unterbrochen und auf einer weiteren fortgesetzt. Von KONFIGURIEREN_DVD zunaechst auf "4480m" gesetzt. Diese Groesse steuert auch das Loeschen von DVD. sdvdbackup_max_size_value Stueckgroesse wenn Option -max_size fehlt. (4250m wenn auch dieser File und Variable fehlen) sdvdbackup_make_checksum_value enthaelt Optionen fuer die Berechnung von MD5 Pruefsummen. Der File wird beim ersten Lauf von KONFIGURIEREN_DVD erzeugt. Man kann seinen Inhalt auf ein einzelnes "-" aendern oder leermachen, um die Berechnung zu verhindern. sdvdbackup_checksum_list_value Adresse des Files mit den Pruefsummeneintraegen (default : .../scdbackup-0.9.2/logs/backup_dvd_log ) sdvdbackup_verify_adr_value Default fuer datenquelle bei sdvdbackup_verify (wenn File fehlt : dvdbackup_dev_adr_value) sdvdbackup_keep_buffer_value wenn dieser File den Text "1" enthaelt, wird ein eventueller Pufferfile nicht geloescht und erst durch das naechste Backupstueck ueberschrieben. sdvdbackup_options_with_iso_value zusaetzliche Optionen fuer cd_backup_planer die auf alle Backuplaeufe wirken sollen, die ISO 9660 Filesysteme produzieren. sdvdbackup_options_with_afio_value zusaetzliche Optionen fuer cd_backup_planer die auf alle Backuplaeufe wirken sollen, die afio-Archive produzieren. Der folgende File kann von Hand erzeugt werden, bevor man ./KONFIGURIEREN_DVD ausfuehrt : sdvdbackup_use_prodvd_value wenn dieser File den Text "1" enthaelt, dann wird fuer cdrecord konfiguriert anstelle von growisofs. Dieser File speichert den Namen des Zugriffsschemas fuer ./SETZ_ZUGRIFF . Er wirkt sowohl auf CD als auch auf DVD Zugriffsrechte : scdbackup_set_permissions_value einer der Namen, die in Paragraph "Zugriffsrechte" erwaehnt werden. Die Files zur Umleitung der Directories, die bei Anwendung von scdbackup w-Rechte brauchen, wirken auf beides CD und DVD : scdbackup_tmp_dir_value kann die Adresse eines Directory enthalten, die anstelle von ./tmp der scdbackup-Installation verwendet wird. scdbackup_logs_dir_value kann die Adresse eines Directory enthalten, die anstelle von ./logs verwendet wird. Die Umleitung von ./conf, ./tmp oder ./logs wird nur fuer Situationen empfohlen bei denen scdbackup in einem schreibgeschuetzten Filesystem installiert ist. Dann kann man so die Directories auslagern, in denen das Schreiben von Daten moeglich sein soll. Andere (Experten-)Anwendungen: gemeinsame Nutzung der logs durch mehrere scdbackup-Installationen des selben Users, Einrichten einer FHS-konformen Installation (die Kombination von FHS und scdbackup ist nur sicher, wenn sie ausschliesslich vom Superuser benutzt wird !). Man kann die effektive Konfiguration einer scdbackup-Umgebung mit den Kommandos scdbackup -show_configuration | less sdvdbackup -show_configuration | less anzeigen lassen. Die Schreibskripte scripts/cd_backup_kommando , scripts/cd_afio_kommando und scripts/cd_pipe_kommando erlauben den Aufruf von drei Skripten bzw. Programmen. Wenn im Directory ./conf unter einem der folgenden Filenamen ausfuehrbarer Code bereitgestellt ist, dann wird dieser bei den genannten Gelegenheiten gestartet. Jedesmal werden zumindest die folgenden acht Argumente uebergeben : $1 Adresse des Pufferfiles ("-" oder "" wenn ohne Puffer) $2 SCSI-Adresse, die von cdrecord benutzt wird oder Devicefile-Adresse, die von growisofs benutzt wird $3 Aufrufende Kommandofamilie ("iso9660"=scdbackup, "afio"=scdbackup_afio) $4 Teilstuecknummer $5 Gesamtzahl der Teilstuecke $6 scdbackup Installationsdirectory $7 Verwendetes cdrecord Programm (meist mit Option -v) (enthaelt z.B. .../growisofs_wrapper wenn DVD gebrannt wird) $8 Verwendetes Formatierungsprogramm (meist mit mehreren Optionen) Diese Programmnamen sind vorbereitet : conf/volume_prompt_script laeuft bevor der User Gelegenheit bekommt, Enter zu druecken. conf/volume_preburn_script nachdem das evtl. Rekorder Lock aufgefrischt wurde und bevor der evtl. Blanklauf stattfindet. conf/volume_afterburn_script nachdem der Lauf des Brennprogramms endet und bevor der evtl. Pufferfile geloescht wird. Dieses Skript erhaelt zusaetzliche Argumente : $9 Adresse der evtl. Pruefsummenliste ${10} Recordname des geschriebenen Records in dieser Liste ${11} Zeitmarke des Records ${12} Groessenangabe ${13} Pruefsumme (Aberglaube bringt Unglueck. U.Eco) Pruefen Sie, ob Ihre Shell ${10} auswerten kann oder benutzen Sie shift um auf die zweistelligen Nummern Zugriff zu bekommen (nachdem alle benoetigten einstelligen Parameter kopiert wurden). conf/volume_abortedburn_script laeuft anstelle von volume_afterburn_script , wenn das Brennprogramm einen Fehlschlag anzeigt und der ganze Backuplauf abgebrochen wird. Es koennen auch spezialisierte Skripte fuer einen bestimmten Typ von Datentragern bereitgelegt sein. Wenn beide existieren - das allgemeine und das spezialisierte Skript - dann wird zuerst dass allgemeine und dann das spezialisierte aufgerufen. Beide erhalten die selben Argumente. Spezialisiert fuer CD : conf/volume_prompt_script_cd conf/volume_preburn_script_cd conf/volume_afterburn_script_cd conf/volume_abortedburn_script_cd Fuer DVD : conf/volume_prompt_script_dvd conf/volume_preburn_script_dvd conf/volume_afterburn_script_dvd conf/volume_abortedburn_script_dvd Beispiel : Hier wird ein Backup nicht auf Datentraeger sondern in eine Reihe von Files auf der Festplatte geschrieben. Zunaechst das Schreibprogramm, das ein Backupstueck schreibt export SCDBACKUP_CDRECORD="$(scdbackup -where scripts)/pipe_data_to /home/archiv_dir/naechstes_stueck" Ein Skript, das nach dem Schreibvorgang den File geeignet umbenennt. Hier entsteht ein Name wie zB. "A50922.132751_stueck_1_7" echo '#!/bin/sh' > $(scdbackup -where conf)/volume_afterburn_script echo 'mv /home/archiv_dir/naechstes_stueck /home/archiv_dir/"${11}"_stueck_"$4"_"$5"' >> $(scdbackup -where conf)/volume_afterburn_script chmod u+x $(scdbackup -where conf)/volume_afterburn_script Nun laesst man einen Backup laufen, der nicht nach Datentragern ruft yes | scdbackup_afio -max_size 1g /opt /home und macht normalerweise danach wieder das Skript weg rm $(scdbackup -where conf)/volume_afterburn_script unset SCDBACKUP_CDRECORD Startfiles fuer das Such- und Rueckspeicherprogramm Die Kommandos scdbackup_askme und sdvdbackup_askme fuehren ggf. die Zeilen ihres Startfiles als Optionen aus, bevor die Argumente und spaeter die Dialogeingaben ausgefuehrt werden. Der Startfile sollte, falls vorhanden, lesbar sein aber besser nicht ausfuehrbar. Jede einzelne Zeile wird als Option ausgefuehrt. Weil das so frueh geschieht, werden diese Optionen in Kraft sein, wenn die Infoquelle gelesen wird. Leere Zeilen und solche, die mit '#' beginnen werden ignoriert. Es gibt keine Moeglichkeit die Infoquelle im Startfile festzulegen. Sie muss immer als erstes Argument des Kommandos angegeben werden. conf/scdbackup_askme_rc Wird von Kommando scdbackup_askme gelesen conf/sdvdbackup_askme_rc Wird von Kommando sdvdbackup_askme gelesen ----------------------------------------------------------------------------- Anhang SCHAFFER : Alle deutschsprachigen Skripte werden von mir aus den englischsprachigen Skripten (siehe README) mit Hilfe des Skriptes aux/translator_german erzeugt. Das geschieht beim Verpacken auf meinem Rechner und nicht beim Auspacken und Konfigurieren. Die Kommandos verwenden als zentralen Bestandteil das Programm bin/cd_backup_planer, das eine Liste von Directories in Stuecke aufspaltet, von denen jedes einzelne auf eine CD (oder ein anderes Medium) passt. Es erzeugt ein Skript mit Backupkommandos. Die Listen von Files und Directories werden anhand ihrer Gesamtgroessen und der Anzahl der zu erwaehnenden Namen aufgeteilt. Uebergrosse Directories werden automatisch aufgespalten. Uebergrosse Files werden weggelassen, sofern bei der Konfiguration kein "Pufferdirectory fuer Stuecke grosser Files" angegeben wurde. Das Programm kann auch ein Shellskript erzeugen, das verschiedene Informationen ueber den Backup ausgeben kann. Dieses Skript wird dann in jedes einzelne Teilstueck des Backups aufgenommen. Lesen Sie den Text doc/cd_backup_planer_hilfe oder fuehren Sie aus $(scdbackup -where bin)/cd_backup_planer -hilfe | less um eine Beschreibung des Programms und seiner Optionen zu bekommen. Die Liste der zu kopierenden Files wird auf Namenskollisionen im ISO-Filesystem geprueft. Wenn zwei Files oder Directories gefunden werden, die den gleichen Namen bekommen wurden, wird eines von beiden umgenannt. Ausserdem werden die Files auf problematische Namen und verweigerte Lese- rechte geprueft. Problematische Namen werden mkisofs ausdruecklich genannt. Unlesbare Files koennen vom Backup ausgeschlossen werden. Die Kommandoskripte des scdbackup-Systems (zB. /usr/bin/scdbackup) finden lediglich den Installationsort des scdbackup-Systems heraus und starten dann dort ein Verteilerskript, das die Sprachversion waehlt : scdbackup_switcher findet die eingestellte Sprache heraus. Es meldet das Kommando, die scdbackup-Version sowie die Sprache auf stderr. Dann startet es eines der Arbeitsskripte. Wenn das einzige Argument des Kommandos eines der folgenden ist, gibt scdbackup_switcher eine Antwort auf stdout und startet das Arbeitsskript nicht : -version "scdbackup" versionscode zeitmarke -which Adresse des effektiven Arbeitsskripts -where Adresse des effektiven scdbackup Installationsdirectory. Ein optionales zweites Argument kann die Adresse eines scdbackup-Unterdirectory abfragen. Wie: bin conf doc logs scripts tmp (siehe auch die Anwendung in diesem Text) -show_configuration eine Liste von Variablennamen und Inhalten. Siehe Appendix KONFIGURATION. -show_configuration_exported Liste von export-Kommandos fuer die Shell (mit Anfuehrungszeichen). Die Skripte verwenden zwei gemeinsame Stuecke von Shellcode, welche die Konfiguration einlesen : cd_get_variables liest die Variablen, die mit KONFIGURIEREN_CD festgelegt wurden. (Muss als inline Kommando mit fuehrendem Punkt ausgefuehrt werden, wenn es wirken soll.) dvd_get_variables liest die Variablen, die mit KONFIGURIEREN_DVD bestimmt wurden und benutzt sie, um in cd_get_variables die CD-Einstellungen zu ueberstimmen. Die folgenden Files liegen allesamt im Directory ./scripts . scdbackup_switcher wird mit dem Start eines dieser Skripte beauftragt. backup_iso_de plant Backups im ISO 9660 Format und fuehrt sie aus. (Wird gestartet von scdbackup, scdbackup_home, sdvdbackup, sdvdbackup_home) backup_afio_de plant Backups im Archivformat und fuehrt sie aus. (scdbackup_afio, scdbackup_sys, sdvdbackup_afio, sdvdbackup_sys) blank_de macht einen einzelnen Datentraeger schreibbereit oder ueberschreibt ihn mit Zufallsdaten. (scdbackup_blank, sdvdbackup_blank) verify_de prueft einen einzelnen Datentraeger gegen aufgezeichnete Pruefsummen. (scdbackup_verify, sdvdbackup_verify) askme_de startet das binaere Auskunftsprogramm. (scdbackup_askme, sdvdbackup_askme) clear_de hebt alle eventuell bestehenden Reservierungen einer scdbackup-Installation auf. show_configuration fuehrt Option -show_configuration aus. (siehe oben) Gemeinsame Codestuecke, die die Kommandoskripte schlanker machen : behandle_existierendes_skript fuehrt Optionen wie -resume aus und kuemmert sich allgemein um die Behandlung von Backupskripten, die vom vorherigen Lauf stammen. behandle_planer_fehlschlag laeuft, wenn der Lauf von cd_backup_planer fehlgeschlagen ist. installiere_backup_skript installiert das neue Backupskript und bereitet es auf die Ausfuehrung vor. Die Groessenbestimmung ist entscheidend fuer die Verteilung der Backupdaten auf die Medien. Neben der eingebauten Methode -internal und dem Befehl du -sk koennen auch diese zwei Skripte zum Einsatz kommen : cd_dir_isosize Nutzung vermeiden, verbraucht u.U gewaltigen Speicher : kann anstelle von du -sk genutzt werden, um die Groesse genauer zu schaetzen, die ein Directory im ISO 9660 Filesystem haben wird. cd_dir_afiosize kann verwendet werden, um die Groesse eines (evtl. komprimierten) afio-Archivs zu messen, das aus einem bestimmten Directory ensteht. Sehr langsam, weil das Archiv wirklich erzeugt, ausgezaehlt und weggeworfen wird. Einige Skripte, die das Schreiben auf (Pseudo-)Datentraeger erledigen: cd_backup_kommando kann ein einzelnes Backupstueck als ISO 9660 Filesystem auf CD oder DVD schreiben. cd_afio_kommando kann ein einzelnes Backupstueck als afio-Archiv auf CD schreiben. Wenn ein Pufferfile bei KONFIGURIEREN eingestellt wurde, dann enthalten die Archive kompri- mierte Files (afio option Z). Fuer CDs, die ohne Zwischenfile geschrieben werden, eignent sich das nicht, weil die Ausgaberate eine Kompressionsprogramms sehr gering sein kann (wenn die Kommpressionsrate hoch ist). cd_pipe_command schreibt stdin ungeaendert auf eine einzelne CD oder DVD. Die Daten muessen also bereits geeignet formatiert sein. Wird benutzt von scdbackup -pipe_to_media . Wenn das erste Argument -multi_volume lautet, dann wird der Datenstrom wie bei scdbackup_afio bei Bedarf auf mehrere Datentraeger verteilt. Das eignet sich fuer uebergrosse Archive oder Dumps. cd_blank_kommando macht eine CD-RW wieder beschreibbar und startet gegebenenfalls schredder_kommando. dvd_blank_kommando warnt vor schredder_kommando und startet es fuer DVD. schredder_kommando ueberschreibt einen Datentrager mit Zufallsbytes. afio_sencrypt ein Skript, das ein verschluesseltes und ggf. gzip- komprimiertes afio-Archiv erzeugt. Die Verschluesselung erledigt das Programm sencrypt. Siehe http://scdbackup.webframe.org/README_sencrypt und auch Anhang CRYPTO weiter unten. Mit dem ersten Argument kann einer von drei Modi ausgewaehlt werden. Je nach Modus wird noch ein zweites Argument erwartet : -each_file_by schluessel_file afio-traditionelle Behandlung jedes einzelnen Files ergibt ein hartgesottenes Archiv, ist aber langsam. Der Schluesselsatz muss in einem File gespeichert sein, dessen Adresse als zweites Argument erwartet wird. Falls Kompression bestellt ist, bleiben die ersten 10 Byte jedes komprimierten Files unver- schluesselt, um den Schluessel nicht durch die wohlbekannten Fileanfaenge zu verraten. Archiv auspacken (unkomprimiert) : afio -i -P 'sencrypt' -Q '-d' \ -Q '-f' -Q "$schluessel_file" -Z /dev/cdrom Archiv auspacken (komprimiert) : afio -i -P 'sencrypt' -Q '-d' -Q '-g' \ -Q '-f' -Q "$schluessel_file" -Z /dev/cdrom -whole_archive_by schluessel_file Verschluesselung des afio-Archivs als Ganzes. Auch hier wird ein Schluesselfile erwartet. Bei unkomprimierten Archiven bleiben die ersten 322 Bytes des Archivs unverschluesselt. Bei komprimierten sind es 162. Archiv auspacken (unkomprimiert) : sencrypt -d -s 322 -f "$schluessel_file" \ &2 ; read dummy dd if=/dev/hdc bs=2048 count=2293760 ) | gunzip | star -t -v Die Zahl 2293760 fuer DVD ergibt sich aus der Ueberlaufgroesse von 4480m indem man sie durch 2048 teilt. Fuer CDs (650m) ergibt sich so 332800. Mit einer einzelnen DVD ist das Leben einfacher : gunzip 32 Bit) record_l eine Dezimalzahl, die die Laenge von pruef_rec angibt. pruef_rec ein Pruefsummenrecord wie oben beschrieben, aber ohne Zeilenende. rec_md5 die MD5 Pruefsumme von pruef_rec. Um die verschiedenen Suchoptionen anzuwaehlen, verstehen die Kommandos s*backup_verify die folgenden Optionen, die verwendet werden koennen, wie es fuer -auto im Hilfetext beschrieben ist : -auto die gesamte Pruefsummenliste lesen und auch im zu verifizierenden Bytestrom nach Pruefsummenmarke suchen. -auto_end wie -auto. Endet nach erstem Treffer oder glaubwuerdiger Marke. -scan im Bytestrom suchen aber nicht nicht die Records aus der Pruefsummenliste einlesen. -scan_end wie -scan. Endet bei der ersten glaubwuerdigen Pruefsummenmarke egal ob sie den Bytestrom bestaetigt oder nicht. -scan_print wie -scan. Gibt Liste der gefundenen glaubwuerdigen Marken aus. -sorted wie -auto, jedoch ohne Suche nach Pruefsummenmarken. -sorted_end wie -sorted mit Ende nach erstem Treffer. Damit Pruefsummenmarken erkannt werden, muessen sie unmittelbar auf die Daten folgen, die sie beschreiben. Diese Einschraenkung kommt von der Implementierung des Scanners und nicht von der Definition des Formats. Pruefsummenmarken werden bei cd_backup_planer durch die Option -filter_checksum_padsize bestellt und von cd_backup_planer mit Option -scan_for_checksum waehrend des Verifizierens (-search_md5) im Bytestrom gesucht. Die Konfiguration und die Pruefkommandos nutzen diese Optionen automatisch. Wenn das Programm xorriso die ISO 9660 Formatierung uebernimmt, und es modern genug ist, um die Option -md5 anzubieten, und wenn die Grundeinstellung fuer Pruefsummen ungeaendert wirksam ist, dann wird kein cd_backup_planer Filter benutzt. Vielmehr wird xorriso den Pruefsummenrecord berechnen, ihn als Pruefsummenmarke an seine Ausgabe anhaengen und auch in die Pruefsummenliste auf der Platte schreiben. Gerade so, wie es der Filter taete. Blockpruefsummenlisten An eine Pruefsummenmarke kann eine Blockpruefsummenliste angehaengt sein, die direkt hinter dem Zeilenende ihrer Pruefsummenmarke beginnen muss. Sie besteht aus den folgenden Zeilen und einem Binaerteil, der drucker- und terminalfeindliche Bytes enthalten kann. Ein Lauf von bin/cd_backup_planer -filter_checksum_blocksize 64k -filter_md5 filterte einen Datenstrom von 229208064 bytes und ergab folgende Liste : scdbackup checksum block list v0.1 blocksize=65536 complete_blocks=3497 remainder=28672 [3498 binaere Blockpruefsummen zu je 16 Byte] [ein abschliessender Zeilentrenner nach den 3498*16 Bytes] md5_of_list=42eae294fe0a2e96c924b363e561c85a chained tag follows ... Meta-pruefsummenmarken und -blockpruefsummenlisten ... end of list Es kann durchaus sein, dass das Stueck ab einschliesslich "chained tag follows" bis vor "end of list" fehlt. Die Klartextzeilen haben Zeilentrennerzeichen an den Enden. Die Anzahl der Pruefsummen ergibt sich aus Zeile complete_blocks. Wenn remainder nicht 0 ist, kommt -so wie hier- noch eine fuer den letzten unvollstaendigen Block hinzu. Die Pruefsumme md5_of_list wird aus dem Listeninhalt ab "scdbackup ch..." bis vor den abschliessenZeilentrenner der Binaerdaten berechnet. Sie bestaetigt ggf. dass die Blockpruefsummenliste selbst korrekt ist. Wenn auf md5_of_list die Zeile "chained tag follows" folgt, dann ist eine weitere Pruefsummenmarke und eine Blockpruefsummenliste angehaengt, die die vorherige Marke und Liste abdeckt. Man kann sie zur Wiederherstellung der vorherigen Liste verwenden. Wenn aber md5_of_list die Blockliste bestaetigt, sind die folgenden Daten nicht von Interesse. Endet die Liste mit "end of list" anstelle von "chained tag follows", dann ist sie nicht mit einer weiteren Liste abgesichert. Mehrfachkopien Ein Backupstueck kann vervielfaeltigt werden, um mehrere Kopien auf dem selben Datentraeger speichern zu koennen (siehe unten Anhang REDUNDANZ). Die vervielfaeltigten Backupstuecken werden jeweils durch eine einfache Marke getrennt : version_id pos_im_strom \n version_id ist zZt. "scdbackup volume multiplication mark v0.1" pos_im_strom ist eine Dezimalzahl, die mit der Position des Anfangs von version_id im Datenstrom uebereinstimmen muss. (u.U. > 32 Bit) Das Leerzeichen und der Zeilentrenner am Ende sind wichtig. Permutierte Backupstuecke Ein Backupstueck kann permutiert werden, um potentiellen systematischen Fehlern des Datentraegers andere Blocks auszusetzen als es bei normaler Reihenfolge der Daten der Fall waere. (Siehe unten Anhang REDUNDANZ) Solche permutierte Backupstuecke sind unbenutzbar bis sie wieder in die urspruengliche Reihenfolge zurueckvertauscht werden. Ein Lauf von bin/cd_backup_planer -permute_blocks 4 $puffer_file 64k 0 0 mit einem $puffer_file von 105182569 Bytes produziert diesen Header scdbackup block permutation header v0.1 blocksize=65536 complete_blocks=1604 remainder=62825 permutation_key=4 datastart=1 Er besagt, dass die Blockgroesse 64k ist. Die Gesamtgroesse ist 1604*64k+62825 Bytes. Vertauschungsregel ist Nummer 4 (vertausche erste und zweite Haelfte des Backupstuecks und vereinige dann beide im Reissverschlussverfahren). datastart=1 teilt mit, dass die Datenblocks bei Nummer 1 (also Byte 64k) beginnen. Die Umkehrvertauschungen fuer ein Lesemedium mit wahlfreiem Zugriff und die sequentielle Ausgabe des Ergebnisses sind durch folgende C-Funktion definiert : #define _FILE_OFFSET_BITS=64 #define _LARGEFILE_SOURCE int Unpermute(blocksize,complete_blocks,remainder,datastart,permutation_key, fp_in,fp_out) /* Parameter, die vom Fileheader oder von einem bedruckten Papier stammen */ double blocksize,complete_blocks,remainder,datastart; int permutation_key; /* Die beiden Filepointer duerfen nicht auf das gleiche Fileobjekt verweisen */ /* fp_in ist fuer wahlfreies Lesen, fp_out ist fuer sequentielles Schreiben */ FILE *fp_in,*fp_out; { double x,idx,n,q1,q2,q3,to_read; int mode,interlaced,ret; /* Passen Sie diesen Wert an Ihre Beduerfnisse an (oder schreiben Sie eine Lese-Schreib-Schleife, die keinen grossen Puffer braucht) */ #define Unpermute_max_blocksizE 1024*1024 char buffer[Unpermute_max_blocksizE]; if(blocksize>Unpermute_max_blocksizE) return(0); /* Die Abfolge der der vertauschten Blocks wird in Viertel aufgeteilt */ /* 0 <= q1 <= q2 <= q3 <= n */ n= complete_blocks+(remainder>0); q2= floor(n/2.0); q1= floor(q2/2.0); q3= floor((q2+n)/2.0); /* Um den unvertauschten Ausgabestrom zu erzeugen, iteriert man ueber die Blockzahl */ for(x= 0.0; x0) to_read= remainder; else to_read= blocksize; ret= fseeko(fp_in,((off_t) blocksize)*((off_t) idx),SEEK_SET); if(ret<0) return(0); ret= fread(buffer,(size_t) to_read, (size_t) 1,fp_in); if(ret<=0) return(0); fwrite(buffer,(size_t) to_read, (size_t) 1,fp_out); if(ret<=0) return(0); } return(1); } Beachten Sie, dass Fliesskommavariablen vom Typ double etwa 50 Bit in der Mantisse haben. Das Verfahren ist also auf 1 Petablocks beschraenkt. Ich habe im Berechnungsteil fuer den Index diesen Datentyp gewaehlt, um maximale C-Portabilitaet zu erreichen. Wenn es keine 64-Bit-Adressierung per fseeko() und den Typ off_t geben sollte, muss man sich selbst einen Weg suchen, wie man die 31-Bit-Grenze von fseek() ueberwinden kann. xorriso Pruefsummen Wenn das Programm xorriso die ISO 9660 Formatierung uebernimmt, und es modern genug ist, um die Option -md5 anzubieten, dann wird es eigene Pruefsummen erzeugen. Der Superblock und Directorybaum erhalten je eine MD5 Summe. Schaeden an diesen beiden Datenbereichen werden von xorriso erkannt, wenn es nach -md5 "on" die Optionen -dev oder -indev ausfuehrt. Jeder Datenfile erhaelt eine eigene MD5 Summe. Wenn der Directorybaum erfolgreich geladen wurden, kann xorriso die Fileinhalte mit der Option -check_md5 verifizieren. ----------------------------------------------------------------------- Anhang REDUNDANZ Konzept redundanter Backups Erzeugung reparierbarer Backupstuecke Wiederherstellung beschaedigter reparierbarer Backupstuecke Wiederherstellung beschaedigter Blockpruefsummenlisten Permutierte Backupstuecke Reparaturfaehige Backupstuecke fuer Langzeitbackups Selbst wenn die Datentraeger nach dem Schreiben die Pruefung mit scdbackup_verify bestehen, koennen sie spaeter immer noch kaputt gehen. Wenn man einen Backup nach Jahren auslesen will, kann er sich als beschaedigt erweisen. Natuerlich sind die Daten auf einem voellig unlesbaren Datentraeger verloren. Im Falle eines teilweise unlesbaren Backups wird man sich aber Mittel wuenschen, die es erlauben, das Ausmass des Schadens zu bestimmen und ihn eventuell auch reparieren koennen. Um das zu erreichen, muss man schon bei der Herstellung des Backups die noetigen Massnahmen treffen. Der zusaetzliche Aufwand ist erheblich, sodass diese Vorkehrungen nicht standardmaessig von scdbackup getroffen werden. Obwohl scdbackup die noetigen Werkzeuge bereitstellt, um die Daten aus redundanten Backups zu bergen, sollte man auch den obigen Anhang VERIFIZIEREN ausdrucken und mit dem Backup lagern. Er enthaelt die Definitionen der verschiedenen Datenformate, die scdbackup bei redundanten Backups verwendet. AUFDRINGLICHE BELEHRUNG (tschulligung, das muss jetzt sein) : Wenn Sie sich wirklich auf die Reparierbarkeit Ihrer Backups verlassen muessen, dann *MUESSEN* Sie den gesamten hier beschrieben Ablauf durchtesten, ob er auch fuer Sie funktioniert. Das bedeutet, Sie muessen einen redundanten Backup herstellen, ein Backupstueck auf die Festplatte kopieren, cat /tmp/reparaturergebnis es dort beschaedigen (zB. mit $(scdbackup -where bin)/cd_backup_planer \ -write_to_file /tmp/reparaturergebnis 10m string "verfaelschter Inhalt" ) und dann versuchen, es mit den Wiederherstellungswerkzeugen und Ihren Backupdatentraegern zu reparieren. Also zum Beispiel $(scdbackup -where bin)/cd_backup_planer -process_blocklist \ mend /tmp/reparaturergebnis 0 /dev/cdrom /tmp/reparaturergebnis Sie muessen sich damit vertraut machen, solange der Notfall nur gespielt ist. Eine erfolgreiche Reparatur wird bestaetigt von : scdbackup_verify /tmp/reparaturergebnis -auto Konzept redundanter Backups Ein redundanter Backup besteht aus mehreren identischen Kopien jedes Backupstuecks und aus einer Blockpruefsummenliste, die an jede dieser Kopien angehaengt wird. Sie enthaelt MD5 Pruefsummen von Teilstuecken der Backupdaten. Solch eine Liste wird mit der Option -filter_checksum_blocksize bestellt und dann automatisch an das Backupstueck angehaengt. Eine Blockpruefsummenliste erlaubt es, mehrere teilweise beschaedigte Kopien eines Backupstuecks zu einer unbeschaedigten zu vereinigen. Weiter unten wird erklaert, wie man zu solchen Kopien kommt. Die genannte Option -filter_checksum_blocksize kann man in der Konfigurations- variablen SCDBACKUP_MAKE_CHECKSUM eintragen, die ueblicherweise eine Zeile wie "-filter_checksum_padsize 1 -filter_md5" enthaelt. Die folgenden Beispiele wurden mit dieser Einstellung ausgefuehrt : export SCDBACKUP_MAKE_CHECKSUM="-blocklist_fileadr $HOME/blocklist_dir/cd_ -filter_checksum_blocksize 64k -filter_md5" Natuerlich musste das Directory fuer die Listenfiles existieren : mkdir $HOME/blocklist_dir Dadurch wurde, wie ueblich, eine Pruefsummenmarke an das Backupstueck angehaengt. Nach der Marke kommt dann die Blockpruefsummenliste, die etwa 0,025 % der Groesse des Backupstuecks hat. Durch die Option -blocklist_fileadr wurde diese Liste auch als separater File $HOME/blocklist_dir/cd_1_1_A41123.194219_229208064 auf die Platte kopiert. Kopien dieser Blockliste auf der Platte sollte man an sicheren Orten lagern. Ihre Namen und Speicherorte sollten als gedruckte Liste den Backups beigefuegt werden. (Nur fuer den Fall, dass die Listen auf den Datentraegern des Backups unbrauchbar werden.) Wenn die Blockpruefsummenliste selbst mehr als einen Datenblock fuellt, dann wird auch ihr eine Pruefsummemarke und eine Blockpruefsummenliste angehaengt. Das wird solange wiederholt, bis die Listengroesse unter 1 Block sinkt. Bei Blockgroessen unter 1 kB ist diese Eigenschaft jedoch deaktiviert, um endloses Anhaengen zu vermeiden. Abgetrennte Blockpruefsummenlisten, die durch angehaengte Pruefdaten abgedeckt sind, koennen mit den Wiederherstellungswerkzeugen genau wie Backupstuecke behandelt werden. Es lohnt sich also, viele Kopien zu haben. Erzeugung reparierbarer Backupstuecke Um beschaedigte Backupstuecke wieder herzustellen, braucht man 2, besser 3 oder mehr ehemals identische Kopien der Backupstuecke. Je mehr Kopien man im Schadensfall hat, um so eher wird sich darunter von jedem Block ein unbeschaedigtes Exemplar finden. Bei der Erzeugung des Backups kann man mehrere identische Kopien mit Hilfe des Schreibskriptes scripts/mxn_wrapper_de herstellen. Es macht nicht nur Kopien auf mehrere Datentraeger sondern kann auch mehrere Kopien auf einen einzelnen Datentraeger schreiben. Dies geschieht ggf. durch einen Lauf von bin/cd_backup_planer mit der Option -multiply_volume . Die erste Kopie auf dem Datentraeger ist direkt verwendbar wie ein normales Backupstueck. Die weiteren Kopien kann man mit Option -extract_multiplied von cd_backup_planer bergen. Das Skript mxn_wrapper_de funktioniert nur mit einem scdbackup Pufferfile. Das Skript erwartet drei Gruppen von Argumenten, die durch zwei einzelne Punkte "." getrennt werden. Die ersten zwei Gruppen stellen mxn_wrapper_de ein und werden vom Anwender bereitgestellt. Die dritte Gruppe haengt scdbackup selbst an. Die erste Gruppe beschreibt den Datentraegertyp, die Vervielfaeltigung und eventuell auch eine Blockvertauschung des Backupstuecks : typ innere_cp medien_cp [zweitpuffer permutationskeys] . typ kann "CD" oder "DVD" sein. Er waehlt das scdbackup-Kommando aus, das per Option -pipe_to_media das Schreiben des Backupstuecks erledigt. innere_cp gibt die Anzahl der Kopien pro Datentraeger an. Man muss natuerlich die -max_size des Backups entsprechend kleiner waehlen, damit alle bestellten Kopien auch auf dem Datentraeger Platz finden. medien_cp gibt die Anzahl der Datentraeger an, die mit identischen Kopien des (eventuell vervielfaeltigten) Backupstuecks gefuellt werden. Die Optionen zweitpuffer und permutationskeys koennen weggelassen werden. Ihre Bedeutung wird weiter unten bei "Permutierte Backupstuecke" erklaert. Die zweite Gruppe von Argumenten beschreibt das Schreibprogramm, das vom scdbackup-Kommando verwendet wird, um auf den Datentraeger zu schreiben. Das sollte das gleiche Programm sein, das auch fuer normale Backups verwendet wird. Man kann die normale Einstellung mit folgenden Befehlen ablesen scdbackup -show_configuration | fgrep CDRECORD= bzw. sdvdbackup -show_configuration | fgrep CDRECORD= Die Antwort wird vermutlich sein : SCDBACKUP_CDRECORD=cdrecord -v bzw. SDVDBACKUP_CDRECORD=.../scdbackup-0.9.2/scripts/growisofs_wrapper Das letzte Argument der dritten Gruppe gibt den Namen des Pufferfiles an, der das normale, unvervielfaeltigte Backupstueck enthaelt. Es wird zusammen mit einigen anderen Argumenten von scdbackup angehaengt, das glaubt, mit dem Programm cdrecord zu kommunizieren. (siehe auch Anhang SCHREIBER) Beispiele: Man wird diese Backupmedien mit scdbackup_verify -auto pruefen wollen, um beide Pruefsummenmarken gezeigt zu bekommen. Die des eigentlichen Backupstuecks und die des von mxn_wrapper_de gestarteten Schreibvorgangs. Von jeder Backup-CD zwei Ausfertigungen machen und dabei das normale cdrecord zum Brennen verwenden. Die Adresse des Pufferfiles ist /cdbuffer/iso_buffer_cd mxn_options="CD 1 2 . cdrecord -v ." export SCDBACKUP_CDRECORD="$(scdbackup -where scripts)/mxn_wrapper_de $mxn_options" export SCDBACKUP_BUFFER="/cdbuffer/iso_buffer_cd" export SCDBACKUP_MAKE_CHECKSUM="-blocklist_fileadr $HOME/blocklist_dir/cd_ -filter_checksum_blocksize 64k -filter_md5" scdbackup ...Ihre.ueblichen.Argumente.fuer.scdbackup... Das selbe mit DVD mxn_options="DVD 1 2 . $(scdbackup -where scripts)/growisofs_wrapper ." export SDVDBACKUP_CDRECORD="$(sdvdbackup -where scripts)/mxn_wrapper $mxn_options" export SDVDBACKUP_BUFFER="/dvdbuffer/iso_buffer_dvd" export SDVDBACKUP_MAKE_CHECKSUM="-blocklist_fileadr $HOME/blocklist_dir/dvd_ -filter_checksum_blocksize 64k -filter_md5" sdvdbackup -max_size 640m ...Ihre.ueblichen.Argumente.fuer.scdbackup... Von jedem Backupstueck je zwei Kopien auf jede CD, je 3 Ausfertigungen von jeder CD. Die Backupstuecke sollen 315 MB gross sein, damit sie draufpassen mxn_options="CD 2 3 . cdrecord -v ." export SCDBACKUP_CDRECORD="$(scdbackup -where scripts)/mxn_wrapper_de $mxn_options" export SCDBACKUP_BUFFER="/cdbuffer/iso_buffer_cd" export SCDBACKUP_MAKE_CHECKSUM="-blocklist_fileadr $HOME/blocklist_dir/cd_ -filter_checksum_blocksize 64k -filter_md5" scdbackup -max_size 315m ...Ihre.ueblichen.Argumente.fuer.scdbackup... 6 identische Kopien eines Backupstuecks von CD-Groesse auf eine einzelne DVD mxn_options="DVD 6 1 . $(scdbackup -where scripts)/growisofs_wrapper ." export SDVDBACKUP_CDRECORD="$(sdvdbackup -where scripts)/mxn_wrapper_de $mxn_options" export SDVDBACKUP_BUFFER="/dvdbuffer/iso_buffer_dvd" export SDVDBACKUP_MAKE_CHECKSUM="-blocklist_fileadr $HOME/blocklist_dir/dvd_ -filter_checksum_blocksize 64k -filter_md5" sdvdbackup -max_size 640m ...Ihre.ueblichen.Argumente.fuer.scdbackup... Zusaetzliche Kopien von bereits gebrannten Backupstuecken lassen sich mit scdbackup -pipe_to_media herstellen. Man sollte den Originaldatentraeger natuerlich vorher verifizieren, damit man keine fehlerhaften Daten kopiert und gar mit einer Blockpruefsummenliste beglaubigt. Wenn der Backup bereits eine Blockpruefsummenliste enthaelt, kann man sie ohne weitere Pruefsummen brennen : unset SCDBACKUP_CDRECORD SCDBACKUP_BUFFER export SCDBACKUP_MAKE_CHECKSUM=" " Wenn aber noch keine Blockpruefsummenliste angehaengt ist, muss sie nun hinzu- gefuegt werden, damit der neue Datentraeger reparierbar wird : export SCDBACKUP_MAKE_CHECKSUM="-blocklist_fileadr $HOME/blocklist_dir/ -filter_checksum_blocksize 64k -filter_md5" In beiden Faellen kopiert man dann den Datentraeger auf die Platte, prueft und kopiert von dort auf einen weiteren Datentraeger : cat /dev/cdrom >/cdbuffer/mein_puffer_file scdbackup_verify /cdbuffer/mein_puffer_file -auto cat /cdbuffer/mein_puffer_file | scdbackup -pipe_to_media Das selbe kann man mit DVDs und sdvdbackup -pipe_to_media machen. Die kopierten Datentraeger sollten danach mit der Pruefsumme des Originals verifiziert werden. Nur wenn alle Kopien zunaechst korrekt sind, kann mit ihren Ueberresten spaeter eine Reparatur gelingen. Beachten Sie, dass bei jedem Kopierzyklus erneut 300 kB Fuelldaten (padding) angehaengt werden. Wiederherstellung beschaedigter reparierbarer Backupstuecke Voraussetzung jedes Reparaturversuchs ist eine intakte Blockpruefsummenliste. Sie ist die Grundlage fuer die Entscheidung, ob ein bestimmter Datenblock verwendbar ist oder nicht. Die verschiedenen Reparaturversuche koennen wiederholt werden. Es ist dabei aber entscheidend, dass immer wieder die gleiche Blockpruefsummenliste verwendet wird. Unbeschaedigte Blockpruefsummenlisten koennen zusammen mit ihrer Pruefsummenmarke vom Ende eines Backupstuecks abgelesen werden : volume=/dev/cdrom skip_bytes=0 $(scdbackup -where bin)/cd_backup_planer \ -blocklist_fileadr /tmp/scdbackup_ \ -scan_for_checksum -standalone -scan_for_checksum -blocklist \ -scan_for_checksum -pacifier -scan_for_checksum -first \ -scan_for_checksum -source:$volume \ -scan_for_checksum -skip:$skip_bytes \ -search_md5 - - - - >/dev/null Dadurch entsteht ein File von ca. 14 kB namens /tmp/scdbackup_1_1_A41123.194219_229208064 der die Blockpruefsummenliste enthaelt. Falls mehrere gueltige Blockpruef- summenlisten angehaengt sind, werden sie alle mit ihren jeweiligen Namen gespeichert, die sich aus Name, Datum und Bytezaehler der Pruefsummenmarke ergeben. Wenn das Backupstueck beschaedigt ist, erhaelt man dazu die ueblichen Warnmeldungen. Man kann das Ablesen beschleunigen wenn man eine garantierte Mindestgroesse fuer das Backupstueck angenen kann. Im obigen Fall sind 200 MB eine sichere Schaetzung skip_bytes=200m $(scdbackup -where bin)/cd_backup_planer \ ... Dadurch wird beim Ablesen diese Anzahl von Bytes zusammen mit eventuell vorhandenen Blockpruefsummenlisten ueberspruengen. Man wird bei jeder gefundenen Pruefsummenmarke gewarnt, dass sie nicht zu den verkuerzten Daten pass. Wenn skip_bytes zu gross ist, kann man die aktuelle Marke verpassen und schlimmstenfalls die veraltete Marke eines frueheren Backups ablesen. Wenn man also nichts ueber die Groesse des Backupstuecks vorhersagen kann, oder wenn man die Backupdaten waehrend des Ablesens verifizieren moechte, oder wenn man sie in einen Festplattenfile anstelle von /dev/null leiten will, dann sollte man bei skip_bytes=0 bleiben. Wenn man Pech hat, ist die Liste selbst beschaedigt oder nicht aufzufinden. Deshalb sollte man die Kopien auf der Festplatte gut aufheben. Wenn man keine unbeschaedigte Kopie der Liste findet, hilft vielleicht noch der Abschnitt "Wiederherstellung beschaedigter Blockpruefsummenlisten" weiter. Fuer die folgenden Beispiele wird jeweils die oben extrahierte Blockpruefsummenliste verwendet : blocklist=/tmp/scdbackup_1_1_A41123.194219_229208064 Man koennte auch eines der Backupstuecke selbst verwenden, aber dazu muss jedesmal der gesamte Datentraeger nach der Liste abgesucht werden. Sehr hilfreich ist es natuerlich, wenn man noch die auf der Festplatte abgelegte Blockliste hat : $HOME/blocklist_dir/cd_1_1_A41123.194219_229208064 Das Pruef- und Reparaturprogramm : $(scdbackup -where bin)/cd_backup_planer -process_blocklist ... bietet verscheidene Methoden zum Umgang mit beschaedigten Backupstuecken : report gibt die Parameter der Blockpruefsummenliste und eine Zusammen- fassung des Pruefergebnisses auf stderr aus. Schreibt die Nummern beschaedigter Blocks nach stdout. Letzte stdout-Zeile ist immer "@". $(scdbackup -where bin)/cd_backup_planer -process_blocklist \ report $blocklist 0 /dev/cdrom - >/tmp/liste_beschaedigter_blocks Bei den Wiederherstellungsmethoden muss man genau auf den Unterschied von sequentiellen Datenstroemen (stdin, stdout, ...) und Fileobjekten mit wahlfreiem Zugriff (Files auf Festplatten, Blockdevices, ...) achten. Die Art der vorhandenen Datenquellen und der gewuenschten Ergebnisse bestimmt weitgehend die Auswahl der Methode. Files mit wahlfreiem Zugriff koennen auch als sequentielle Datenstroeme verwendet werden - aber nicht umgekehrt. collect kopiert unbeschaedigte Blocks aus einem sequentiellen Datenstrom in einen File mit wahlfreiem Zugriff. $(scdbackup -where bin)/cd_backup_planer -process_blocklist \ collect $blocklist 0 /dev/cdrom /tmp/reparaturergebnis mend prueft die Blocks in einem File mit wahlfreiem Schreib-Lese-Zugriff und versucht beschaedigte durch ihre unbeschaedigten Gegenstuecke aus einem anderen File mit wahlfreiem Lese-Zugriff zu ersetzen. $(scdbackup -where bin)/cd_backup_planer -process_blocklist \ mend $blocklist 0 /dev/cdrom /tmp/reparaturergebnis Diese Methode ist dafuer gedacht, Datentraeger auszulesen, die keinen sequentiellen Datenstrom von nennenswerter Laenge mehr liefern. In extremen Faellen mag ein Tool wie dd_rescue helfen, an die uebriggebliebenen Daten heranzukommen. In weniger extremen Faellen kann man es mit der Intervalladressierung von "mend" versuchen. Damit kann man die Blocks ab einer bestimmten Nummer bis zum Ende bearbeiten lassen (zB. mend:10000) oder ein Intervall (zB. bearbeitet mend:0:9999 die ersten 10000 Blocks). Man kann die Blocks auch in umgekehrter Reihenfolge bearbeiten lassen (zB. mend:end:0). Bei Backupstuecken mit wenigen beschaedigten Datenblocks ist die Methode "mend" auch die schnellste. merge liest zwei sequentielle Datenstroeme und waehlt unbeschaedigte Blocks aus. Luecken werden notduerftig mit der passenden Anzahl von Bytes gefuellt. Die Ausgabe erfolgt als sequentieller Datenstrom auf stdout. $(scdbackup -where bin)/cd_backup_planer -process_blocklist \ merge $blocklist 0 /dev/cdrom /tmp/reparatur_zustand \ >/tmp/naechster_reparatur_zustand Die Wiederherstellungsmethoden koennen mit allen vorhandenen Kopien wiederholt werden und werden (hoffentlich) am Schluss ein unbeschaedigtes Backupstueck hervorbringen. Die Methoden "mend" und "merge" berichten am Schluss auf englisch, ob die Reparatur komplett ist ("in perfect condition now") , oder ob noch weiter gearbeitet werden muss ("need more recovery work"). Die mit Methode "collect" erzeugten Ergebnisse koennen fehlerfrei sein, auch wenn bei jeder einzelnen Kopie Fehler gemeldet wurden. Hier schafft -process_blocklist report $blocklist 0 /tmp/reparaturergebnis - >/dev/null Klarheit (>/dev/null, damit man nicht mit Blocknummern ueberschuettet wird). Alle vier Methoden liefern den Exitwert 0, wenn sie sicher sind, dass das Ergebnis fehlerfrei ist. Sonst wird ein Wert ungleich 0 zurueckgegeben. Dieses Beispiel liest 3 CDs gleichzeitig. Eine davon via ssh. Hierbei wird kein einziges Fileobjekt mit wahlfreiem Zugriff benoetigt : ssh ts2 -l thomas cat /dev/cdrom | \ $(scdbackup -where bin)/cd_backup_planer -pacifier -off \ -process_blocklist merge $blocklist 0 - /dev/cdrom | \ $(scdbackup -where bin)/cd_backup_planer \ -process_blocklist merge $blocklist 0 - /dev/cdrecorder \ >/tmp/reparaturergebnis Dies extrahiert beide Kopien von einer CD mit mehreren kopierten Backupstuecken und laedt die brauchbaren Blocks im Plattenfile /tmp/reparaturergebnis ab. Zunaechst wird die direkt zugreifbare Kopie ausgelutscht : $(scdbackup -where bin)/cd_backup_planer \ -process_blocklist collect $blocklist 0 /dev/cdrom /tmp/reparaturergebnis Dieser Lauf ueberspringt dann 1 Kopie und liefert die naechste : $(scdbackup -where bin)/cd_backup_planer \ -extract_multiplied /dev/cdrom 1 | \ $(scdbackup -where bin)/cd_backup_planer -pacifier -off \ -process_blocklist collect $blocklist 0 - /tmp/reparaturergebnis Dieses Beispiel versucht das hintere Ende einer Fehlerstelle zu bergen, indem es die Blocks von hinten nach vorne abarbeitet. $(scdbackup -where bin)/cd_backup_planer \ -process_blocklist mend:end:0 $blocklist 0 /dev/cdrom \ /tmp/recovering_image Wenn das dann zB diese Fehlermeldung ausgibt While reading block 55376 of 66994 : Error 5 : Input/output error koennte man als naechstes versuchen, den schlechten Block zu ueberspringen und bei Nummer 55375 weiterzumachen. $(scdbackup -where bin)/cd_backup_planer \ -process_blocklist mend:55375:0 $blocklist 0 \ /dev/cdrom /tmp/recovering_image Wenn ein mend- oder collect-Lauf kein perfektes Ergebnis brachte, nachdem alle Kopien ausgelesen sind, kann es sich lohnen, die Prozedur zu wiederholen. Sollten Medien ab und zu bereit sein, korrekte Blocks herauszugeben, dann wuerde das Programm diese Gelegenheit ausnutzen und sie abspeichern. Eventuell wird man mit mend auch von beiden Seiten mehrmals gegen Stellen mit abbrechenden Fehlern anrennen, um auch noch den letzten lesbaren Block herauszuquetschen. Von oben : $(scdbackup -where bin)/cd_backup_planer \ -process_blocklist mend:55400:0 $blocklist 0 \ /dev/cdrom /tmp/recovering_image und von unten : $(scdbackup -where bin)/cd_backup_planer \ -process_blocklist mend:55300:end $blocklist 0 \ /dev/cdrom /tmp/recovering_image Wiederherstellung beschaedigter Blockpruefsummenlisten Fuer die obigen Beispiele benoetigt man eine unbeschaedigte Blockpruefsummen- liste. Sollten es bei allen vorhandenen Kopien unmoeglich sein, sie zu laden, dann muss man versuchen, eine unbeschaedigte Kopie wiederherzustellen. Das wird nur bei Listen funktionieren, bei denen die Blockgroesse mindestens 1k war und die mindestens einen Datenblock gross sind. Eine beschaedigte Pruefsummenmarke und ihre Blockpruefsummenliste kann man von einem Backupstueck abtrennen mit : metablocklist=/tmp/metablocklist $(scdbackup -where bin)/cd_backup_planer \ -extract_tag_tail 4m \ $metablocklist cp $metablocklist /tmp/rep_blocklist In diesem Zustand kann sie als Quelle ihrer eigenen Blockpruefsummenliste dienen. Man wird nun versuchen, die beschaedigten Blocks der Liste durch unbeschaedigte von einer anderen Kopie des gleichen Backupstuecks zu ersetzen : $(scdbackup -where bin)/cd_backup_planer \ -extract_tag_tail 4m \ >/tmp/reparaturergebnis und dann weiter bearbeiten. Permutierte Backupstuecke Die bisher gezeigten Vorkehrungen sollten die Reparatur von zufaelligen Fehlern erlauben, sofern die Zahl der Kopien mit der Fehlerdichte mithalten kann. Es ist aber denkbar, dass systematische Fehler die Wahrscheinlichkeit fuer Schaeden an bestimmten Blocks deutlich erhoehen. Zum Beispiel wenn die Datentraeger traditionell zuerst vom Ende her schlecht werden. Als Vorkehrung gegen diese Gefahr koennen Backupstuecke permutiert, d.h. innerlich durcheinandergewuerfelt werden. In diesem Zustand koennen sie weder gemounted noch extrahiert werden. Sie setzen aber den systematischen Fehlern andere Datenblocks aus als die originalen Backupstuecke. Die Permutation kann natuerlich wieder umgekehrt werden, damit die Backupstuecke lesbar werden bzw. als Quelle von Ersatzblocks dienen koennen. Es gibt 8 Vertauschungsschemata. 0 ... unvertauscht (aber um 1 oder mehr Blocks verschoben) 1 ... Haelften des Backupstuecks vertauscht 2 ... Backupstueck blockweise gespiegelt (Blockreihenfolge umgekehrt) 3 ... je zwei Viertel des Backupstuecks vertauscht +4 ... zusaetzlich Reissverschluss der Haelften des Ergebnisses von 0 bis 3 Wegen Details siehe bin/cd_backup_planer -hilfe und obigen Anhang VERIFIZIEREN. Es ist empfehlenswert, verschiedene Schemata fuer die verschiedenen Reservekopien zu verwenden. Man sollte zum Beispiel je eines aus den Mengen {1,3} und {4,6,7} verwenden. Man sollte die Vertauschungsparameter, die auf stderr gemeldet werden, ausdrucken und den Datentraegern beifuegen. Das Zurueckvertauschen sollte zwar alle noetigen Daten am Anfang des Datentraegers vorfinden, aber darauf sollte man sich dann doch nicht verlassen. Permutierte Backupdatentraeger kann man mit mxn_wrapper_de erzeugen. Die erste Argumentgruppe von mxn_wrapper_de erlaubt es auch Permutationen fuer die einzelnen Datentraegerkopien zu bestellen. Die Reihenfolge dieser Argumente ist : typ innere_cp medien_cp [zweitpuffer permutationskeys] . Die ersten drei wurden bereits weiter oben erklaert. Die weiteren Argumente betreffen Permutationen : zweitpuffer gibt den Namen eines zweiten Pufferfiles an, der so gross werden kann wie ein einzelner Datentraeger. Solch ein File ist noetig, wenn Permutationen stattfinden sollen und innere_cp groesser als 1 ist. Falls innere_cp gleich 1 ist, wird dieses Argument ignoriert und darf auch "-" sein. permutationskeys eine Liste von Nummern fuer cd_backup_planer -permute_blocks. "-" bedeutet Originalformat, "0" bis "7" waehlen eine der Vertauschungsregeln aus. Keines dieser Formate ist ohne Rueckvertauschung lesbar ! Blockgroesse ist immer 64k. Wenn die Zahl der permutationskeys kleiner ist als medien_cp, dann wird vor den vertauschten Kopien eine passende Zahl von Datentraegerkopien im Originalformat hergestellt. Beispiel : Jeweils 2 Kopien jedes Backupstuecks auf eine DVD schreiben, davon 4 Kopien, wobei die letzten beiden permutiert werden. Weil Regel 1 sehr der Verdopplung der Backupstuecke aehnelt, waehle ich 4 (Reissverschluss) und 7 (Viertel tauschen und Reissverschluss) : bscripts=$(scdbackup -where scripts) mxn_options="DVD 2 4 /meine_zweite_platte/zweiter_puffer 4 7 ." mxn_options="$mxn_options $bscripts/growisofs_wrapper ." export SDVDBACKUP_CDRECORD="$bscripts/mxn_wrapper_de $mxn_options" export SDVDBACKUP_BUFFER="/dvdbuffer/iso_buffer_dvd" export SDVDBACKUP_MAKE_CHECKSUM="-blocklist_fileadr $HOME/blocklist_dir/dvd_ -filter_checksum_blocksize 64k -filter_md5" sdvdbackup -max_size 2125m ...Ihre.ueblichen.Argumente.fuer.scdbackup... Ganz allgemein setzt die Permutation als Quelle einen File mit wahlfreiem Zugriff voraus und wird mit der Option -permute_blocks von cd_backup_planer durchgefuehrt. Beispiele : Eine permutierte DVD in einen unpermutierten Pufferfile auslesen $(scdbackup -where bin)/cd_backup_planer \ -permute_blocks restore /dev/dvdrom 0 0 0 >/cdbuffer/mein_puffer_file Die brauchbaren Blocks der zweiten Backupstueckkopie auf dem Datentraeger direkt zu einem schadhaften Backupstueck im /tmp-Directory hinzufuegen $(scdbackup -where bin)/cd_backup_planer \ -permute_blocks restore /dev/dvdrom 0 0 0 | \ $(scdbackup -where bin)/cd_backup_planer -pacifier -off \ -extract_multiplied - 1 | \ $(scdbackup -where bin)/cd_backup_planer -pacifier -off \ -process_blocklist collect $blocklist 0 - /tmp/reparaturergebnis Eine ziemlich durcheinandergebrachte Sammlung von Reserveblocks aus einem Pufferfile erzeugen, der ein lesbares und verifiziertes Backupstueck enthaelt. $(scdbackup -where bin)/cd_backup_planer \ -permute_blocks 7 /cdbuffer/mein_puffer_file 64k 0 0 | \ sdvdbackup -pipe_to_media Die dabei geschriebene DVD wird natuerlich nicht mehr zur originalen Pruefsumme passen, sondern nur noch zu ihrer eigenen, neugeschriebenen. Ein permutiertes Backupstueck ohne Zwischenspeichern verifizieren : $(scdbackup -where bin)/cd_backup_planer \ -permute_blocks restore /dev/dvdrom 0 0 0 | \ scdbackup_verify - -auto Sollte ein Fehler ausgerechnet den Anfang der DVD getroffen haben, dann muss man die Vertauschungsregel (7) und die Blockgroesse (64k) kennen, um eventuell unbeschaedigte Blocks herauslesen zu koennen : $(scdbackup -where bin)/cd_backup_planer \ -permute_blocks -7 /dev/cdrom 64k $blockcount 1 >/cdbuffer/mein_puffer_file Ein Vertauschungsschema, das die Platte rappeln laesst, ist Nr. 1 : Spiegeln. ... -permute_blocks 1 /cdbuffer/mein_puffer_file 64k 0 0 ... ----------------------------------------------------------------------- Anhang CRYPTO Es empfiehlt sich, Backups weit entfernt von dem Computer aufzubewahren, der die Originaldaten speichert. Damit ergibt sich aber das Problem, sicher zu stellen, dass niemand auf den Inhalt dieser eventuell schlecht bewachten Backups zugreift. Eine Loesung bietet die Verschluesselung der Backupdaten. Man muss aber regelmaessig ausprobieren, ob man das Auspacken der Daten noch beherrscht. Man wird im Ernstfall niemand anderen finden, der das kann. Siehe dazu den Absatz "Testen" weiter unten. Mit den gegenwaertigen ISO Formatierprogrammen ist es nicht moeglich, die Fileinhalte zu verschluesseln und gleichzeitig die Struktur des Filesystems in Klartext zu belassen. Ein komplett verschluesseltes ISO-Filesystem wuerde aber seine Vorteile gegenueber einem sequentiellen Archivformat verlieren. Daher ist es naheliegend, Verschluesselung nur auf Archive anzuwenden. Das Skript afio_sencrypt bietet die Moeglichkeit, verschluesselte und ggf. auch komprimierte afio-Archive zu erzeugen. Die Verschluesselung erledigt dabei das Programm sencrypt . Siehe http://scdbackup.webframe.org/README_sencrypt Dazu werden die Konfigurationsfiles s*backup_afio_value bzw. die Variablen S*BACKUP_AFIO genutzt. Fuer die Verschluesselung muessen Sie einen Schluesselsatz waehlen. Entschluesselung wird nur moeglich sein, wenn Sie diesen Satz ganz genau angeben koennen. Der Satz sollte viele Zeichen enthalten. Es werden zwar nur die ersten 1000+ Zeichen benutzt, aber es schadet nicht, wenn es mehr sind. Um fuer alle moeglichen Eingabewege von sencrypt brauchbar zu sein, sollten in ihm keine Zeilenumbrueche vorkommen und auch keine Sonderzeichen, die der Shell etwas bedeuten. Verwenden Sie Buchstaben, Ziffern, Leerzeichen, Punkt, Komma, Tiefstrich, Bindestrich. Wenn man sich den Satz nicht im Kopf merken will, sollte er aus moeglichst wildem Buchstabensalat bestehen. Ansonsten empfiehlt sich ein laengerer, einpraegsamer Satz. (Nicht Ihr Lieblingsspruch, den jeder kennt !) Als naechstes muessen Sie sich zwischen zwei Methoden entscheiden. Sie koennen unverschluesselte afio-Archive mit verschluesselten Fileinhalten erzeugen, oder aber die entstehenden afio-Archive als ganzes verschluesseln. Die erste Methode ist recht langsam aber sie produziert die ueblichen, hartgesottenen afio-Archive, die man selbst dann noch verwenden kann, wenn der Anfang des Archivs verloren gegangen ist. Die Filenamen und -attribute (zB. Zugriffsrechte) bleiben dabei in Klartext sichtbar. Die zweite Methode ist schneller. Sie versteckt Filenamen und -attribute, aber ein beschaedigtes Archiv ist ab der Schadensstelle unlesbar (falls nicht mit den Methoden aus Anhang REDUNDANZ wiederhergestellt). Bei dieser Methode besteht die Moeglicheit, den Schluesselsatz am Terminal einzugeben, sodass man ihn nicht in einem File speichern muss. Auch das star-Format kann man verschluesseln. Dabei steht jedoch nur die Methode der Totalverschluesselung zur Verfuegung. Am Ende jedes Paragraphen ueber afio stehen die entsprechenden Beispiele fuer star_as_afio_wrapper . Verschluesselung Gewoehnlich wird man zuerst einen gut geschuetzten Schluesselfile einrichten : mkdir $HOME/schluesselfiles chmod u+rwx,go-rwx $HOME/schluesselfiles touch $HOME/schluesselfiles/dvd_schluessel chmod u+rw,go-rw $HOME/schluesselfiles/dvd_schluessel vi $HOME/schluesselfiles/dvd_schluessel Man wird diesen Schluesselfile entweder im Kopf oder auf einem externem Datentraeger als Notfallkopie sicher einlagern muessen. ZB: cp $HOME/schluesselfiles/dvd_schluessel /media/usbstick/dvd_schluessel Dann wird in die Variable SCDBACKUP_AFIO bzw. SDVDBACKUP_AFIO der passende Aufruf von afio_sencrypt eingetragen. Fuer unverschluesselte afio-Archive mit verschluesselten Fileinhalten : export SDVDBACKUP_AFIO="$(sdvdbackup -where scripts)/afio_sencrypt -each_file_by $HOME/schluesselfiles/dvd_schluessel" Fuer ein komplett verschluesseltes afio-Archiv : export SDVDBACKUP_AFIO="$(sdvdbackup -where scripts)/afio_sencrypt -whole_archive_by $HOME/schluesselfiles/dvd_schluessel" Falls Sie den Schluesselsatz manuell eingeben wollen : export SDVDBACKUP_AFIO="$(sdvdbackup -where scripts)/afio_sencrypt -whole_archive" Beim Verschluesseln wird der Schluesselsatz zweimal abgefragt. Die Eingabe muss beide Male identisch sein. Fuer ein komplett verschluesseltes star-Archiv : export SDVDBACKUP_AFIO="$(scdbackup -where scripts)/star_as_afio_wrapper -encrypt_by $HOME/schluesselfiles/dvd_schluessel" Fuer ein komplett verschluesseltes star-Archiv mit manuellem Schluesselsatz : export SDVDBACKUP_AFIO="$(scdbackup -where scripts)/star_as_afio_wrapper -encrypt" Benutzen Sie dann ihr uebliches scdbackup afio Kommando : sdvbackup_afio ...uebliche.argumente... und schreiben Sie sich das passende Auspackkommando aus der folgenden Liste gut auf ! Verlassen Sie sich nicht auf einen zukuenftigen LIESMICH-File. Auspacken Um ein so erzeugtes Archiv auszupacken, muss man wissen, welche Methode verwendet wurde und ob Kompression eingeschaltet war. Letzteres kann man zum Zeitpunkt des Backups abfragen mit sdvdbackup -show_configuration | grep AFIO_COMPRESS Unkomprimierte, unverschluesselte afio-Archive mit verschluesselten Files afio -i -P 'sencrypt' -Q '-d' \ -Q '-f' -Q "$HOME/schluesselfiles/dvd_schluessel" -Z /dev/cdrom Komprimierte, unverschluesselte afio-Archive mit verschluesselten Files afio -i -P 'sencrypt' -Q '-d' -Q '-g' \ -Q '-f' -Q "$HOME/schluesselfiles/dvd_schluessel" -Z /dev/cdrom Unkomprimierte verschluesselte afio-Archive sencrypt -d -s 322 -f "$HOME/schluesselfiles/dvd_schluessel" $HOME/schluesselfiles/test_schluessel bzw. vi $HOME/schluesselfiles/test_schluessel bzw. lassen Sie in den Beispielen die Argumente -f "$HOME..." weg, sodass der Schluesselsatz an /dev/tty abgefragt wird. Bei unverschluesselten Archiven mit verschluesselten Fileinhalten muss man wirklich einen File auspacken und pruefen ob er Klartext enthaelt. Unkomprimiert : mkdir $HOME/test_dir cd $HOME/test_dir afio -i -P 'sencrypt' -Q '-d' \ -Q '-f' -Q "$HOME/schluesselfiles/test_schluessel" -Z \ -v -y '*ASKME*' /dev/cdrom view .../*ASKME* Komprimiert : ... afio -i -P 'sencrypt' -Q '-d' -Q '-g' \ ... Um die Entschluesselbarkeit von im Ganzen verschluesselten Archiven zu testen, genuegt es zu probieren, ob afio ein Inhaltsverzeichnis davon ablesen kann. Unkomprimierte afio-Archive : sencrypt -d -s 322 -f "$HOME/schluesselfiles/test_schluessel" = 0.1.2 (Falls es Option -as mkisofs anbietet) 2) genisoimage (Hat sicher moderne mkisofs Faehigkeiten) 3) mkisofs (Es gab vor langer Zeit schlechte Versionen) Man kann vor dem Lauf der ./KONFIGURIEREN_* Skripte Variablen setzen, um eines der obigen Programme als Vorgabe zu erzwingen. Auswahl von xorriso: export SCDBACKUP_USE_GENISOIMAGE="xorriso" export SDVDBACKUP_USE_GENISOIMAGE="xorriso" Auswahl von mkisofs: export SCDBACKUP_USE_GENISOIMAGE="mkisofs" export SDVDBACKUP_USE_GENISOIMAGE="mkisofs" Auswahl von genisoimage export SCDBACKUP_USE_GENISOIMAGE="genisoimage" export SDVDBACKUP_USE_GENISOIMAGE="genisoimage" Voruebergehende Auswahl Die Wahl des Formatierungsprogramms wird fuer CD von der Variablen SCDBACKUP_MKISOFS gesteuert: export SCDBACKUP_MKISOFS="xorriso -return_with MISHAP 32 -abort_on FATAL -as mkisofs -graft-points" export SCDBACKUP_MKISOFS="genisomage -l -allow-leading-dots -R -D -graft-points" export SCDBACKUP_MKISOFS="mkisofs -l -allow-leading-dots -R -D -graft-points" Fuer DVD dient SDVDBACKUP_MKISOFS mit den selben Inhalten dem selben Zweck. ----------------------------------------------------------------------- Anhang CD : Das Skript ./KONFIGURIEREN_CD versucht brauchbar installierte Brennprogramme zu finden. Dazu prueft es mehrere verschiedene Programmnamen : cdrecord Das CD Subsystem verwendet urspruenglich Joerg Schillings cdrecord aus dem Package cdrtools. cdrecord oder eines seiner Abkoemmlinge sollte in jeder Linux-Distribution zu finden sein. Der Quellcode der aktuellen cdrtools ist erhaeltlich auf: ftp://ftp.berlios.de/pub/cdrecord/alpha Die verwendbaren Adressen haben im Laufe der Zeit einige Aenderungen durchgemacht. Echte SCSI-Brenner sind selten geworden. Aber USB und SATA erscheinen in Linux als Pseudo-SCSI Geraete. Bei aelteren Linuxversionen laesst das Kernelmodul ide-scsi IDE-Brenner wie SCSI-Geraete erscheinen, bei neueren erscheinen sie als Pseudo-Festplatten /dev/hdX . Die folgende Tabelle soll eine Uebersicht ueber Linux Kernels und moegliche Adressformate fuer CD-Brenner geben : Kernel echtes SCSI IDE + ide-scsi IDE (Joerg) IDE (Linus) 2.2 0,0,0 0,0,0 -unbekannt- -geht nicht- 2.4 0,0,0 0,0,0 ATA:1,0,0 -geht nicht- 2.6 0,0,0 -abgeschafft- ATA:1,0,0 /dev/hdc Die Adressen im Joerg-Stil kennen auch noch andere Vorsatztexte wie "REMOTE:". cdrecord dev=HELP gibt eine Liste aus. Vorsatzttexte sind jeweils in Zeile "Transp. layer ind.:". Diese Texte kann man dann (ohne ":") mit Option -scanbus verwenden. ZB: cdrecord dev=ATA -scanbus Hinweis: ATA funktioniert nur, wenn der Brenner nicht unter ide-scsi laeuft. wodim wodim ist der cdrecord-Fork aus Package cdrkit. Es stammt von cdrecord 2.01.01 und ist daher fuer scdbackup voll geeignet. Der Quellcode des aktuellen cdrkit ist erhaeltlich auf: http://debburn.alioth.debian.org/ Eine wertvolle Eigenschaft von wodim ist, dass es keine Superuser Autoritaet sondern lediglich rw-Rechte an /dev/scdN und /dev/hdX benoetigt. cdrskin Fuer scdbackup auf Linux Kernel 2.4 und hoeher bietet das Programm cdrskin eine vollstaendige Alternative zu cdrecord. Es basiert auf der Library libburn aus dem Projekt libburnia.pykix.org. Das beste daran: es ist von mir. :)) Es muss cdrskin-0.2.6 oder moderner sein, um alle Beduerfnisse von scdbackup abzudecken. Unter Linux Kernel 2.4 muss der Brenner von der ide-scsi Emulation verwaltet werden. Unter moderneren Kerneln dagegen nicht. cdrskin steht als Sourcecode bereit unter http://scdbackup.webframe.org/cdrskin_eng.html http://scdbackup.sourceforge.net/cdrskin_eng.html Um scdbackup fuer die Benutzung von cdrskin zu konfigurieren, sollte der Superuser zuerst sicherstellen, dass alle CD-Geraetefiles geeignete Zugriffsrechte gesetzt haben. Sichtbar fuer einen User sind nur Geraete, an denen er rw-Recht hat. Als Superuser: cdrskin --devices Die Antwort wird etwas sein wie 0 dev='/dev/sr0' rwrwr- : 'TEAC' 'CD-ROM CD-532S' 1 dev='/dev/sr1' rwrw-- : 'LITE-ON' 'LTR-48125S' woraus man ein Kommando ableiten kann, das allen Usern vollen Zugriff auf beide Geraete gestattet (man kann natuerlich auch restriktiver sein): chmod a+rw /dev/sr0 /dev/sr1 xorriso xorriso kann CDs auf die Art schreiben, die von scdbackup erwartet wird. Diese Faehigkeit basiert auf libburn von libburnia-project.org. Siehe auch oben Anhang ISO. Fuer die "-as cdrecord" Emulation braucht man mindestens xorriso-0.1.2 . Obwohl xorriso ausreicht, entspricht sein Erscheinungsbild nicht dem von cdrecord, wodim oder cdrskin. Ausserdem versteht es nicht die traditionellen Laufwerksadressen Bus,Target,Lun von cdrecord, sondern nur /dev/.... Ein Lauf von xorriso -devices zeigt eine Liste der verfuegbaren Laufwerksadressen. Diese Abweichung von der Tradition traegt xorriso den letzten Platz in der Auswahlliste ein. Allgemein ist es beim Brennen weniger flexibel als cdrskin, das die selbe Basissoftware benutzt. Auswahl waehrend der Konfiguration Das Skript ./KONFIGURIEREN_CD versucht die obigen Programme zu finden und zu bewerten. Die Liste der gefundenen Programme ist Teil der Userfrage Welches CD-Brennprogramm ? ( cdrskin cdrecord xorriso wodim ) Wenn noch kein CD Brennprogram festgelegt ist, dann wird der erste Listeneintrag zur Vorgabe, die mit Eingabe einer leeren Zeile gewaehlt wird. Die normale Rangordnung ist: 1) cdrskin >= 0.2.6 (Bei Problemen kann ich Hilfe leisten.) 2) cdrecord (Nicht leicht zu sagen, was unter diesem Namen firmiert) 3) xorriso >= 0.1.2 (Bei Problemen kann ich Hilfe leisten.) 4) wodim (Im Sommer 2008 scheint wodim ohne Maintainer zu sein) Solange kein CD Brennprogramm ausgewaehlt ist, wird geprueft ob ein Programm mindestens ein CD-Laufwerk auflisten kann. Ein gut installiertes cdrecord kann also ohne weiteres ein cdrskin uebertrumpfen, wenn die rw-Rechte an den /dev-Files schlecht eingerichtet sind. Man kann vor dem Lauf der ./KONFIGURIEREN_* Skripte Variablen setzen, um eines der obigen Programme als Vorgabe zu erzwingen. cdrecord auswaehlen export SCDBACKUP_USE_CDRSKIN="cdrecord" wodim auswaehlen export SCDBACKUP_USE_CDRSKIN="wodim" cdrskin auswaehlen export SCDBACKUP_USE_CDRSKIN="cdrskin" xorriso auswaehlen export SCDBACKUP_USE_CDRSKIN="xorriso" Dann ausfuehren ./KONFIGURIEREN_CD Um erneut eine Untersuchung der Erreichbarkeit von Laufwerken zu bekommen: export SCDBACKUP_USE_CDRSKIN="default" ./CONFIGURE_CD Voruebergehende Auswahl Um zeitweilig zwischen modernen Versionen der Programme umzuschalten, sollte es genuegen, SCDBACKUP_CDRECORD mit einem der folgenden Inhalte zu setzen: export SCDBACKUP_CDRECORD="cdrecord -v" export SCDBACKUP_CDRECORD="wodim -v" export SCDBACKUP_CDRECORD="cdrskin -v" # Wichtig: xorriso erkennt keine Adressen wie "0,0,0". export SCDBACKUP_CDRECORD="xorriso -as cdrecord -v" die Adresse des Brenners passend setzen export SCDBACKUP_SCSI_ADR="/dev/sr0" und dann ein Backup-Kommando fuer CD zu starten scdbackup ... ----------------------------------------------------------------------- Anhang DVD : Das Skript ./KONFIGURIEREN_DVD versucht ein brauchbar installiertes Brennprogramm zu finden. Dazu prueft es mehrere verschiedene Programmnamen : growisofs Das DVD Subsystem verwendet normalerweise Andy Polyakovs dvd+rw-tools und daraus das Programm growisofs . Den Sourcecode von dvd+rw-tools holt man sich am besten von http://fy.chalmers.se/~appro/linux/DVD+RW/tools/ Siehe auch weiter unten in " Beschaffung und Installation von growisofs". Fuer BD (Blu-ray) Medien braucht man mindestens growisofs-7.1. cdrskin Fuer scdbackup auf Linux Kernel 2.4 und hoeher und fuer nicht-exotische DVD-Medien bietet das Programm cdrskin eine vollstaendige Alternative zu growisofs, dvd+rw-mediainfo und dvd+rw-format. Es basiert auf der Library libburn aus dem Projekt libburnia.pykix.org. Es muss cdrskin-0.3.4 oder moderner sein, um alle Beduerfnisse von scdbackup abzudecken. Unter Linux Kernel 2.4 muss der Brenner von der ide-scsi Emulation verwaltet werden. Unter moderneren Kerneln dagegen nicht. cdrskin steht als Sourcecode und als Linux-x86-Binaerprogramm bereit unter http://scdbackup.webframe.org/cdrskin_eng.html http://scdbackup.sourceforge.net/cdrskin_eng.html Zur Vorbereitung des Brennerzugangs, siehe oben, Anhang CD, Absatz "cdrskin". Fuer BD (Blu-ray) Medien braucht man mindestens cdrskin-0.6.0. xorriso xorriso kann auf die selben DVD-Typen schreiben, wie cdrskin, mit dem es die grundlegende Brennsoftware teilt. libburnia-project.org. Siehe oben, Anhang ISO. Beide Programme sind aus Sicht von sdvdbackup einigermassen gleichwertig. Weil cdrskin zusaetzlich cdrecord-artige Laufwerksadressen erkennt, wird es xorriso bei der automatischen Auswahl vorgezogen. Fuer BD (Blu-ray) Medien braucht man mindestens xorriso-0.3.2. wodim wodim ist der cdrecord-Fork aus Package cdrkit. Es stammt von cdrecord 2.01.01 und hat eigene DVD-Faehigkeiten. Siehe aber "Einschraenkungen mit cdrecord und wodim" weiter unten. Der Quellcode des aktuellen cdrkit ist erhaeltlich auf: http://debburn.alioth.debian.org/ cdrecord Ab cdrtools-2.01.01a09 ist das Brennen von DVD in der Sourcecodeversion freigeschaltet. Frueher gab es zeitlich befristete Binaerprogramme "cdrecord-ProDVD", die nun durch aktuellen cdrtools ersetzt sind. Man kann cdrtools-2.01.01aXY Versionen von cdrecord hier finden: ftp://ftp.berlios.de/pub/cdrecord/alpha Einschraenkungen mit cdrecord und wodim Beide, cdrecord(-ProDVD) and wodim, bieten nur den Modus DAO fuer DVD, was weswegen ohne Verwendung eines Pufferfiles jede DVD zu maximalen Groesse aufgefuellt werden muss. Ein weitere Nachteil ist, dass beide Programme nicht den bequemen Modus "Restricted Overwrite" mit DVD-RW unterstuetzen. Es wurde noch nicht getestet, ob sie mit BD (Blu-ray) brauchbar sind. Auswahl waehrend der Konfiguration Das Skript ./KONFIGURIEREN_DVD versucht die obigen Programme zu finden und zu bewerten. Die Liste der gefundenen Programme ist Teil der Userfrage Welches DVD-Brennprogramm ? ( growisofs cdrskin cdrecord xorriso wodim ) Wenn noch kein DVD Brennprogram festgelegt ist, dann wird der erste Listeneintrag zur Vorgabe, die mit Eingabe einer leeren Zeile gewaehlt wird. Die normale Rangordnung ist: 2) xorriso >= 0.1.8 (Bei Problemen kann ich Hilfe leisten) 1) cdrskin >= 0.4.6 (Bei Problemen kann ich Hilfe leisten) 3) growisofs (Am besten getestet, kann die meisten Medientypen) 4) cdrskin >= 0.3.4 (Kennt keine Option stream_recording= fuer BD) 5) xorriso >= 0.1.2 (Kennt keine Option stream_recording= fuer BD) 6) wodim (Im Sommer 2008 scheint wodim ohne Maintainer zu sein) 7) cdrecord(-ProDVD) (Muss melden "This copy of cdrecord is licensed for:" oder "Cdrecord-ProDVD") Solange kein DVD Brennprogramm ausgewaehlt ist, wird geprueft ob ein Programm mindestens ein DVDD-Laufwerk auflisten kann. Ein gut installiertes cdrecord kann also ohne weiteres ein cdrskin uebertrumpfen, wenn die rw-Rechte an den /dev-Files schlecht eingerichtet sind. Man kann vor dem Lauf der ./KONFIGURIEREN_* Skripte Variablen setzen, um eines der obigen Programme als Vorgabe zu erzwingen. growisofs auswaehlen export SDVDBACKUP_USE_PRODVD="growisofs" cdrskin auswaehlen export SDVDBACKUP_USE_PRODVD="cdrskin" xorriso auswaehlen export SDVDBACKUP_USE_PRODVD="xorriso" cdrecord auswaehlen export SDVDBACKUP_USE_PRODVD="cdrecord" wodim auswaehlen export SDVDBACKUP_USE_PRODVD="wodim" Dann ausfuehren ./KONFIGURIEREN_DVD Um erneut eine Untersuchung der Erreichbarkeit von Laufwerken zu bekommen: export SDVDBACKUP_USE_PRODVD="default" ./KONFIGURIEREN_DVD Die kurzfristige Auswahl von DVD-Brennprogrammen ist komplizierter als bei CD, weil sich die Faehigkeiten und Optionen der Programme staerker unterscheiden: ------------------------------------------------------------------------------- growisofs kurzfristig auswaehlen ------------------------------------------------------------------------------- export SDVDBACKUP_USE_PRODVD="0" export SDVDBACKUP_CDRECORD="$(sdvdbackup -where scripts)/growisofs_wrapper" export SDVDBACKUP_CDRECORD_OPT="-final_eject fs=16m" export SDVDBACKUP_DEV_ADR="/dev/sr0" ------------------------------------------------------------------------------- cdrskin kurzfristig auswaehlen ------------------------------------------------------------------------------- export SDVDBACKUP_USE_PRODVD="cdrskin" export SDVDBACKUP_CDRECORD="cdrskin -v" export SDVDBACKUP_CDRECORD_OPT="padsize=300k fs=16m -eject -data -tao assert_write_lba=0 fifo_start_at=0 driveropts=burnfree" export SDVDBACKUP_SCSI_ADR="0,0,0" oder export SDVDBACKUP_SCSI_ADR="dev/sr0" (nicht SDVDBACKUP_DEV_ADR) ------------------------------------------------------------------------------- xorriso kurzfristig auswaehlen ------------------------------------------------------------------------------- export SDVDBACKUP_USE_PRODVD="xorriso" export SDVDBACKUP_CDRECORD="xorriso -as cdrecord -v" export SDVDBACKUP_CDRECORD_OPT="padsize=300k fs=16m -eject" export SDVDBACKUP_SCSI_ADR="/dev/sr0" (nicht SDVDBACKUP_DEV_ADR) ------------------------------------------------------------------------------- cdrecord kurzfristig auswaehlen ------------------------------------------------------------------------------- export SDVDBACKUP_USE_PRODVD="1" export SDVDBACKUP_SCSI_ADR="0,0,0" export SDVDBACKUP_CDRECORD_OPT="padsize=300k fs=16m -eject driveropts=burnfree -data -sao" Ohne Pufferfile export SDVDBACKUP_BUFFER="-" export SDVDBACKUP_MEDIA_CAP=4480m export SDVDBACKUP_CDRECORD="$(scdbackup -where scripts)/pipe_to_cdrecord_sao cdrecord" Mit Pufferfile export SDVDBACKUP_BUFFER="/dvdbuffer/isofs_dvd" export SDVDBACKUP_CDRECORD="cdrecord -v" ------------------------------------------------------------------------------- wodim kurzfristig auswaehlen ------------------------------------------------------------------------------- export SDVDBACKUP_USE_PRODVD="wodim" export SDVDBACKUP_SCSI_ADR="0,0,0" export SDVDBACKUP_CDRECORD_OPT="padsize=300k fs=16m -eject driveropts=burnfree -data -sao" Ohne Pufferfile export SDVDBACKUP_BUFFER="-" export SDVDBACKUP_MEDIA_CAP=4480m export SDVDBACKUP_CDRECORD="$(scdbackup -where scripts)/pipe_to_cdrecord_sao wodim" Mit Pufferfile export SDVDBACKUP_BUFFER="/dvdbuffer/isofs_dvd" export SDVDBACKUP_CDRECORD="wodim -v" ------------------------------------------------------------------------------- Beschaffung und Installation von growisofs Das Sourcecodepaket von dvd+rw-tools bekommt man von : http://fy.chalmers.se/~appro/linux/DVD+RW/tools/ und installiert es entsprechend den Instruktionen. Mttlerweile finden sich auch Binaerversionen von dvd+rw-tools in Linux Distributionen. Es ist eine gute Idee, das englische Tutorial zu Andy Polyakovs Software zu lesen http://fy.chalmers.se/~appro/linux/DVD+RW/ weil growisofs auch unabhaengig von scdbackup nuetzlich ist. Fehlermeldungscodes (zB. "SK=5h/ASC=21h/ACQ=00h") kann man nachschlagen in http://fy.chalmers.se/~appro/linux/DVD+RW/keys.txt Falls sich keine andere Quelle fuer dvd+rw-tools findet, kann man eine (veraltete) Kopie von scdbackups Website herunterladen http://scdbackup.webframe.org/dvd+rw-tools-5.19-1.4.9.7.tar.gz Tar-Archiv auspacken, Kommando make ausfuehren, dann die Programme in ein Directory kopieren, wo sie von den interessierten Usern ausgefuehrt werden koennen. zB. : cp growisofs dvd+rw-format dvd+rw-mediainfo /usr/bin Mit einem Linux Kernel mit Versionsnummer unter 2.5 muss der EIDE (IDE+ATAPI) DVD Brenner als SCSI-Geraet emuliert werden. Siehe Andys Tutorial oder auch den Anhang IDE in diesem Text, wo ein CD-Brenner per SCSI zugaenglich gemacht wird. Mit neueren Kernels und frischen Versionen von growisofs ist es moeglich, IDE-DVD Brenner direkt ohne SCSI-Emulation zu nutzen. Stellen Sie sicher, das der Devicefile (egal ob SCSI oder IDE) fuer alle interessierten User Schreib- und Lese-Rechte freigegeben hat. ----------------------------------------------------------------------- Anhang DVD-TYPEN (Stand Juni 2008) : Es gibt viele verschiedene Typen von DVD und BD (Blu-ray) Medien. Allgemein muessen die Datentraeger und die Brennerfirmware zueinander passen. Es ist nicht einfach, das im Voraus zu sicherzustellen. Man sollte sich zwar an der Medienliste des Herstellers orientieren, aber auch das ist keine Garantie fuer Erfolg. Ebenso koennen schlecht beleumundete Billig-DVDs durchaus gut funktionieren. Alle meine Brenner kommen gut mit 4x DVD+RW klar. Mein BD Brenner schreibt erfolgreich auf Medien verschiedener Marken. Nur die eine BD-RE Scheibe, die mitgeliefert wurde, ist voellig unbrauchbar. Die verschiedenen Beduerfnisse von DVD+RW und DVD-RW beim Wiederbeschreiben werden von sdvdbackup automatisch beruecksichtigt, wenn bei ./KONFIGURIEREN_DVD die Frage "DVD vor dem Schreiben automatisch loeschen ? (jy1/n0)" mit "j" beantwortet wurde. Diese Automatik erkennt DVD+R, DVD-R, BD-R und laesst bei ihnen das Loeschen aus. DVD+R, DVD+R DL und DVD-R Diese Medien koennen jeweils nur einmal verwendet werden. Man schreibt einen Backup drauf und dann ist Schluss. Keine weiteren Backups mehr auf das selbe Medium. Fuer DVD+R DL braucht man recht neue Versionen der Brennprogramme. Die unuebliche Mediengroesse kann man mit sdvdbackup Option -dvd_dl anmelden. DVD+RW DVD+RW erscheint als das unproblematischste wiederbeschreibbare Medium. Dieser Typ kann ohne besondere Vorkehrung von den Programmen growisofs, cdrskin, cdrecord und wodim zum ersten Mal beschrieben und danach wiederverwendet werden. Ich habe Fuji Film 4xDVD+RW, TDK DVD+RW47C, Tevion/Platinum 4x, Octron 4x getestet. dvd+rw-mediainfo identifiziert allesamt als "Media ID: RICOHJPN/W11". Mittlerweile gibt es unter der Marke Tevion 4x "RITEK/004", die genauso gut zu sein scheinen. Mit Linux Kernel 2.6 kann man DVD+RW wie DVD-RAM benutzen. Allerdings macht die eingeschraenkte Ueberschreibbarkeit DVD+RW fuer rw-gemountete Filesysteme eher ungeeignet. Die "Bandlaufwerk"-Methode klappt aber gut. DVD-RW DVD-RW kann verschiedene Zustaende annehmen, die automatisch das Verhalten beim Brennen bestimmen. Zusaetzlich zu growisofs benoetigt man dvd+rw-format aus dem gleichen Paket dvd+rw-tools. cdrskin und xorriso koennen Formatierung und Loeschen selbst erledigen. cdrecord und wodim koennen selbst loeschen. - Restricted Overwrite DVD kann von sdvdbackup beschrieben werden und bleibt in diesem schreibbaren Zustand. Die DVD muss dafuer nur einmal vorformatiert werden : dvd+rw-format -force /dev/... cdrskin -v dev=... blank=format_overwrite xorriso -outdev ... -format as_needed Bzw.: sdvdbackup_blank Die Brennprogramme cdrecord und wodim koennen DVD-RW weder formatieren noch auf formatierte DVD-RW schreiben. Weniger attraktiv mit sdvdbackup sind die sequentiellen Zustaende. - Sequential Blank .... DVD kann per sdvdbackup geschrieben werden und kommt dadurch in den Zustand Sequential Closed. Sequential Blank ist der Zustand neuwertiger DVD-RW. Beschriebene sequentielle DVD-RW haben einen der beiden folgenden Zustaende: - Sequential Closed DVD kann von sdvdbackup nicht benutzt werden. Sie kann durch Loeschen in den Zustand Sequential Blank kommen : dvd+rw-format -blank=full /dev/... cdrskin -v dev=... blank=all xorriso -outdev ... -blank all cdrecord -v dev=... blank=all wodim -v dev=... blank=all Bzw.: sdvdbackup_blank all - Sequential Appendable DVD kann von sdvdbackup nicht benutzt werden. Man koennte zwar weitere Daten hinzufuegen, aber sdvdbackup trifft nicht die noetigen Vorbereitungen dazu. Die selben Loeschbefehle wie bei Closed sind anwendbar. Ein besonderer Zustand kann Probleme machen und ist besser zu vermeiden: - Sequential Fast Blank DVD kann nur im Schreibmodus DAO geschrieben werden. Dieser verlangt einen Pufferfile oder das Skript pipe_to_cdrecord_sao sowie Modifikationen an den Optionen fuer das Programm cdrskin. De-facto eignet sich dieser Zustand nur fuer den Betrieb ueber die Brennprogramme cdrecord und wodim, die selbst nichts anderes als DAO kennen. Er kann erreicht werden mit: cdrecord -v dev=... blank=fast wodim -v dev=... blank=fast "Restricted Overwrite" ist mit growisofs, cdrskin oder xorriso der unkomplizierteste Modus, wenn man mal seinen irrefuehrenden Namen ausser Acht laesst. Der Zustand ist stabil und aehnelt sehr dem von DVD+RW. Falls es noetig ist, im Sequential-Modus zu schreiben, muss die DVD-RW vor jeder Wiederverwendung geblankt werden. Das dauert so lange wie 4.7 GB zu schreiben, wenn man nicht in den Sequential Fast Blank Zustand geraten will, der sich fuer sdvdbackup zusammen mit den besseren DVD Brennprogrammen nicht eignet. Mit cdrecord und wodim gibt es nur den Schreibmodus -sao und der Datentrager kann die beschriebenen sequentiellen Zustaende annehmen. DVD-RAM growisofs und cdrskin koennen auf DVD-RAM wie auf DVD+RW schreiben. Siehe oben. DVD-RAM wird von Linux Kernels ab 2.4 direkt unterstuetzt. Medienspezifische Formatierung ist nicht noetig. DVD-RAM stellt sich als Platte mit einer einzigen Partition dar. Man kann darauf wie auf einer Festplattenpartition ein Filesystem installieren und es fuer Schreib-Lese-Operationen mounten. sdvdbackup kann die DVD-RAM dann wie eine Plattenfilesystem nutzen (d.h. den Backup in einen File schreiben). Wenn die DVD-RAM *nicht gemountet* ist, kann sdvdbackup sie wie ein Bandlaufwerk ansprechen, dass stark einer DVD+RW aehnelt. Das wird durch das Skript pipe_to_raedchen erreicht, dass man anstelle von growisofs_wrapper verwenden kann. Mit Meldung der uebertragen Megabytes : export SDVDBACKUP_CDRECORD=\ "$(scdbackup -where scripts)/pipe_to_raedchen /dev/sr0 1m 0 -flush" Ohne Schnullermeldungen : export SDVDBACKUP_CDRECORD=\ "$(scdbackup -where scripts)/pipe_to_raedchen /dev/sr0 0 0 -flush" Die Tatsache, dass die langsame DVD-RAM den I/O-Mechanismus mit der Systemplatte teilt, ist der Systemperformance waehrend des Schreibens von DVD-RAM sehr abtraeglich. Daher wird hier die Option -flush von raedchen benutzt, um den Verbrauch von I/O-Puffer in Grenzen zu halten. Die Schreibgeschwindigkeit meiner DVD-RAM war viel schlechter als DVD-RW oder DVD+RW. Es gab auch fehlgeschlagene Verifikationsversuche. Die nutzbare Kapazitaet einer DVD-RAM ist weniger als 4.7e9 Byte. Meine Tests mit Panasonic LM-AF120U Medien ergaben roh 4368m und mit ungetunetem ext2 Filesystem 4076m. sdvdbackup Option -dvd_ram stellt eine passende Groesse fuer rohe DVD-RAM ein. Standardmassig werden DVD-RAM waehrend des Schreibens gegengelesen. Die Schreibgeschwindigkeit liegt dann hoechstens bei der Haelfte des Moeglichen. Viel zu helfen scheint es bei schlechten Medien aber nicht. Die Programme xorriso und cdrskin koennen das Gegenlesen vermeiden und so volle Geschwindigkeit erlangen. DVD-RAM kann man nicht in allen aelteren DVD-ROM-Laufwerken lesen. BD-RE BD-RE aehneln uebergrossen DVD-RAM. Sie werden aber unformatiert verkauft und muessen daher vor Gebrauch formtiert werden. Das wird von den Brenn- programmen automatisch erledigt, kann aber auch schon vorab geschehen durch: dvd+rw-format /dev/... cdrskin -v dev=... blank=as_needed xorriso -outdev ... -format as_needed Man braucht recht junge Programmversionen, um mit BD-RE arbeiten zu koennen. Die nutzbare Groesse haengt von der Individuellen Formatierung ab. Sie liegt im Normalfall bei 22.5g fuer Medien mit nominell "25 GB". sdvdbackup* Kommandos koennen mit diesen Medien umgehen. Ihre Option -bd meldet eine passende Stueckgroesse fuer "25 GB" Medien an. Option -bd_dl ist fuer "50 GB" Medien. BD-RE schreiben normalerweise mit Prueflesen und Austausch schlechter Blocks. Das bremst die Schreibgeschwindigkeit leider um einen Faktor 2 bis 3. Die Brennprogramme xorriso und cdrskin koennen diesen Mechanismus umgehen und mit der vollen nominellen Geschwindigkeit schreiben. Das wird durch den File sdvdbackup_stream_recording_value bzw. die Variable SDVDBACKUP_STREAM_REC kontrolliert. Bei der Konfiguration kann eine entsprechnde Option bei der Frage nach der Geschwindigkeit eingegeben werden. BD-R BD-R koennen nur einmal verwendet werden, wie CD-R oder DVD+R. Sie werden unformatiert verkauft und koennen auch so benutzt werden. Unformatierte BD-R werden nicht durch dauerndes Prueflesen gebremst. growisofs formatiert automatisch vor der ersten Verwendung. Die Brennprogramme xorriso und cdrskin verwenden ggf. unformatierte BD-R. Man kann BD-R vor der Verwendung ausdruecklich formatieren: dvd+rw-format /dev/... cdrskin -v dev=... blank=format_if_needed xorriso -outdev ... -format as_needed sdvdbackup Option -bd meldet "25 GB" Medien an. Option -bd_dl ist fuer "50 GB" Medien. Wenn man unformatierte BD-R Medien bis auf die noetigen 5 % Reserve ausnutzen will, kann man nach den -bd Optionen noch nachbessern -max_size 22.2g bzw. -max_size 44.4g . Dank: Testmedien wurden gestiftet von: Mike Evans, MFaya, Thomas Weber. ----------------------------------------------------------------------- Anhang IDE (Stand Juni 2008) : Dieser Text betrifft nur CD oder DVD Brenner, die an einem ATA-Kontroller unter Linux Kernel 2.4 angeschlossen sind. Anschluesse via SCSI oder USB erscheinen ohne weiteres Zutun als SCSI Geraetefiles. Mit Linux Kernel 2.6 ist die hier beschriebene ide-scsi Emulation in Ungnade gefallen. growisofs, wodim, cdrskin und moderne Versionen von cdrecord koennen ATAPI-Geraete direkt ansteuern. Das geschieht mit Adressen wie ATA:0,1,0 oder ATAPI:0,1,0 . Mit den Programmlaeufen cdrecord dev=ATA -scanbus wodim dev=ATA -scanbus cdrskin dev=ATA -scanbus kann man sich einen Ueberblick ueber moegliche Adressen verschaffen. Obwohl cdrecord Protestmeldungen ausgibt, kann man unter Kernel 2.6 in allen drei Programmen auch Adressen wie "/dev/hdc" verwenden. Solche Adressen bekommt man gelistet mit: wodim --devices cdrskin --devices xorriso -devices growisofs (fuer DVD) akzeptiert auf Kernel 2.6 /dev/hdX spaetestens seit Version 5.17.4.8.6 . Auf Kernel 2.4 sind es Adressen der Form /dev/srN, die weiterhin auch auf Kernel 2.6 vorkommen. Bei Installation einer modernen Konsumentenausgabe von Linux mit Kernel 2.4 sollte ein IDE-Brenner automatisch erkannt und mit ide-scsi Emulation ausgestattet werden. Wenn keine echten SCSI-Geraete vorhanden sind, muesste er als 0,0,0 fuer CD und als /dev/sr0 fuer DVD erreichbar sein. Dann hat man Glueck gehabt und muss nichts weiter machen. Falls nicht (oder falls kein Konsument), muss man selbst Hand ans System legen. Nun also zur Einrichtung der IDE-SCSI Emulation fuer Kernels 2.4 und aelter. Januar 2003: Wie mein IDE-Rekorder auf SCSI-Adresse 1,0,0 kam Das Ganze haengt sehr vom individuellen System bzw. der Distribution ab. Mein SuSE 7.2 war schon ein Jahr lang auf dem Rechner, bevor der neue Brenner seinen dahingeschiedenen Vorgaenger ersetzte. Mit SCSI-Interface war so schnell keiner zu bekommen ... vom Preis ganz zu schweigen. Der IDE-Rekorder (genauer ATAPI-Rekorder) haengt als Master am Secondary IDE-Controller. Also in Linux : hdc LILO : File /etc/lilo.conf Hinzu kommt eine Kerneloption "hdc=ide-scsi" in der append-Zeile append="...vorhandene.Optionen... hdc=ide-scsi" Bei den anderen in lilo.conf konfigurierten Bootsystemen, will ich das nicht. Deswegen setze ich sie nur fuer mein "linux_7" image = /boot/vmlinuz.7.2 append="hdc=ide-scsi" root = /dev/hdb2 label = linux_7 initrd=/boot/initrd.7.2 Danach habe ich als Superuser einmal lilo ausgefuehrt. SuSE 7.2 : File /etc/modules.conf Es gab dort eine Zeile : alias scsi_hostadapter off die ich auf Empfehlung des SuSE 7.2 Updatehandbuchs geaendert habe in : alias scsi_hostadapter ide-scsi Das hat meinem SCSI CD-ROM nicht geschadet. :)) SuSE 7.2 : File /etc/init.d/boot.local Bei mir laedt sich das Kernelmodul ide-scsi nicht automatisch. Ich muesste es wohl irgendwo anmelden ... schulterzuck. Ich lade es aber einfach explizit am Ende von boot.local : /sbin/modprobe ide-scsi Nach dem naechsten Booten erschien bei cdrecord -scanbus ein weiterer SCSI Bus mit einem einzigen Geraet an Adresse 1,0,0 . Als Lesegeraet hat sich der IDE-Rekorder klaglos in die vorbereiteten Mountpunkte des alten SCSI-Rekorders eingefuegt (letztlich /dev/sr1). Das kann Zufall sein, weil das CD-ROM eine niedrigere SCSI-Adresse hatte und vielleicht deshalb schon vor dem Austausch /dev/sr0 war. Wenn man Pech hat, muss man in /etc/fstab sr0 und sr1 vertauschen und/oder die Links /dev/cdrecorder und /dev/cdrom neu legen. Auf die alte SCSI-Adresse kann man den IDE-Rekorder vermutlich nicht einstellen. Leider. Schnell ist er, dieser LITE-ON LTR-48125S. Zumindest, wenn man ihm moderne 12x CD-RW zum scheiben gibt. 6 Minuten fuer 625 MB. Ratzfatz. Die versprochene Sicherheit gegen Buffer Underrun ist wirklich gegeben. Er brennt alte wie neue CDRWs (getestet : 2x 4x 12x , bis zu 4 Jahre alt) wobei cdrecord wie ueblich selbststaendig die Geschwindigkeit reduziert. Mit neueren Versionen von cdrecord mag es noetig sein, waehrend des Laufs von ./KONFIGURIEREN_CD fuer cdrecord -driveropts=burnfree einzustellen. Das Skript ./KONFIGURIEREN_CD weist gegebenenfalls darauf hin. Was man besser nicht macht : Wie man oben sehen kann, habe ich zwei IDE-Platten, die urspruenglich jeweils Master am Primary und am Secondary IDE-Controller waren (also fuer Linux : hda und hdc). Den IDE-Rekorder als Slave hdb an die hda zu haengen, brachte einige Probleme: * Blanken und Fixieren hielten die hda-Platte minutenlang an. * Die Plattenperformance von hda brach waehrend des Datenschreibens massiv ein (ca. 75% weg). * Beim Brennen ohne Puffer von hda auf hdb wird der Schutz gegen Buffer Underrun heftig geprueft (und besteht !). Ohne dieses Feature des Rekorders waere nichts zu machen. Abhilfe : Ich habe deswegen doch gewagt, die hdc-Platte nach hdb umzupflanzen. Bis jetzt habe ich nur /etc/lilo.conf und /etc/fstab modifizieren muessen, damit das SuSE 7.2 auf hdb statt hdc bootet und laeuft. Es scheint alles ok zu sein ... nach 4 Stunden Probebetrieb. Der Rekorder wuergt das System nicht mehr so gnadenlos ab und die Nachteile beim Betrieb der Platten halten sich in Grenzen. Der Mauscursor (fvwm2) ruckelt etwas mehr, wenn grosse Files gelesen werden. Fazit : Solange er seinen eigenen IDE-Controller hat, scheint der Rekorder recht brav. 12x brennen mit einem PentiumIII 669 MHz laesst den anderen Prozessen kaum mehr als einen 133 MHz P5 uebrig, wenn man nicht mit hdparm den DMA-Modus einschaltet. Man kann aber bis auf Speed 2 runtergehen :)) Eine erstrebenswerte Alternative waeren IDE-SCSI Wandler/Bridges/Konverter, die den IDE-Rekorder an den echten SCSI-Bus anschliessen. Sie kosten aber soviel wie ein IDE-Rekorder und sie muessen ATAPI koennen (also EIDE). Dann sind sie meist noch teurer. Sie brauchen auch extra Strom. (Yamaha bietet fuer seine IDE-Rekorder speziell einen SCSI-Konverter an. Es ist nicht rauszufinden gewesen, ob der auch mit anderen Recordern laeuft.) Man sollte wohl mal Mainboards mit mehr als zwei IDE Controllern ausprobieren. Ich bin mittlerweile auf einen neuen Rechner mit LG GSA-4082B DVD Brenner umgestiegen. SuSE 9.0 hat ihn bei der Installation automatisch erkannt und als SCSI-Emulationsadresse 0,0,0 bzw. /dev/sr0 zugaenglich gemacht. Unter dem Kernel-2.6 basierten System RIP-Linux ist er ohne weiteres als /dev/hdc bzw. ATA:0,0,0 nutzbar. ----------------------------------------------------------------------- Anhang NETZ : Um Backups von anderen Computern im Netz zu machen, kann man durchaus vom Rechner mit dem Recorder aus ueber NFS auf die Platten anderer Rechner zugreifen. Das stoesst aber an seine Grenzen, wenn man Superuser sein muss, wenn kein Netzwerkfilesystemzugriff verfuegbar ist oder wenn durch NFS die Fileattribute verfaelscht wuerden (zB. User-ID-Nummern). Wesentlich allgemeiner einsetzbar ist die hier vorgestellte Methode ueber SSH. Sie beruht darauf, dass scdbackup auf jedem der Rechner im Netz installiert wird, von denen Backups gemacht werden sollen. Alle Formatierung wird auf diesen Rechnern durchgefuehrt und lediglich der Datenstrom fuer den Recorder wird ueber das Netz uebertragen. Auf dem Rechner mit dem Brenner hat ein geeigneter User ebenfalls scdbackup installiert und fuer den Brenner passend konfiguriert. Unter seiner Identitaet muss sich der User von scdbackup vom brennerlosen Rechner aus per SSH in den Rechner mit dem Brenner einloggen koennen. Soweit sie fuer das Brennen eines einzelnen Backupstuecks zustaendig ist, wird diese Konfiguration auch fuer das Netzwerkbrennen wirksam. Das betrifft u.a. das Sperrverfahren, das Loeschen von CD-RW, das Puffern des Datenstroms und die Behandlung von Pruefsummen. Nichtsdestotrotz finden auch auf dem brennerlosen Rechner die konfigurierten Aktionen statt. Ein solcher Backup wird also zwei Pruefsummenmarken bekommen. Die erste verifiziert die Datenuebertragung und die zweite den Brennvorgang. Verifizierungsoption -auto ist daher empfehlenswert. Wenn der Brenner nicht absolut stabil gegen Fehlbrennungen wegen zu geringer Datenrate ist, sollte man einen Pufferfile konfigurieren. Die Uebertragungsrate im Netz kann durch aeussere Einfluesse durchaus mal einbrechen. Wenn diese Voraussetzungen gegeben und getestet sind, dann muss man auf den brennerlosen Rechnern ebenfalls scdbackup installieren, wobei man als Adresse fuer den Brenner jeweils "-" eingibt. Ebenfalls noetig sind das Archivprogramm afio und und eines der ISO 9660 Formatierprogramme. Die Rolle des Brennprogramms uebernimmt scripts/pipe_nach_ssh. Auf der Maschine ohne Brenner gibt mal als "Brennprogramm" eine Zielkennung ein username@hostname:passwordflag username und hostname sind die ueblichen ssh Parameter. password_flag ist 0 oder 1, je nachdem ob der SSH server beim Login ein Passwort abfragt. Wenn eine Passwortabfrage erwartet wird, kommt es zu einer Pause von 15 Sekunden und dann einer Abfrage an /dev/tty (nicht an stdin). Man muss deshalb wirklich am Startterminal von scdbackup anwesend sein, um ein Backupstueck schreiben zu koennen. Falls Bedenken wegen eines SSH-Accounts ohne Passwort bestehen, dann sollte man einen Account ohne Shellinterpreter in Betracht ziehen. Statt dessen sollte dieser direkt "scdbackup -pipe_to_media" bzw."sdvdbackup -pipe_to_media" ausfuehren. Man braucht dann natuerlich getrennte Accounts fuer CD und DVD. Passendes schreibkommando und schreiboption ist dann jeweils "-". ZB: .../pipe_nach_ssh ts4 burndvd 0 - - Andere Aufgaben um scdbackup, wie zB. das Verifizieren oder das Loeschen von Datentraegern fuehrt man besser direkt auf dem Rechner mit dem passenden Brenner aus. Man sitzt typischerweise sowieso an der Maschine mit dem Brenner und logt sich in die brennerlosen Rechner per SSH ein um den scdbackup-Lauf zu starten. Der leitet dann wiederum per SSH seinen Datenstrom ein. Es gibt keine Moeglichkeit, die Konfiguration des Netzwerkbrenners von aussen zu ueberstimmen. Verschiedene Anwendungsmodelle brauchen verschiedene User mit verschiedenen Konfigurationen. Beispiele der Konfiguration auf der Maschine ohne Brenner: Zum Brennen auf den Rechner "ts2" per User "thomas", der keine Passwortabfrage erwartet, vorab pruefen, ob die SSH-Verbindung funktioniert : ssh ts2 -l thomas scdbackup -version ./KONFIGURIEREN_CD starten und bei der Abfrage "Welches CD-Brennprogramm ? ( ... )" antworten thomas@ts2:0 Ausserdem sollte man das lokale Loeschen abschalten. Also bei "CD vor dem Schreiben automatisch loeschen ? (jy1/n0)" antworten n Server ts4 fragt User thomas beim Login nach einem Passwort. Fuer ihn muss das passwordflag auf 1 gesetzt werden: thomas@ts4:1 Und auch hier das Loeschen abschalten. Man kann auch kurzfristig vom lokalen Brenner auf einen anderen im Netz umschalten : export SDVDBACKUP_CDRECORD="$(scdbackup -where scripts)/pipe_nach_ssh ts2 thomas 0 sdvdbackup -pipe_to_media" export SDVDBACKUP_BLANKEN=0 ----------------------------------------------------------------------- Anhang TUNING Optimiertes Compilen oder Debugbares Compilen Die Binaerprogramme von scdbackup werden fuer geringe CPU Last und ohne Extracode fuer Debugger hergestellt. Falls die Compileroption -O2 problematisch erscheint, oder falls man die Binaerprogramme wirklich debuggen will, kann man ausfuehren (waehrend die Brenner unbeschaftigt sind): cd $(scdbackup -where inst) export SCDBACKUP_COMPILE_MODE="-debuggable" ./CONFIGURE_CD Dann die Fragen allesamt mit Leerzeilen beantworten. Es muss betont werden, dass die Laufzeit von scdbackup meistens nicht durch seinen CPU-Bedarf sondern durch die Geschwindigkeiten von Festplatte und Brenner bestimmt wird. Optimierung nach dem Compilen Abhangig von der Groesse und Struktur des Backupgebiets kann die Planungsphase von scdbackup einige Zeit duaern. Bei normal strukturierten Directorybaeumen wird die Geschwindigkeit hauptsaechlich von der Leistung des Filesystems bestimmt. Ausser Geschwindigkeitsproblemen kann auch der Speicherverbrauch von scdbackup zu Problemen fuehren. Obwohl scdbackup versucht, mit Speicher sparsam umzugehen muss es doch sehr grosse Baeume und Directories abbilden, die nun mal einigen Platz im Speicher benoetigen. In einigen speziellen Situationen kann man aber leider erleben, dass die Balance von Speicherverbrauch und Laufzeitbeschleunigung absolut unpassend ist und die Brauchbarkeit von scdbackup in Frage stellt. Das liegt daran, dass diese Balance fuer einigermassen wohlgeformte Baeume und Backupgebiete mit normalen Userdaten oder Systemdirectories optimiert ist. Wenn sowohl der Speicher als auch die Laufzeit ein Problem sind, dann bleibt eigentlich nur, das Backupgebiet in mehrere zu unterteilen und davon getrennte, unterschiedlich haeufige Backups zu machen. Die wichtigsten Bereiche bevorzugt. Solange es aber noch Reserven beim Speicher oder bei der Laufzeit gibt, kann es helfen, die Balance zu veraendern. Composition Memory Manche Backupgebiete enthalten sehr grosse Baeume, die an tiefsitzenden Unterdirectories aufgespalten werden muessen, um verdaubare Stuecke zu bekommen. Dabei ist es mehrfach notwendig, die Groessen von Teilbaeumen zu bestimmen, indem das Filesystem abgeklappert wird. Das kann eine ziemliche Zeitverschwendung werden, weil die Groessenbestimmung fuer jede Directoryebene wiederholt werden muss, bevor schliesslich eine Trennstelle gefunden ist. Die Option -composition_memory macht es moeglich, Teilbaeume bis zu einer bestimmten Tiefe und Breite aufzuzeichnen, um ihre Groesseninformationen bei wiederholtem Bedarf nicht mehr aus dem Filesystem lesen zu muessen. Leider kann das einigen Speicher verbrauchen, sodass dieser Beschleunigungspuffer im Normalfall eher knapp bemessen ist. Wenn also die Verarbeitung nach "beginning to compose backup volumes" sehr lange dauert zwischen "... splitting /directory/adresse" und dem Erzeugen der Inhaltsliste "generating -content_list_adr" bzw. dem Ende des Planungvorgangs, dann sollte man einen Lauf mit folgenden Optionen versuchen -composition_memory 5 1000 64m \ -pacifier -timestamp -pacifier -composition_memory Die Zahl 5 gibt die Tiefe des Vorausschauens an (5 Directorystufen) und die Zahl 1000 die Breite, d.h. die maximale Groesse fuer ein Directory an, das aufgezeichnet werden darf. Die Zahl 64m besagt, dass maximal 64 MB an Arbeitsspeicher fuer den Puffer herangezogen werden duerfen. Waehrend des ersten Probelaufs sollten Sie den Speicherverbrauch des Prozesses beobachten. Viel haengt von der dynamischen Speicherverwaltung des Systems ab. Behalten Sie auch die Unterhaltungsmeldungen im Auge, ob nach der Meldung "... splitting /directory/adresse" wieder die selben Directories durchgearbeitet werden wie schon vorher. Bei ausreichender Pufferung sollte sich die Zahl dieser Wiederholungen stark reduzieren. Die Meldungszeile ist mit obigem Beispiel so formatiert : Sekunden Directoryzaehler Pufferzustand Teilbaumgroesse Adresse wobei Pufferzustand aus drei Zahlen besteht : aktuelle_tiefe:zahl_gepufferter_directories:verbrauchte_bytes Wenn das Aufzeichnen wegen Tiefe, Breite oder Speicherlimit gesperrt ist, wird als aktuelle_tiefe ein "X" angezeigt. Der Directoryzaehler ist meist eine einzelne Zahl. Bei grossen Directories kann nach einem "/" noch ein Einzelfilezaehler angezeigt werden. Adresse ist das aktuell untersuchte Fileobjekt bzw. ein Oberdirectory davon. Sie kann gekuerzt sein, damit die Meldung nicht laenger als 79 Zeichen wird. Die Unterhaltungsmeldungen kommen auf stderr heraus. Man kann sie zB. mit scdbackup ... 2>&1 | tee -i /tmp/scdbackup_run.log in einen File umleiten und spaeter (einigermassen lesbar) betrachten mit : $(scdbackup -where bin)/cd_backup_planer -debug_stderr_log \ /tmp/scdbackup_snapstamp ... die Kommandos, um den Snapshot zu erzeugen ... ... angehaltene Dienste und Programme gleich wieder starten ... scdbackup -level_timestamp /tmp/scdbackup_snapstamp -level ... oder ... timestamp=$(date '+%m%d%H%M%Y.%S') ... scdbackup -level_timestamp "$timestamp" -level ... oder einfach um eine Stunde zurueckdatieren ... scdbackup -level_timestamp -1h -level ... ----------------------------------------------------------------------- Anhang SCHREIBER : Der Inhalt des Parameters conf/*_cdrecord_value muss auf ein Programm verweisen, das teilweise mit cdrecord kompatibel sein muss. Dieses Programm wird von scdbackup fuer verschiedene Zwecke gestartet und erhaelt seine Anweisungen ueber Argumente, die von cdrecord verstanden werden. Daher ist die grundlegende Forderung an ein solches Schreibprogramm, dass es beliebige Argumente von cdrecord tolerieren muss, ohne abzubrechen oder unpassende Aktionen durchzufuehren. Zusaetzlich darf es eigene Argumente erwarten, die vor den cdrecord-Argumenten angegeben werden und das Schreibprogramm spezifisch konfigurieren. Es muss erkennen koennen, wo seine Argumente enden und wo die fuer cdrecord beginnen. Das geschieht meistens dadurch, dass die Zahl der eigenen Argumente genau vorgeschrieben ist. Die eigenen Argumente werden zusammen mit der Programmadresse in *_cdrecord_value eingetragen. Fuer scdbackup gehoeren sie fest zum Programm. Ein sehr einfaches Schreibprogramm wird nur die ersten paar Argumente auswerten, die seine Konfiguration bestimmen, und dann alle anderen bis auf das letzte Argument ignorieren. Wenn das letzte Argument "-" ist, dann werden die zu schreibenden Daten aus stdin gelesen. Wenn das letzte Argument die Adresse eines existierenden Files ist, werden die Daten aus diesem File gelesen. In allen anderen Faellen wird das Schreibprogramm nichts tun und enden. Beispiele fuer dieses Verhalten sind pipe_data_to und pipe_nach_ssh . Ein Schreibprogramm kann auch weitere Faehigkeiten anbieten, indem es folgende Optionen akzeptiert und geeignet ausfuehrt. ZB. growisofs_wrapper : -atip Medientyp bestimmen und DVD Typen als "book type:" ausgeben. CD Typen als " Is erasable" bzw. " Is not erasable". blank=type einen Datentraeger formatiern/loeschen/wiederbeschreibbar machen -eject nach getaner Arbeit Datentraeger auswerfen Damit diese Faehigkeiten erkannt und genutzt werden koennen, muss sie das Schreibprogramm in seinem Hilfetext passend ankuendigen. -help gibt englischen Hilfetext aus Darin wird mit folgenden grep-Suchausdruecken nach Schluesselwoertern gesucht: .*-atip.*retrieve .*blank=type .*-eject.*after.*work Solch eine Schreibprogramm muss dann in der Lage sein, diese Auftraege in einer sinnvollen Weise auszufuehren. growisofs_wrapper verwendet dazu die Programme dvd+rw-mediainfo und dvd+rw-format. Andere Schreibprogramme duerfen solche Auftrage je nach ihrem Ausgabemedium geeignet uminterpretieren. Wenn eine der genannten Zusatzfaehigkeiten nicht im Hilfetext des Programms erkannt wird, dann versucht scdbackup ohne diese Faehigkeit auszukommen. Es kann aber sein, dass die Konfiguration von scdbackup von dieser Faehigkeit abhaengt und dass der Backup deshalb nicht ausgefuehrt werden kann. (ZB. wenn zwar blank=type aber kein -atip geboten ist und scdbackup fuer automatisches Loeschen mit automatischer Datentraegererkennung konfiguriert ist.) Die vollstaendigsten Schreibprogramme sind natuerlich moderne Versionen von cdrecord bzw. cdrskin, oder Skripte, die schliesslich alle unerkannten Argumente an besagte Programme weiterreichen. Ein Beispiel fuer solch ein Skript ist pipe_to_cdrecord_sao , das einige Argumente und den Eingabedatenstrom eines cdrecord-Laufes manipuliert. Nichtsdestotrotz deckt das Verhalten von growisofs_wrapper alle Beduerfnisse von scdbackup ab. Ein Schreibprogramm darf einen Versionstext ausgeben -version wenn einziges Argument : Versionstext ausgeben der aber nur dann auf den den grep-Suchausdruck [Cc]drecord zutreffen darf, wenn das Programm -atip, blank und -eject unterstuetzt.