Bewertung: 5 / 5

Stern aktivStern aktivStern aktivStern aktivStern aktiv
 
Ein fast jeder, der mit der Pi beginnt, benutzt SD Karten zur Speicherung des Betriebssystems und der Daten. Nach einer gewissen Zeit möchte man dann ein schnelleres und/oder größeres Speichermedium benutzen. Leider kann man die Pi nicht ohne SD Karte betreiben wenn man eine ältere Raspberry benutzt. Erst die Raspebrry 3 unterstützt den USB Boot mode direkt von dem USB Gerät. Auch die Raspberry 4 unterstütze bislang keinen USB Boot Mode. Allerdings ist sie nur zum Bootzeitpunkt notwendig und es wird nur die Bootpartition der SD Karte benötigt. Sämtliche Betriebssystemdaten wie Benutzerdaten, die root Partition, können auf einer beliebigen Partition liegen. Der folgende Artikel beschreibt was man dazu machen muss.
 
Edit 5.3.2024: Wer das Umziehen nicht manuell vornehmen will kann zum Umziehen raspiBackup nutzen.

Hinweis: Basierend auf der folgenden Beschreibung hat Perlchamp eine noch wesentlich bessere Beschreibung im Raspberry Forum erstellt.
 
Es sind relativ wenige Schritte notwendig um die existierende root Partition der SD Karte auf eine andere Partition umzukopieren und die SD Karte so zu ändern, dass danach nur noch die externe root Partition benutzt wird. Dieses kann eine Partieion eines USB Sticks oder auch eine Partition einer USB Platte sein.

Nach der Umstellung wird die existierende root Partition der SD Karte nicht mehr benutzt. Wichtig ist, dass zum Zeitpunkt der Umstellung nur eine weitere Platte bzw einen USB Stick an der Pi angeschlossen ist. Ansonsten kann es vorkommen, dass sich die aktuellen Partitionsdaten zum Zeitpunkt der Umstellung (z.B. /dev/sdc1) von denen wie sie nach einem Pi Reboot vorliegen (z.B. /dev/sdb1) unterscheiden und die Pi nicht die richtige Datenpartition findet und nicht bootet.
 
Sollen mehr als eine USB Platte an der Raspberry ständig laufen muss die PartitionsUUID als Kennung in der fstab und der cmdline.txt benutzt werden und die Zielplatte als Partitionstabelle eine GPT benutzen.

Die folgenden Schritte sind notwendig für die Umstellung und können alle auf der Pi vorgenommen werden:

Als Beispiel in den Befehlen wird die Beispielplatte /dev/sda und die Partition /dev/sda1 genommen und auf der Pi mit angeschlossenem weiteren USB Platte die Befehle ausgeführt werden. Dazu meldet man sich entweder direkt an der Pi mit Tastatur und Bildschirm an oder verbindet sich per ssh von einem anderen Rechner im lokalen Netz.

0) Erstellen eines Backups der SD Karte zur Sicherheit. Wer sich mit Linux auskennt und die Originale cmdline.txt wie unten beschrieben sichert kann immer schnell wieder auf die alte Einstellung zurückgehen.

1) Erstellen einer Partition auf einem USB Stick oder einer USB Platte.
sudo fdisk /dev/sda
bzw
sudo gdisk /dev/sda
wenn man mehrere Platten an der der Raspberry angeschlossen hat.

2) Formatieren der neuen Partition mit ext4. Das geht nur unter Linux auf der Pi.
sudo mkfs.ext4 /dev/sda1
 
3) Kopieren der SD Karten Datenpartition auf die neue USB Partition
sudo mount /dev/sda1 /mnt
sudo -- sh -c 'tar vcf -- / --one-file-system --exclude=/mnt/* --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* * | ( cd /mnt; tar xfp -)'
 

Alternativ kann man rsync zum kopieren der root Partition benutzen:

sudo mount /dev/sda1 /mnt

rsync -aHAXx / /mnt

 
-a  : all files, with permissions, etc..
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)
 
4) Ändern der /mnt/etc/fstab auf der neuen USB Partition von

/dev/mmcblk0p1  /boot           vfat    defaults         0       0
/dev/mmcblk0p2  /               ext4    defaults,noatime 0       0


nach

/dev/mmcblk0p1  /boot           vfat    defaults         0       0
/dev/sda1       /               ext4    defaults,noatime 0       0
 
bzw nach
 
/dev/mmcblk0p1  /boot           vfat    defaults         0       0
PARTUUID=7C32EB25-0462-429F-BF92-90FFD81FC8FE       /               ext4    defaults,noatime 0       0
 
Die PartitionsUUID bekommt man wie folgt heraus:
 
sudo blkid | grep sda1
 
Ändern mit
sudo nano /mnt/etc/fstab
 
5) Anlegen einer Sicherung der alten /boot/cmdline.txt
sudo cp /boot/cmdline.txt /boot/cmdline.txt.sd
 
Damit kann man jederzeit wieder die SD Datenpartition benutzen indem man die gesicherte Datei wieder auf die
Originaldatei kopiert.
sudo cp /boot/cmdline.txt.sd /boot/cmdline.txt

6) Ändern in der der Datei /boot/cmdline.txt den Teil mit root=/dev/mmcblk0p2 nach root=/dev/sda1

Beispiel

dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 noatime quiet rootwait loglevel=1 zram.num_devices=2
nach
dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 noatime quiet rootwait loglevel=1 zram.num_devices=2
bzw nach
dwc_otg.lpm_enable=0 root=PARTUUID=7C32EB25-0462-429F-BF92-90FFD81FC8FE rootfstype=ext4 noatime quiet rootwait loglevel=1 zram.num_devices=2

Ändern mit
sudo nano /boot/cmdline.txt
 

Anschliessend wenn die USB Platte als Rootpartition genutzt wird macht es Sinn die geänderte /boot/cmdline.txt noch zu sichern mit

sudo cp /boot/cmdline.txt /boot/cmdline.txt.USB
 
Dann kann man sehr schnell zwischen der Nutzung der Rootpartition auf der SD Karte und der USB Platte umschalten.
 
 
 

Links

Kommentar schreiben

*** Hinweis ***

Kommentare sind erwünscht. Aber um lästige Spamposts abweisen zu können gibt es ein paar Dinge die zu beachten sind:
  1. Kommentare mit dem Text http werden sofort zurückgewiesen mit der Meldung Sie sind nicht berechtigt den Tag zu verwenden. zz
  2. Kommentare werden manuell überprüft und es dauert deshalb in der Regel einen Tag bis sie veröffentlicht werden.

    Kommentare   
    #24 Perlchamp 2020-04-22 19:50
    tolle Anleitung, also ich hab's verstanden. Das will schon was heißen :lol:
    Zitieren
    #23 framp 2019-01-31 19:18
    Moin Bernd,

    nein, das geht nicht mit raspiBackup. Ich koennte das einbauen aber der Testaufwand dafuer ist immens und sprengt meine Zeit die ich bereit bin fuer raspiBackup aufzubringen.

    Du musst einmal manuell Deine Rootpartition auf USB Stick umziehen. Dann kann raspiBackup Dein System mit externer Rootpartition sichern und wiederherstellen.

    Ich kann Dich noch auf diese Seite verweisen wo ich beschrieben habe wie man umzieht.

    Cu framp
    Zitieren
    #22 Bernd 2019-01-31 17:09
    Hallo framp,
    zum Verständnis:
    Kann ich ein vorhandenes rsync-Backup auf einem USB-Stick (/backup) auf einen anderen USB-stick mit raspiBackup (restore) übetragen. Diesen dann, statt der SD-Karte zum booten benutzen?


    Danke + Gruß
    Zitieren
    #21 framp 2019-01-18 20:07
    Moin Bernd,

    der Raspberry ist es egal ob es ein USB Stick oder USB Platte ist. Von beidem kann sie booten. D.h. Du kannst auf dieselbe Art und Weise alles von dem USB Stick auf die USB Platte kopieren.

    Falls Du mehrere Platten anschliessen willst musst Du deren PARTUUID in der fstab benutzen, da Du sonst Probleme bekommen kannst wenn die Platten mal anders herum angeschlossen werden.

    Cu framp
    Zitieren
    #20 Bernd 2019-01-18 19:47
    Hallo framp,
    ich habe deine Prozedur mit Erfolg angewendet. Das root-Verzeichnis liegt nun auf einem USB-Stick. Der PI wurde danach erheblich programmtechnisch erweitert.

    Nun habe ich die Idee das root-Verzeichnis (USB-Stick) auf eine angeschlossene USB-Festplatte (Partition) zu verschieben. Eine weitere Partition der Platte soll als File-Server dienen. Wenn das gelingt wird der USB-Stick vom PI entfernt.

    Frage: Kann ich die gleiche o.g. Prozedur benutzen, oder was ist zu beachten?

    Danke + Gruß
    Bernd
    Zitieren
    #19 framp 2019-01-15 20:00
    Moin Mike,

    da hat sich ein kleiner Fehler eingeschlichen. Ich habe es eben korrigiert und getestet :oops:

    Sorry for the inconvenience :-*

    Cu framp
    Zitieren
    #18 Mike 2019-01-15 11:14
    Hi framp,
    vielen Dank für die Anleitung.

    Ich habe jedoch ein Problem mit Punkt 3 "kopieren der files":
    "sudo -- sh -c 'cd /; tar vcf --exclude=/mnt/* --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* * | ( cd /mnt; tar xfp -)'"

    hier erhalte ich die Fehlermeldung:
    "tar: --exclude=/mnt/*: Funktion open fehlgeschlagen: Datei oder Verzeichnis nicht gefunden
    tar: Error is not recoverable: exiting now
    tar: Das sieht nicht wie ein „tar“-Archiv aus.
    tar: Beende mit Fehlerstatus aufgrund vorheriger Fehler"

    Ich habe auch schon die Variante "sudo -- sh -c 'cd /; tar vcf * --exclude=/mnt/* --exc...." versucht, aber so geht es wohl auch nicht.

    Kopieren mit tar ist noch nicht ganz klar, daher finde ich hier im Moment keine Lösung.

    Vielen Dank im Voraus

    Gruß Mike
    Zitieren
    #17 framp 2018-12-30 19:26
    Moin Bernd,

    ist OK die Verzeichnisse unter /mnt zu löschen. Ich habe den Kopierbefehl noch erweitert dass das nicht mehr notwendig ist und auch die Fehlermeldungen nicht mehr erscheinen.

    Cu framp
    Zitieren
    #16 Bernd 2018-12-30 18:45
    Hallo framp,
    habe es gewagt, und die Verzeichnisse mit root-Rechten aus dem Verzeichnis mnt entfernt -> alles OK

    Danke nochmals
    Bernd
    Zitieren
    #15 Bernd 2018-12-30 17:47
    Hallo framp,
    ich kann mich nur an die letzte Meldung erinnern, die da lautete "Der Vorgang wurde wegen des letzten Fehlers abgebrochen.". Welcher Fehler das nun war kann leider nicht mehr sagen.
    Da mein System nun mit dem USB-Stick läuft, sollte ich mich erst um ein System-Backup kümmern, ehe ich die cmdline zurücksetze und den Umzug nocheinmal versuche.


    Aufgefallen ist mir, dass es auf den neuen USB-Root auch ein Verzeichnis mnt gibt, welches nicht leer ist. Darauf sind leere Verzeichnisse (bin, dev, etc, lib) und die alten originalen Verzeichniss (boot, home).
    Diese zu löschen fehlt mir der Mut.

    Vielleicht hilft das.

    Danke + Gruß
    Bernd
    Zitieren
    #14 framp 2018-12-30 14:09
    Moin Bernd,

    Welchen Fehler bekommst Du denn? Es sollte eigentlich keiner kommen...

    Cu framp
    Zitieren
    #13 Bernd 2018-12-30 13:56
    mit sudo .s (root) funst es sowei. Am Ende bricht der Befehl mit einem Fehler ab, der aber auf die Funktion scheinbar keinen Einfluss hat.

    Also alles gut.

    Danke und Gruß

    Bernd
    Zitieren
    #12 framp 2018-12-29 13:53
    Moin Bernd,

    sorry - da ist tatsächlich ein Bug in der Beschreibung. Du musst das Kopieren als Benutzer root vornehmen. Dann hast Du alle Berechtigungen.

    Ich habe die Beschreibung entsprechend angepasst.

    Cu framp
    Zitieren
    #11 Bernd 2018-12-29 13:05
    danke für die Info.

    Bei der manuellen Methode erhalte ich weiterhin Fehler: z.b.: tar: etc: Funktion mkdir fehlgeschlagen: Keine Berechtigung
    tar: etc/debian_version: Funktion open fehlgeschlagen: Datei oder Verzeichnis nicht gefunden

    USB-Stick ist wie beschrieben formatiert.

    Danke + Gruß
    Bernd
    Zitieren
    #10 framp 2018-12-28 22:42
    Moin Bernd,

    das Script funktioniert mit Stretch nicht mehr. Ich lösche es hier jetzt.

    Die manuelle Methode funktioniert aber definitiv. Wenn Du keine Berechtigungen hast ist vielleicht die Zielpartition nicht richtig partitioniert (muss ext3 oder ext4 sein) oder Du führst die Schritte nicht mit sudo oder als root aus.

    Cu framp
    Zitieren
    #9 Bernd 2018-12-28 16:38
    Hallo framp,

    ich benutze einen pi2 mit strecht-lite und bekomme den Umzug auf einen USB-Stick nicht hin.
    Der USB-Stick ist angemeldet und mit ext4 formatiert.

    Die manuelle Version zeigt nur Fehler u.a keine Berechtigung, nach ca. 45 Minuten habe ich dieses Abgebrochen.


    Die automatische Version (raspiSD2USB) ist nach ca. 4 Sekunden mit der Meldung "die SD karte sei nicht mehr root" o.s.ä.


    In beiden Fällen kann ich den Raspi weiter benutzen, auch ohne USB-Stick.


    Was mache ich falsch? Oder Lapp diese Prozedur mit Stretch nicht?


    Danke + Gruß

    Bernd
    Zitieren
    #8 framp 2015-10-05 21:23
    Moin Mark,

    nein, es spricht absolut nix dagegen. Solange die SD Karte in der Lage ist alle Daten der Platte aufzunehmen kann man das machen. Du musst dazu nur die beiden Partitionen der SD Karte mounten und zwei rsync Befehle anstossen (rsync damit nur die Daten die sich wirklich geändert haben, kopiert werden).

    In meinem Falle habe ich aber eine TB Platte an der raspi - und das passt nicht auf die SD Karte :lol:

    Allerdings würde ich meine Backups nicht auf die doch eher unzuverlässige SD Karte legen sondern auf irgendeinen anderen NAS Speicher. Siehe dazu z.B. wo ich das Backup Tool was ich benutze der Community zur Verfügung stelle.

    Cu framp
    Zitieren
    #7 Mark 2015-10-05 20:48
    zitiere framp:
    Moin Mark,

    die Daten von /dev/sda1/boot kannst Du einfach auf der SD-Karte sichern durch Kopieren von /dev/sda1/boot auf /dev/mmcblk0p1/boot.
    Falls alle Daten von /dev/sda1 exclusive /dev/sda1/boot auf /dev/mmcblk0p2 passen kannst Du auch diese mit rsync auf /dev/mmcblk0p2 sichern. Dabei /boot excluden.
    Aber ich glaube da Du von Konfig sprichst hast Du diese 2te Sicherung wohl nicht im Auge.

    Cu framp

    Hallo,
    danke erst einmal für die Schnelle Antwort. Es soll das gesamte System zurück auf die SD kopiert werden, um ggfls. einfach direkt wieder die SD nutzen zu können.
    Oder was spricht dagegen?
    Gruß
    Zitieren
    #6 framp 2015-10-05 16:43
    Moin Mark,

    die Daten von /dev/sda1/boot kannst Du einfach auf der SD-Karte sichern durch Kopieren von /dev/sda1/boot auf /dev/mmcblk0p1/boot.
    Falls alle Daten von /dev/sda1 exclusive /dev/sda1/boot auf /dev/mmcblk0p2 passen kannst Du auch diese mit rsync auf /dev/mmcblk0p2 sichern. Dabei /boot excluden.
    Aber ich glaube da Du von Konfig sprichst hast Du diese 2te Sicherung wohl nicht im Auge.

    Cu framp
    Zitieren
    #5 Mark 2015-10-05 15:14
    Hallo,
    gibt es die Möglichkeit auch die Daten wieder zurück auf die SD-Karte zu spielen? Sonst ist im Zweifel die config ja entsprechend alt.
    Sozusagen als lokales Backup?
    Gruß Mark
    Zitieren
    #4 Bernd 2014-05-01 12:50
    Hallo,
    sehr interessant.
    Ich benutze den Raspi als Samba-Server. Da hängt eine USB-Festplatte für die diverse Daten (auch windows) dran und hat eine Partition, die auf NTSF formatiert ist.
    Kann ich dieser USB-Platte eine zweite Partition (ext formatiert) hinzufügen und dann wie oben beschrieben einsetzen ohne auf die Samba-Funktion zu verzichten?

    Danke + Gruß
    Zitieren
    #3 framp 2014-05-01 11:34
    Moin Bernd,

    jede Partition kann genutzt werden. D.h. also auch eine weitere mit ext4 formatierte Partition, die auf derselben Platte liegt wie Deine ntfs Partition. Das ist völlig unabhängig von der samba Funktionalität. Da Du das gesamte Linux Betriebssystem mit all seiner Konfiguration von der SD Karte auf die Partition kopierst wird sich Deine Pi genauso verhalten wie vorher.

    Ein Kommentar zu ntfs und samba: Ich betreibe meine Pi auch als NAS und es läuft auch ein samba drauf für Windows Clients. Allerdings benutze ich nur EXT4 - kein ntfs da ntfs langsamer ist als ext4. Für Deine Windows Clients ist das völlig transparent ob sich hinter dem Samba htfs oder ext4 formatierte Platten befinden.

    Cu framp
    Zitieren
    #2 framp 2014-04-17 19:28
    Moin Schwefelsäure,

    das Script habe ich nur auf raspian getestet. Da noobs andere Partitionierungen hat ist ziemlich klar dass es da Fehler gibt.
    Danke für den Hinweis auf Step 5: Den Typo habe ich eben korrigiert.
    Zitieren
    #1 H2SO4 2014-04-16 22:55
    GEIL GEIL GEIL GEIL

    Das script hat bei mir versagt. Wird vermutlich an der noobs installation liegen. Von hand hat es dann geklappt. Zumindest sieht es erstmal so aus. Beim kopieren wurden einige fehlermeldungen angezeigt. Nachdem ich meinen tippfehler (habe sdb1 übernommen) in der cmdline.txt geändert habe lief es.

    Unter punkt 5 hat sich vermutlich nen kleiner tippfehler eingeschlichen. Es wird dort die datei auf sich selbst kopiert.

    HERZLICHEN Dank für diese Anleitung!!!!
    Zitieren