Diskussion:Cpio

Aus Foxwiki

Backup mit cpio

cpio erzeugt und verwaltet Dateiarchive verschiedener Formate

cpio {-o|-create} [-0acvABLV] [-C Anzahl] [-H Format] [-M Nachricht] [-O [[User@]Host:]Datei] [-F [[User@]Host:]Datei] [-file=[[User@]Host:]Datei] [-format=Format] [-message=Nachricht] [-null] [-reset-access-time] [-verbose] [-dot] [-append] [-block-size=Größe] [-dereference] [-io-size=Größe] [-force-local] [-help] [-version] < Liste [> Datei] cpio {-i|-extract} [-bcdfmnrtsuvBSV] [-C Anzahl] [-E Datei] [-H Format] [-M Nachricht] [-R [User][:.][Gruppe]] [-I [[User@]Host:]Datei] [-F [[User@]Host:]Datei] [-file=[[User@]Host:]Datei] [-make-directories] [-nonmatching] [-preserve-modification-time] [-numeric-uid-gid] [-rename] [-list] [-swap-bytes] [-swap] [-dot] [-unconditional] [-verbose] [-block-size=Anzahl] [-swap-halfwords] [-io-size=Anzahl] [-pattern-file=Datei] [-format=Format] [-owner=[user][:.][Gruppe]] [-no-preserve-owner] [-message=Nachricht] [-force-local] [-help] [-version] [Muster...] [< Datei] cpio {-p|-pass-through} [-0adlmuvLV] [-R [user][:.][group]] [-null] [-reset-access-time] [-make-directories] [-link] [-preserve-modification-time] [-unconditional] [-verbose] [-dereference] [-owner=[User][:.][Gruppe]] [-dot] [-no-preserve-owner] [-help] [-version] Zielverzeichnis < Liste

cpio ist ein Tool zur Erzeugung und Verwaltung von Dateiarchiven. In einem Dateiarchiv werden mehrere Dateien mit ihren Verzeichnissen und allen Verwaltungsinformationen, wie Eigentümer, Zugriffsrechte Erzeugungszeit etc., zu einer einzigen Datei oder zu einem Datenstrom zusammengefaßt. cpio erzeugt und verarbeitet eine ganze Reihe verschiedener Archivformate. Deshalb ist es besonders gut für den Austausch von Datenbeständen zwischen unterschiedlichen Rechnern geeignet.

cpio kann in drei verschiedenen Modi arbeiten.

Im copy-out Modus werden Daten aus dem Dateisystem in ein Archiv, zum Beispiel auf ein Magnetband, geschrieben. Die Namen der zu archivierenden Dateien liest cpio Zeilenweise von der Standardeingabe. Eine gängige Methode zur Erzeugung einer geeigneten Liste von Dateinamen ist die Verbindung des Ausgabekanals von [../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node54.html#find find] mit dem Eingabekanal von cpio durch eine Pipeline.

Im copy-in Modus werden die Daten vom Archiv in das Dateisystem kopiert. In diesem Modus liest cpio die archivierten Daten von der Standardeingabe. Wenn nicht das gesamte Archiv ausgepackt werden soll, können die gewünschen Dateien durch reguläre Ausdrücke nach den Optionen auf der Kommandozeile angegeben werden.

Im copy-pass Modus werden die Daten wie bei copy-out aus dem Dateisystem gelesen und sofort wieder in ein anderes Verzeichnis geschrieben, ohne daß zwischendurch ein Archiv erzeugt wird. Die Namen der zu kopierenden Dateien werden wie bei copy-out von der Standardeingabe gelesen, der Name des Zielverzeichnisses muß in der Kommandozeile nach den Optionen angegeben werden.

Optionen

-a veranlaßt cpio, nach dem copy-out die letzte Zugriffszeit vor dem Lesen zurückzusetzen
-A die Dateien werden an ein existierendes Archiv angehängt (nur im copy-out Modus auf Blockgeräten möglich)
-b veranlaßt cpio, beim extrahieren von Daten die Bytes von Datenwörtern und Halbwörtern zu tauschen
-B setzt die Blockgröße auf 5120 Bytes anstelle der voreingestellten 512 Bytes
-block-size=Anzahl setzt die Blockgröße auf Anzahlx512 Bytes
-c veranlaßt tar, das alte, portable ASCII Archivformat zu benutzen
-C Größe setzt die Blockgröße (Größe in Bytes)
-d veranlaßt tar, beim Auspacken eines Archivs die notwendigen Verzeichnisse zu erzeugen, wenn sie noch nicht existieren
-E Datei die Liste oder die regulären Ausdrücke zur Bestimmung der zu kopierenden Dateien wird aus der angegebenen Datei und nicht von der Standardeingabe gelesen
-f verkehrt die Wirkung der Listeoder des Musters ins Gegenteil; es werden die Dateien kopiert, die nicht auf das Muster passen
-F [[User@ ]Host:]Datei veranlaßt tar, die angegebene Datei als Archivdatei zu benutzen
-force-local erzwingt die Interpretation eines Archivnamens bei den Optionen -F, -I und -O als lokale Datei, auch wenn in dem Dateinamen ein Doppelpunkt vorkommt
-H Format bestimmt eines der folgenden Archivformate (bei copy-in werden die unterstützten Formate automatisch erkannt):

bin (Voreinstellung bei copy-out) veraltetes Binärformat

odc das alte, portable POSIX-1 Format

newc das neue, portable SVR4 Format; für große Dateisysteme mit mehr als 65536 I-Nodes geeignet

crc wie newc mit zusätzlicher Prüfsumme

tar das alte tar Format

ustar das POSIX-1 tar Format und das GNU-tar Format

hpbin das alte Binärformat des HPUX-cpio

hpodc das portable POSIX-1 Format von HPUX; unterscheidet sich in der Speicherung von Gerätedateien

-i schaltet cpio in den copy-in Modus; die in der Liste angegebenen Dateien werden aus dem Archiv in das System hinein kopiert
-I [[User@ ]Host:]Datei verbindet die Standardeingabe von cpio mit der Datei; gegebenenfalls wird die Verbindung zum Rechner Host hergestellt und die Archivierung mit den Rechten von User ausgeführt
-k ohne Funktion
-l wenn möglich werden Dateien nicht kopiert sondern symbolische Links erzeugt
-L im copy-out oder -pass Modus werden nicht die symbolischen Links kopiert, sondern die referenzierten Dateien
-m das Datum der letzten Änderung bleibt beim Kopieren unverändert
-M Nachricht veranlaßt cpio, die Nachricht auf die Standardfehlerausgabe zu schreiben, wenn das Backup-Medium voll ist; der Platzhalter `%d' kann benutzt werden, um in der Nachricht die laufende Nummer des aktuellen Bandes auszugeben (Start bei 1)
-n die User- und Gruppen-ID der archivierten Dateien wird beim Listing in numerischer Form ausgegeben
-no-preserve-owner (Voreinstellung für User ohne root-Privilegien) beim Extrahieren von Dateien aus dem Archiv oder beim Kopieren wird die archivierte User- und Gruppen-ID nicht auf die extrahierten Dateien übertragen
-o schaltet cpio in den copy-out Modus; die in der Liste angegebenen Dateien werden aus dem System heraus kopiert und ein Archiv angelegt oder erweitert
-O [[User@ ]Host:]Datei verbindet die Standardausgabe von cpio mit der Datei; gegebenenfalls wird die Verbindung zum Rechner Host hergestellt und die Archivierung mit den Rechten von User ausgefüチhrt
-p schaltet cpio in den copy-pass Modus
-r erlaubt dem Anwender die interaktive Umbenennung von Dateien im copy-in Modus
-R [User ][:.][Gruppe ] die entsprechenden Benutzerrechte vorausgesetzt, werden Eigentümer und/oder Gruppe der Dateien beim Extrahieren geändert
-s die Bytes eines Halbwortes werden beim Extrahieren der Daten vertauscht
-S die Halbworte eines Wortes werden beim Extrahieren der Daten vertauscht
-t zeigt den Inhalt des Archives an
-u beim Extrahieren werden Dateien im Dateisystem ohne Nachfrage durch gleichnamige Dateien aus dem Archiv überschrieben, auch wenn diese älter sind
-v zusammen mit -t wird ein ausführliches Listing des Archivinhalts ausgegeben
-V für jede bearbeitete Datei wird ein Punkt in den Standardfehlerkanal geschrieben
-0 die Elemente der Liste können durch Nullbytes anstelle der normalerweise erwarteten NEWLINE übergeben werden

cpio (cpio in/out) besitzt einen ähnlichen Funktionsumfang wie das zuvor beschriebene Kommando tar, so dass wohl eher die Vorliebe des Benutzers das eine oder andere Werkzeug favorisiert. Ein Vorteil wäre dennoch zu nennen: cpio verzweifelt nicht an beschädigten Archiven und vermag zumindest den unversehrten Teil komplett wieder herzustellen.

cpio MODUS [ OPTIONEN ]

cpio kennt drei Betriebsarten: * copy in zum Extrahieren von Dateien aus einem Archiv: Option -i

  • copy out zum Erzeugen eines Archivs: Option -o
  • pass througth als Kombination aus den obigen Modi erlaubt das Kopieren ganzer Verzeichnisbäume: Option -p

Volles und inkrementelles Backup

Um Dateien in einem cpio-Archiv zu speichern, müssen deren Namen dem Kommando mitgeteilt werden. cpio erwartet allerdings, dass jeder Dateiname auf einer neuen Zeile erscheint. Deshalb füttert man das Kommando am einfachsten über eine Pipe:

user@sonne> ls *.txt | cpio -o > /dev/fd0

11 blocks

Das Beispiel sichert alle auf ".txt" endenden Dateien des aktuellen Verzeichnisses auf die Diskette. Die Ausgabeumleitung ist wichtig, da sonst die Dateiinhalte auf dem Bildschirm landen würden.

Hiermit kennen Sie nun das Prinzip des Backups mit cpio ; zur Implementierung eines inkrementellen Backups bietet sich die Nutzung der Möglichkeiten des Kommandos [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Datei_%26_Verzeichnis#find_-_Dateien_suchen find ]an, mit dem nach den verschiedensten Kriterien nach Dateien gefahndet werden kann. So archiviert der Aufruf von:

user@sonne> find /etc -maxdepth 2 -depth | cpio -o > /dev/fd0

319 blocks

alle Dateien aus dem Verzeichnis /etc, wobei alle Unterverzeichnisse, nicht aber die darin befindlichen Unterverzeichnisse berücksichtigt werden. Die Option »-depth« von find bewirkt, dass der Name eines Verzeichnisses selbst erst nach den enthaltenden Daten ausgegeben wird. Bei eventuellem Zurückschreiben der Daten, wird nun der häufige Fehler verhindert, dass ein Verzeichnis mit »falschen« Zugriffsrechten erzeugt wurde und anschließend das Übertragen der Daten in dieses scheitert. Durch die hier gewählte Reihenfolge wird mit der ersten Datei aus dem Verzeichnis dieses mit den korrekten Rechten gesetzt (mit Rechten, die das Schreiben der Datei ermöglichen).

Im Sinne eines inkrementellen Backups ist aber sicher die Suche nach Dateien, die innerhalb einer bestimmten Zeitspanne geändert wurden, interessant. Der nächste Aufruf findet alle Dateien des Verzeichnisses /etc, deren Modifikationszeit nicht älter als 5 Tage ist:

# find /etc -mtime -5 -maxdepth 2 -depth | cpio -o > /dev/fd0

112 blocks

Überprüfung des Archives

Um sich eine Liste der Dateien eines Archives zu betrachten, ruft man das Kommando im »copy in«-Modus auf:

user@sonne> cpio -itvI /dev/fd0

-rw-r--r--   1 root     root          270 Aug 15 07:07 /etc/mtab
-rw-r--r--   1 root     root         2510 Aug 10 13:49 /etc/logfiles
-rw-r--r--   1 root     root        37911 Aug 15 07:06 /etc/ld.so.cache
-rw-r--r--   1 root     root          271 Aug 10 15:27 /etc/hosts.allow
-rw-r--r--   1 root     root         5762 Aug 10 15:27 /etc/inetd.conf
-rw-r--r--   1 root     root         3349 Aug 14 12:18 /etc/printcap
-rw-------   1 root     root           60 Aug 15 07:06 /etc/ioctl.save
-rw-r--r--   1 root     root         3799 Aug 15 09:10 /etc/XF86Config
-rw-------   1 root     root          512 Aug 15 07:07 /etc/ssh_random_seed
-rw-r--r--   1 root     root         3309 Aug 14 12:18 /etc/printcap.old
-rw-rw----   1 lp       lp           1244 Aug 14 12:05 /etc/apsfilterrc.ljet4
-rw-rw----   1 lp       lp           1261 Aug 14 12:37 /etc/apsfilterrc.lj4dith
-rw-r--r--   1 root     root           88 Aug 15 09:38 /etc/dumpdates
drwxr-xr-x  30 root     root            0 Aug 15 08:28 /etc
112 blocks

Die Option -t bewirkt die Anzeige des Archivinhalts und verhindert das Entpacken. -v bringt die Rechte der Dateien zum Vorschein und -I Archiv lässt cpio die Daten aus dem Archiv anstatt von der Standardeingabe lesen.

Ein Vergleich der Dateien im Archiv mit den Dateien im Verzeichnisbaum ist nicht direkt möglich. Hier kann nur ein Entpacken der Daten in ein separates Verzeichnis mit anschließendem Dateivergleich (zum Beispiel mit diff) helfen.

Recovery

Schließlich möchte man die Daten auch wieder zurückschreiben können. Hierzu ist cpio im »copy-in«-Modus wie folgt zu starten:

# cpio -id /etc/mtab < /dev/fd0

cpio: /etc/mtab not created: newer or same age version exists
112 blocks

Im Beispiel stellt cpio nur fest, dass die gewünschte Datei nicht älter ist als die im Archiv enthaltene Version. Also tut das Kommando nichts. -d erzwingt das Anlegen von Verzeichnissen, falls diese nicht schon existieren, die nachfolgende Angabe von zu rekonstruierenden Dateien kann entfallen, dann werden alle Dateien aus dem Archiv extrahiert.