SD Karte - klonen benutzter Bereiche

  • ich weiß, es gibt viele ähnliche Themen. Ich hoffe, trotzdem noch etwas Neues erfahren zu können.


    Ich habe einen Raspberry für Mess- und Steuerungsaufgaben aufgesetzt.
    Ich benötige dabei nur ca. 4GB für meine Raspbian Partition, inkl. Daten sowie ausreichend freien Speicher.


    Wöchentlich schickt der PI seine Partition per W-LAN an ein NAS (einer der Gründe warum ich gerne eine kleine Partition verwende): dd if=... of=...
    Hier sollte also maximal eine Woche verloren gehen.
    Zusätzlich sichere ich noch die Daten jede Nacht, ebenfalls auf dem NAS.
    Datenverlust hoffentlich nur maximal einen Tag.



    Kleine, schnelle SD Karten gibt es ja kaum noch zu günstigen Preisen.
    Ich kaufe also eine 16 oder gar 32GB Karte und dachte mir:
    wenn die Speicherzellen durch zu viel Schreiben an einer Stelle mal kaputt sind, kann ich die Partition einfach auf den nächsten Speicherbereich der SD Karte kopieren.
    1. Stimmt das eigentlich ???


    Auf der Karte befindet sich neben der 4GB Partition noch eine zweite mit ca 70MB.
    2. Ist die zum Booten oder hat das mit dem Pi gar nichts zu tun? Bei mir hatte /dev/sde zwei Unterverzeichnisse sde1 (~70MB) und sde2 (~4GB).
    dd if/dev/sde of=... wollte leider die gesamten 32GB sichern. Sicherlich korrekt von dd aber unnötig und auch bei schneller Karte sehr langwierig.


    3. muß ich sinnigerweise dann immer beide Partitionen sichern und zurückspielen?


    4. Welche Möglichkeit nutzt Ihr um möglichst automatisiert
    a) benutzte Bereiche einer bestehenden SD Karte zu sichern und
    b) auf einer leeren Speicherkarte wiederherzustellen?


    Danke vielmals

  • Die 70MB sind die Bootpartition, die sollten tunlichst da drauf bleiben.


    Ich würde das so handhaben:
    - alle 16GB freigeben
    - ein Abbild der funktionierenden Karte ablegen, inklusive Bootpartition
    - über Wifi nur die Daten sichern, eventuell inkrementell


    Den Großteil der Karte musst Du nicht jedesmal mit sichern, der ändert sich ja nicht. Wenn genug Platz auf der Karte ist, sollten die Daten bei fehlerhaften Blöcken woanders landen.

  • Um das komplette Image zu sichern wäre evtl. pishrink das was Du suchst. Hier http://www.forum-raspberrypi.d…-verkleinern-mit-pishrink gab es einen Thread dazu. Beachte mein Edit in Beitrag #8 und #39. Das ganze vielleicht mit Umweg... erst verkleinern auf z.B.USB-Stick und das dann übers Netzwerk zur NAS. :denker:

  • beim Pi B habe ich leider keinen USB-Port mehr frei (W-LAN Adapter + USB Teil welches die Daten der Wettersensoren empfängt).
    Und beim Zero W brauche das Empfangsteil für die Sensoren ja auch.


    Aber ja, es macht sicher Sinn nur benötigte Daten zu sichern - so viel Rechenpower haben die kleinen Pi ja auch nicht.

    Edited once, last by obod0002 ().

  • Naja, das ist weniger eine Frage der Rechenpower, die Dinger sind immerhin 100mal schneller als mein erster Rechner.


    Für mich wäre das auch eine Frage der Datenverfügbarkeit. An täglich inkrementierte Dateien, die als csv in einem Verzeichnis stehen komme ich deutlich leichter ran als an ein Image mit 4GB, welches ich dann nach den Dateien durchsuchen muss. Deswegen habe ich mich für meine Datenlogger auch gegen eine Datenbank und für einfache textbasierte csv entschieden, die ich mit jedem Texteditor öffnen kann.

  • Quote from "obod0002" pid='299712' dateline='1505392600'

    Bei mir hatte /dev/sde zwei Unterverzeichnisse sde1 (~70MB) und sde2 (~4GB).
    dd if/dev/sde of=... wollte leider die gesamten 32GB sichern. Sicherlich korrekt von dd aber unnötig und auch bei schneller Karte sehr langwierig.


    3. muß ich sinnigerweise dann immer beide Partitionen sichern und zurückspielen?


    /dev/sde ist das ganze "Gerät" (Karte/Device)
    /dev/sde1 ist die Partition Nr.1 auf /dev/sde


    dd if=/dev/sde2 of=/piSicherung/partition2 sichert nur die Partition Nr.2 (root-Partition)


    Jedes (Block-)Device hat eine Partitionstabelle, meistens als MBR (Master-Boot-Record), in der mit einem Partitionierungsprogramm 4 primäre, oder 3 primäre und eine erweiterte Partition erstellt werden können. In der erweiterten Partition können (bis 124) weitere logische Partitionen erstellt werden. In einer Partition wird dann ein Filesystem erstellt. Jede Partition wird durch einen Start- und einen Endesektor dem Speichermedium zugeordnet.


    Du kannst die Partitionsnummern der primären Partitionen 1 - 4 untereinander umändern, genauso die logischen Partitionen 5 - 124.


    Um die root-Partition von den verwendeten Sektoren des /dev/sde2 zu verschieben, kannst Du eine weitere Primäre Partition Nr.3 hinter der Sektorgrenze der bisherigen /dev/sde2 mit derselben (!! wichtig !!) Sektoranzahl erstellen, mit dd sde2 auf sde3 kopieren und die Partitionsnummern von 2 auf 4 und von 3 auf 2 umbenennen. Wenn alles richtig läuft kannsr Du Nr.4 löschen.


    Deine Partitionierungsprogramme findest Du unter < apropos partition >


    Bei mir werden z.B. mit <# gdisk -l /dev/sda > alle Partitionsinformationen der sda Festplatte angezeigt.



    Servus !

    RTFM = Read The Factory Manual, oder so

    Edited once, last by RTFM ().

  • Also bei mir sagt "sudo fdisk -l":



    Dabei ist mmcblk0 die SD-Karte mit 16GB, mmcblk0p1 ist der darauf befindliche Bootsektor, mmcblk0p2 ist die Raspbian-Partition.


    mmcblk0p2 wird dann als sda2 gemountet, siehe "df -h":


    Code
    Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
    /dev/sda2        15G    5,6G  8,5G   40% /


    sdb... ist eine extern angeschlossene SD-Karte oder ein USB-Stick:


    Code
    /dev/sdb1       977M     47M  931M    5% /media/pi/STICK
  • Wen du die /-Partition auf 4GB lässt, und diese mittels dd sicherst, also nicht die komplette Karte, kannst du diese Partition, in der richtigen Reihenfolge auf eine passende Karte jederzeit zurückschreiben.


    Ich würde die /-Partition nicht über die komplette Karte ausdehnen, da du hiermit der Firmware der karte die Möglichkeit nimmst, defekte Blöcke über den freien Platz zu 'reparieren'
    Zwar hält die FW der Karte schone einen gewissen Bereich zurück, um defekte Blöcke zu ersetzen, doch wenn du die Karte nicht komplett belegst, lässt du einer guten FW diesen Rest zusätzlich zum Selberverwalten.


    Du kannst auch ein dd des belegten Platzes machen, also auslesen, welches der letzte belegte Block der /-Partition ist, und dann von Block 0 bis zu diesem Block (plus einem weiteren Block) in eine Datei schreiben. Damit hättest du dann erstens die 'komplette' Karte und zweitens müsstest du beim Zurückspielen nicht darauf achten, dass du nichts vergisst.
    Das spart später Zeit.


    Übrigens, wenn du dd über eine Pipe schickst, kannst du das Ergebnis gleich komprimieren, ohne zusätzliche Schreibvorgänge auf die Karte.

    Selber denken,
    wie kann man nur?

  • Quote from &quot;Timm Thaler&quot; pid='299826' dateline='1505437745'

    Dabei ist mmcblk0 die SD-Karte mit 16GB, mmcblk0p1 ist der darauf befindliche Bootsektor, mmcblk0p2 ist die Raspbian-Partition.


    Hoppala !


    mmcblk0p1 ist nicht der Bootsektor, sondern die Partition Nr.1 (Bootpartition).



    Servus !

    RTFM = Read The Factory Manual, oder so

  • Quote from &quot;Rasp-Berlin&quot; pid='299834' dateline='1505454883'


    Du kannst auch ein dd des belegten Platzes machen, also auslesen, welches der letzte belegte Block



    Übrigens, wenn du dd über eine Pipe schickst, kannst du das Ergebnis gleich komprimieren, ohne zusätzliche Schreibvorgänge auf die Karte.


    das hört sich beides sehr interessant an.
    Hättest du die Befehle dafür bitte?


    Beim Zurückspielen auf eine leere Speicherkarte erzeugt dd dann automatisch auch die jeweiligen Partitionen in der jeweils korrekten Größe?

    Edited once, last by obod0002 ().

  • apropos pipe, man sh (insbes. | > )
    man dd (v.A.: ibs, obs, bs; seek=N, skip=N) abhängig von Deiner Plattengeometrie und den Partitionsgrenzen.


    Servus !

    RTFM = Read The Factory Manual, oder so

    Edited once, last by RTFM ().

  • ich hab's wohl ungeschickt formuliert: wie bekomme ich die jeweiligen Daten der genutzten Speicherkarte in den Aufruf von dd -rtfq "möglichst automatisiert"

  • Code
    sudo bash -c "dd if=/dev/sda2 | bzip2 > /media/disk/sda2-backup-10august09.bz2"


    Damit sich "sudo" auf den kompletten Befehl auswirkt, und nicht nur das "dd"


    Und natürlich das Device und den Pfad anpassen.
    Du kannst natürlich auch "gzip" oder einen anderen Komprimierer einsetzten, der über dei Kommandozeile komprimiert. Dann aber auch nicht vergessen, die Dateierweiterung anzupassen, damit man weiß, mit was das komprimiert wurde.

    Selber denken,
    wie kann man nur?

  • Hallo obod0002 !


    Wenn alles automatisiert ablaufen soll, bist Du bei Linux irgendwie falsch. Der rasPi ist auch mehr als Lern- und Bastelgerät gedacht und nicht als vollautomatische Wollmilchsau. Da ist auch ein wenig Eigeniniziative gefragt, um sich mit dem System vertraut zu machen. Für jeden Befehl in /bin, /sbin, /usr/bin , /usr/sbin gibt es eine Bedienungsanleitung, die alle Optionen beschreibt- man page. Es ist nicht möglich alle Optionen in ein Front-End zu verpacken. Es wäre auch kein Programmierer dazu bereit, weil er weder von Dir, noch von jemandem Anderen dafür entlohnt wird, und die Eingabe von dd count=93814 if=/dev/sde of=/dev/null einfacher erscheint, als das Rauskitzeln der erforderlichen Daten aus der Partitionstabelle und das Anbieten zahlreicher Schaltflächen, die der Anwender dann auch nicht versteht.


    Deshalb gibt es unter Windows bei Wechseldatenträgern auch nur eine verwendbare Partition.


    Servus !

    RTFM = Read The Factory Manual, oder so

    Edited once, last by RTFM ().

  • Quote from &quot;RTFM&quot; pid='299897' dateline='1505477480'


    Wenn alles automatisiert ablaufen soll, bist Du bei Linux irgendwie falsch.


    das stimmt. Aber einige Fehlversuche möchte ich mir und anderen Lesenden gerne ersparen.
    Solche mit der USV per Powerbank wie in der aktuellen c't beschrieben bspw.
    Und auch hier mit dem Backup bin ich gebranntes Kind: irgendwas habe ich mit meinen bisherigen Images falsch gemacht, da das von einem Pi B Gezogene und auf einem Zero W Eingespielte nicht funktioniert hatte.
    Da's unterschiedliche Speicherkarten waren, war's nicht wirklich tragisch.


    Danke für die wertvolle Hilfe.

  • ist schon ein bißchen her, aber vielleicht hilft's noch Jemandem:


    ich habe meine 16GB Speicherkarte von der nur etwa 4GB benutzt sind mit Pishrink verkleinert und nutze nun eine mit 8GB .

    Dann und wann ziehe ich von der gesamten Karte unter Windows ein Image.

    Zwischendurch sichert der Pi seine Änderungen selbst auf das angeschlossene Netzlaufwerk.