Sicherung/Cloning der Festplatte

Aus OE-Alliance Support Wiki
Wechseln zu: Navigation, Suche

Ziel

  • Du möchtest den Inhalt deiner Haupt-Festplatte auf eine externe Festplatte übertragen oder umgekehrt, denn
    • du möchtest deine zu klein gewordene interne Festplatte auf eine größere upgraden, deshalb willst du deine die alte volle ausbauen, die neue leere einbauen, und dann den Inhalt der alten auf die neue übertragen
    • du möchtest deine interne Festplatte für ein anderes Dateisystem formatieren, wegen Dateisystem-Performance-Bugs oder -Verbesserungen; dazu möchtest du den Inhalt auf eine temporäre externe Backup-Platte übertragen, die interne umformatieren, und dann die Daten zurückübertragen
    • du möchtest einfach nur eine externe Platte als Backup oder als Spiegelung zur internen Platte haben, z.B. damit du deine Videothek auswärts immer dabei haben kannst, oder als Backup gegen Datenverlust.

Problem

  • Du hast nicht die Zeit, um die Langsamkeit von LAN oder WLAN mitsamt derer Netzwerkprotokoll-Overheads in Kauf zu nehmen, daher kommt für dich zeitlich nur eine Anbindung der externen Platte an den eSata-Port (oder als zweite Wahl der langsamere USB-Port, falls eSATA nicht verfügbar) in Frage.
  • Aufgrund der aktuellen Festplattengrößen ist ein Backup "am Stück" über eine zweistellige Zahl von Stunden für dich unzumutbar; und es wäre eine große zeitliche Entlastung, wenn du den Kopier-Job in Etappen aufteilen kannst (so dass es z.B. während wichtiger Aufnahmen jederzeit unterbrochen werden kann, um jederzeit später dann weiterzumachen).
  • Es ist für dich unzumutbar, wenn der Laptop dauerhaft in den Kopierjob eingebunden ist, und damit über Stunden fest an die Box gebunden ist. Stattdessen soll die Box das Backup ganz autonom fertig machen können.

Lösung

  • In Linux ist das Kopier-Tool für hohen Festplattendurchsatz das Kommandozeilen-Tool 'cp' "Copy", das wie alle anderen Kommandozeilentools über ein Terminalfenster (in Windows 'telnet') erreichbar ist. Andere Tools haben Performance-Schwächen für Festplatten-Datentransfers, da sie entweder ursprünglich eher für Netzwerkübertragungen entwickelt wurden (wie 'rsync'), und/oder sie sind entwicklungsgeschichtlich sehr alt und wurden nie für neuere, schnellere Übertragungs-Schnittstellen wie SATA nach-entwickelt/nach-optimiert (z.B. 'mc' "Midnight Commander"), obwohl es SATA schon seit 12 Jahren gibt.
    • 'mc' bringt z.B. nur 7 MB/sek
    • 'rsync' bringt z.B. nur 10,2 MB/Sek
    • 'cp' bringt z.B. 37,2 MB/Sek (jeweils ermittelt mit zwei Samsung EcoGreen F4).
  • Auf der ET9x00 ist leider nicht das vollwertige Linux-'cp' verfügbar (mit all denen Parameter-Optionen, wie in "Manpage"-Dokumentationsseiten ersichtlich), sondern aus Speicherplatzspar-Gründen nur eine "Light"-Version (bereitgestellt von Busybox, einer Sammlung solcher Light-Versionen von Kommandozeilentools) mit deutlich weniger Parametern. Sofern du sehr wahrscheinlich die Kopieraufgabe in Etappen aufteilen können möchtest, brauchst du eine Option, bei dem bei einer nächsten Etappe nicht wieder ganz von vorne angefangen wird, bereits kopierte Dateien also nicht noch einmal kopiert werden. Dafür sorgt der Parameter -n, der im Box-Standard-'cp' jedoch nicht verfügbar ist. Dazu musst du das komplette, originale 'cp' bei dir nachinstallieren.
  • Folgende drei Packages müssen heruntergeladen werden. Es sind Archive mit dem Namen <Paketname><Version>_mipsel.deb. Du entpackst sie zweimal mit z.B. 7zip (erst in ein .tar-Archiv, dann dieses .tar-Archiv in eine Verzeichnisstruktur), und kopierst die weiter unten genannten Dateien z.B. über den Windows-Explorer (sofern via 'Samba' mit der Box verbunden) einfach in das Zielverzeichnis der Box. Die Datei-Attribute stimmen dann automatisch.
    • Core-Utils: packages.debian.org/squeeze/coreutils > Download coreutils: mipsel > packages.debian.org/squeeze/mipsel/coreutils/download; Kopiere nur die Datei /bin/cp, z.B. unter neuem Namen als /bin/cp2, damit das originale 'cp' für alle Fälle erhalten bleibt.
    • libacl1-Paket ("Access control list shared library"): packages.debian.org/squeeze/mipsel/libacl1/download. Du brauchst nur die Datei 'libacl.so.1'.
    • libselinux1-Paket "SELinux runtime shared libraries": packages.debian.org/squeeze/mipsel/libselinux1/download. Du brauchst nur die Datei libacl.so.1.1.0, die benennst du im Ziel dann um in libacl.so.1 (weil 'cp2' danach sucht).
    • Denke daran, dass du nach einem Neu-Flash die drei Schritte wiederholen müssen wirst. Wenn du oft 'cp2' nutzt und auch oft neuflashst, kannst du erwägen, diese drei Dateien in dein Einstellungen-Backup mit aufzunehmen.
  • 'cp2' ist sofort funktionell (ohne Reboot). Der Aufruf ist z.B. 'cp2 -anv /media/hdd/* /media/sdb1/'.
    • -a "Archivierung" erhält die Eigenschaften der Datei (Änderungsdatum, Attribute, Owner...) und geht durch Unterverzeichnisse.
    • -n sorgt dafür, dass bereits kopierte Dateien nicht noch einmal kopiert werden.
    • -v "verbalisiere" gibt in das Terminalfenster die gerade aktuell am kopierende Datei aus.
    • Wenn du den Kopiervorgang mit der Tastenkombination <Strg>-C unterbrichst (z.B. weil du die Box für eine wichtige Aufnahme brauchst), wird die gerade am kopierende, noch unfertige Zieldatei jedoch nicht gelöscht (das Verhalten ist also anders als beim Windows-Explorer oder bei 'rsync'). Deshalb solltest du diese letzte, unfertige Datei am Ende einer Kopier-Etappe manuell löschen. Solche unfertigen Dateien sind aber auch ohne die Terminal-Ausgabe leicht zu finden, denn nur sie haben das Änderungsdatum von "gerade eben".
    • Wenn du das Kopieren nicht unterbrechen willst, aber den Laptop abnabeln oder schlafenlegen willst, kannst du mit der Tastenkombination <Strg>-Z die Terminal-Ausgabe abschalten (das Kopieren läuft im Hintergrund trotzdem weiter). Dann gibst du das Kommando 'bg' (="background") ein, dadurch wird das Programm ganz vom Terminal abgekoppelt. Dann kannst du das Terminal schließen und z.B. den ganzen Laptop von der Box abnabeln.
    • TODO: mir ist noch nicht bekannt, wie man sich später wieder an die Ausgabe des noch laufenden Kopierjobs mit einem neu geöffneten Terminalfenster anbindet. Möglicherweise wird dies durch die Linux-Version der Box nicht unterstützt? das 'jobs'-Kommando zeigt keinen Job an, obwohl er offensichtlich noch läuft (Festplattenaktivität). Meine provisorische Notlösung für eine Unterbrechung des Kopierjobs ist daher ein Reboot, da ich mich nicht traue, Prozesse "hart" abzuschießen. Für diesen Punkt ist Input willkommen.