Packen und Entpacken mit TAR auf Raspberry Pi

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen!

    Ich hoffe, mir kann hier Jemand helfen. Und zwar möchte ich gerne einen bestimmten Ordner mit dem TAR-Packprogramm auf ein anderes Laufwerk (in meinem Fall ein exFAT formattiertes USB-Laufwerk, das sich in "/media/usb" befindet) packen. Ich hatte gehofft, das mir der "Midnight Commander" da weiterhelfen kann, aber irgendwie funktioniert das Packen nicht so, wie ich es gerne hätte auf das o.g. Laufwerk, sondern immer nur im jeweiligen Ordner, wo die Dateien liegen. Auch mit 7zip hatte ich das Packen und Entpacken schon oer Kommandozeile probiert, was zur Folge hatte, das es mir einfach ohne Nachfrage nach dem Packen den jeweiligen Ordner gelöscht hat (hatte es mit "7ip /opt/retropie" backup.7z" versucht, da ich davon ausgegangen bin, das er mir ein Archiv vom als erstes definierten Ordner erstellen würde, ohne gleich den ganzen Ordner zu löschen). :cursing:

    Jetzt versuche ich es lieber wieder mit TAR. Und zwar möchte ich einfach nur den Ordner "/opt/retropie" samt aller Dateien und Unterordner in einen bestimmten Ordner meines USB-Sticks als TAR-Datei packen (/media/usb/downloads bzw. /media/usb0/downloads). Dabei sollen die übergeordneten Ordner nicht mit enthalten sein. Wie genau stelle ich das an und wie bekomme ich die Datei vom USB-Laufwerk wieder in den ursprünglichen Ordner entpackt, ohne das dieser einfach komplett bzw. ohne Nachfrage überschrieben wird? Und welche Zusatzoptionen sollten gesetzt werden, das auch sämtliche Dateiattribute und evtl. "Symlinks" oder sonstige geschützte Dateien mit archiviert werden?

    Und wie kann ich optional noch eine Komprimierung/Dekomprimierung im xz-Format erzeugen?

    Vielen Dank schonmal im Voraus!

    Einmal editiert, zuletzt von PARALAX (26. Mai 2022 um 20:47)

  • Hallo PARALAX,

    den Befehl man gefolgt von einem Leerzeichen und dem Programmnamen, zu dem Du eine Hilfe benötigst, kennst Du?

    Damit kannst Du Dir Deine Fragen selber beantworten...


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • den Befehl man gefolgt von einem Leerzeichen und dem Programmnamen, zu dem Du eine Hilfe benötigst, kennst Du?

    Den Befehl kannte ich bisher noch nicht. Hatte bislang nur die Hilfeoption genutzt, die aber direkt durchscrollt. Ich werde mir das nochmal genauer anschauen. Als Linux-Neuling fällt mir das nicht gerade leicht, zumal es bei mir auch schon Ewigkeiten her ist, das ich mich mit Shell-Befehlen wie unter MS-DOS beschäftigt habe. Sollte ich nicht weiterkommen, melde ich mich nochmal. Danke erstmal!

  • Als Linux-Neuling fällt mir das nicht gerade leicht, ...

    Die Ubuntuusers haben ein gutes (deutschsprachiges) Wiki, das in den meisten Fällen auch auf andere Debian basierende Derivate übertragbar ist. ;)

    Im Fall von tar gibt es dieses Seite: https://wiki.ubuntuusers.de/tar/

  • Im Fall von tar gibt es dieses Seite: https://wiki.ubuntuusers.de/tar/

    Das hatte ich mir alles schon durchgelesen. Mir geht es jetzt eigentlich nur um die Zuweisung der jeweiligen Verzeichnisse. Was genau ist der Unterschied zwischen der Vorgehensweise mit oder ohne Unix Pipe? Welches ist besser für die Langlebigkeit der SD-Karte?

    Ich würde es nun wie folgt versuchen:

    Code
    tar -czvf backup.tar.gz /opt/retropie

    Oder sollte ich es lieber so machen?

    Code
    tar cvf - /opt/retropie | gzip > backup.tar.gz

    Edit:

    Code
    sudo tar -cvf /opt/retropie | gzip > /media/usb/backup1.tar.gz 

    klappt übrigens nicht. Da bekomme ich nur die Meldung "tar: Anlegen eines leeren Archivs wird feige verweigert" Was mache ich falsch? :/

    3 Mal editiert, zuletzt von PARALAX (26. Mai 2022 um 22:40)

  • Moin PARALAX,

    mach einfach tar -cvzf archivname.tar.gz  /verzeichnis/was/gesichert

    Als Beispiel:

    tar -cvzf test1.tar.gz /home/bernd/Code

    Ergebnis:  -rw-r--r-- 1 bernd users 1558904 26. Mai 23:34 test1.tar.gz

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Vielen Dank für die hilfreiche Info! :* Leider mußte ich gerade feststellen, das die ganzen übergeordneten Ordner mitgepackt und dementsprechend auch entpackt wurden, was ich so nicht wollte. Wie kann ich das unterbinden?

  • Moin PARALAX,

    tar -cvzf Archiv.tar.gz Das ist die "Grundstruktur". Als letzten Parameter muss die "Quelle" genannt werden. Da kannst du das Verzeichnis oder auch die Dateien benennen, die in das Archiv rein sollen.

    Ist das nun klarer ausgedrückt?

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Ist das nun klarer ausgedrückt?

    Ich versuche es irgendwie nachzuvollziehen, aber es fällt mir leider sehr schwer die Zusammenhänge zu verstehen. Tut mir leid! Ich würde es wohl besser verstehen, wenn ich gleich die komplette Befehlszeile bekäme, für das was ich vorhabe. Aktuell wollte ich nur den Unterordner "retropie" aus dem übergeordneten Verzeichnis "opt" packen und zwar ohne die übergeordneten Verzeichnisse. Zumindest das korrekte Zuweisen der jeweiligen Quell- und Zielangaben habe ich mittlerweile hinbekommen:

    Packen mit TAR (ohne gzip):

    Code
    sudo tar -cvf /media/usb/backup.tar /opt/retropie

    Packen mit TAR & gzip in einem Rutsch ohne erneutes packen:

    Code
    sudo tar cvf - /opt/retropie | gzip > /media/usb/backup.tar.gz

    Beides hat auch geklappt. Allerdings hat er den übergeordneten Ordner "opt" mit übernommen, auch wenn in den Unterordnern nur "retropie" auftaucht. Insgesamt befanden sich in "opt" zwei Unterordner, von denen wie gewollt nur "retropie" auftaucht. So weit - so gut! Nur sollte der übergeordnete Ordner (opt) da nicht noch mit rein.

    Entpackt habe ich die TAR-Datei wie folgt:

    Code
    sudo tar -xvf /media/usb/backup.tar -C /opt

    Allerdings befindet sich jetzt halt in "opt" nochmal der gleiche Ordner und dann erst "retropie", also "opt/opt/retropie" anstatt "opt/retropie", wie ich es eigentlich haben wollte.

    Wie ich die gzip-Datei mit derselben Methode dorthin entpackt bekomme, habe ich leider noch nicht rausfinden können. Sämtliche Versuche das so zu entpacken, wie ich es wollte enden nach wie vor in einer Fehlermeldung. :(

  • Moin PARALAX,

    gut, dann die ganze Zeile:

    tar -cvzf retropie.tar.gz /opt/retropie

    Oder du gehst in den Ordner opt mit cd /opt und dann tar -cvzf /home/deinhomeverzeichnis/retopie.tar.gz retorpie

    Wenn du wie hier:

    tar -cvzf test1.tar.gz /home/bernd/Code

    eingibst, dann wird der ganze Pfad gesichert. Aber nur der Pfad und nicht der gesamte Inhalt.

    Irgendwie habe ich das Gefühl, das du mit den Begriffen nicht wirklich klar kommst.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • tar -cvzfretropie.tar.gz /opt/retropie

    Genauso habe ich es ja gemacht, mit dem einzigen Unterschied, das ich gleich noch das Zielverzeichnis angegeben habe, wohin die gepackte Datei landen soll und die gzip-Komprimierung weggelassen habe.

    Code
    sudo tar -cvf /media/usb/backup.tar /opt/retropie

    Dennoch wird dabei auch das übergeordnete Verzeichnis mit hineingepackt, was ich nicht wollte. Konnte bisher auch noch keine Lösung dafür finden, außer die jeweiligen Verzeichnisse mit dem "Midnight Commander" wieder an ihren richtigen Platz zu verschieben.

    Ich bin seit zwei Jahrzehnten eigentlich nur noch GUI's bzw. den Total Commander unter Windows gewohnt, der all diese Dinge automatisch übernimmt, sobald man sich in den jeweiligen Ordnern befindet. Leider gibt es da zwischen dem "Midnight Commander" noch einige Unterschiede, so das man z.B. Dateien nicht sofort auf das Ziellaufwerk packen kann, sondern immer nur im jeweiligen Ordner, in dessen man die gepackte Datei dann erst wieder verschieben muß.

    Einmal editiert, zuletzt von PARALAX (27. Mai 2022 um 02:31)

  • Irgendwie habe ich das Gefühl, das du mit den Begriffen nicht wirklich klar kommst.

    Da fehlt noch ein wenig zum Verständnis.

    Ich versuche es nochmal zu erklären.

    PARALAX

    Wenn du z.B.

    Code
    tar -cvzf Archiv.tar.gz /opt/retropie/Mario

    eingibst, dann wird der gesamte Pfad /opt/retropie (ohne Daten) mitgesichert.

    Nur das Verzeichnis "Mario" wird mit den entsprechenden Unzterverzeichnissen gesichert.

    Wenn du das absolut nicht willst, dann musst du vorher in das Verzeichnis /opt/retropie wechseln.

    Code
    cd /opt/retropie

    Danach kannst du dann mit

    Code
    tar -cvzf /home/pi/Archiv.tar.gz Mario
     
    # /home/pi/Archiv.tar ist der Speicherort und der Name des Archivs.
    # Mario ist das Verzeichnis, das sich dann anschliessend im Archiv befindet.

    das Verzeichnis "Mario" sichern.

    Dann befindet sich auch nur das Verzeichnis "Mario" samt Unterverzeichnissen und Daten in der tar-Datei.

    Das hat dir Bernd666 in #11 aber auch schon geschrieben.

    Allerdings musst du dann beim Zurücksichern aufpassen, dass du die tar-Datei auch im richtigen Verzeichnis entpackst.


    Ich denke mal, dass das jetzt verständlich war.

  • Es gäbe da bei tar auch noch eine -C Option.

    Aber im obigen Ubuntuusers Link (samt Links ) ist das alles beschrieben.

    Und wenn einmal das Internet nicht funktioniert (oder keine Flatrate bezahlt wird), gibts immer noch < man tar >, < tar -? >=< tar --help >, < tar --usage >


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Wenn du das absolut nicht willst, dann musst du vorher in das Verzeichnis /opt/retropie wechseln.

    Warum? Dafür hat tar -C, wie hier bereits mehrmals genannt wurde.

    tar -czf test.tar.gz -C /pfad/zum/ziel/ .

    Um im Beispiel zu bleiben

    tar -cvzf /home/pi/Archiv.tar.gz -C  /opt/retropie/ Mario/

    Wenn du nichts zu sagen hast, sag einfach nichts.

    Einmal editiert, zuletzt von llutz (27. Mai 2022 um 11:24)

  • Um im Beispiel zu bleiben

    Klar, viele Wege führen nach Rom, und der Weg über -C ist wohl der bessere.

    Allerdings benutze ich tar selten. Da ich heute morgen um 4.30 Uhr auch keine große Lust verspürt habe mich in die man tar einzulesen, habe ich dann den Weg über einen Verzeichniswechsel mit cd beschrieben.

    Dieser wurde auch schon in #11 erwähnt.

    Allerdings hast du in deinem Post bei /opt/retropie/ Mario/ einen "Fipptheler" ;)

  • Danke für die hilfreiche Erklärung. Ist alles ziemlich kompliziert in meinen Augen, vor allen Dingen, weil es doch so einfach sein könnte, wenn "Midnight Commander" mittlerweile den Funktionsumfang von Total Commander hätte. Dort wird im Zielfenster automatisch nur das in den gepackten Ordner gesichert, was man im Quellfenster auch markiert hat. Leider versagte auch der Versuch, die Dateien mit XArchiver zu packen mit irgendeiner Fehlermeldung aufgrund der vielen Dateien (welche genau habe ich vergessen, aber es war irgendwas Linux-Spezifisches). Das nimmt mir doch ein wenig die Freude am neuen Raspi. :|

  • Moin PARALAX,

    ist dieses Thema eigentlich erledigt?

    Wenn ja, dann, bitte, als erledigt markieren. Das geht oben bei "Thema bearbeiten".

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!