Diskussion:Cpio
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.