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. 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 und verweist auch auf ein Script raspiSD2USB, welches diese Umkonfiguration und Datenkopiererei sehr schnell und einfach vornimmt.
 
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/sdb und die Partition /dev/sdb1 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/sdb
bzw
sudo gdisk /dev/sdb
wenn man mehrere Platten ander der Raspberry angeschlossen hat.

2) Formatieren der neuen Partition mit ext4. Das geht nur unter Linux auf der Pi.
sudo mkfs.ext4 /dev/sdb1
 
3) Kopieren der SD Karten Datenpartition auf die neue USB Partition.
sudo mount /dev/sdb1 /mnt
cd /
sudo tar cf - * | ( cd /mnt; tar xfp -)
 
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/sdb1       /               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 sgdisk -i 1 /dev/sdb | grep unique | cut -d ' ' -f 4
 
Ä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/sdb1 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

Alternativ kann man raspiSD2USB, ein von mir erstelltes Script runterladen, auf die Pi kopieren und dann nachdem das oder die weiteren USB Geräte angeschlossen wurden, ausführen. Es nimmt alle oben beschriebenen Schritte automatisch vor. Dabei ist zu berücksichtigen, dass im Falle von mehr als einer angeschlossenen USB Platte die Ziel USB Platte für das Rootfilesystem ein GPT haben muss. Bei einer Platte reicht ein MBR.
 
raspiSD2USB.py steht unter der GPL auf dieser Seite zur allgemeinen Verfügung.

Ein Beispieldurchlauf sieht z.B. wie folgt aus:
raspiSD2USB.py V0.2.1 2015-04-12/20:41:05 0ff0dfd 
RSD0002I --- Folgende Partitionen wurden erkannt
RSD0003I --- /dev/mmcblk0p1 - Größe: 112.00 MB - Frei: 97.53 MB - Mountpunkt: /boot - Partitionstyp: vfat - Partitiontabelle: None
RSD0003I --- /dev/mmcblk0p2 - Größe: 2.85 GB - Frei: 221.95 MB - Mountpunkt: / - Partitionstyp: ext4 - Partitiontabelle: None
RSD0003I --- /dev/mmcblk0p3 - Größe: 804.00 MB - Frei: NA - Mountpunkt: None - Partitionstyp: ext4 - Partitiontabelle: None
RSD0003I --- /dev/sda1 - Größe: 3.84 GB - Frei: 3.50 GB - Mountpunkt: /mnt - Partitionstyp: ext4 - Partitiontabelle: msdos
RSD0028I --- Partition /dev/mmcblk0p1 wird übersprungen - Partition ist auf der SD Karte
RSD0028I --- Partition /dev/mmcblk0p2 wird übersprungen - Partition ist auf der SD Karte
RSD0028I --- Partition /dev/mmcblk0p3 wird übersprungen - Partition ist auf der SD Karte
RSD0009I --- Ziel root Partitionskandidaten: /dev/sda1
RSD0011I --- Quell root Partition /dev/mmcblk0p2: Größe: 2.85 GB Typ: ext4
RSD0012I --- Partition /dev/sda1 wird getestet: Größe: 3.84 GB Freier Speicherplatz: 3.50 GB Typ: ext4
RSD0005I --- Folgende Partitionen sind mögliche neue Ziel root Partition
RSD0006I --- /dev/sda1
RSD0007I --- Partion eingeben: /dev/sda1
RSD0019I --- Partition /dev/mmcblk0p2 wird auf Partition /dev/sda1 kopiert und wird die neue root Partition
RSD0020I --- Bist Du sicher (j/N) ?  
J
RSD0021I --- Rootpartition wir kopiert ... Bitte Geduld
tar: Removing leading `/' from member names
tar: Write checkpoint 1000
...
tar: Write checkpoint 236000
tar: proc: implausibly old time stamp 1970-01-01 01:00:00
RSD0022I --- /etc/fstab wird auf /dev/sda1 angepasst
RSD0023I --- /boot/cmdline.txt wird auf /dev/sda1 gesichert
RSD0024I --- /boot/cmdline.txt wird auf /dev/sda1 angepasst
RSD0025I --- Umzug von root Partition von /dev/mmcblk0p2 auf Partition /dev/sda1 beendet

Das Script raspiSD2USB wurde mit einer anderen schnelleren SD Karte, einem USB Stick und einer USB Platte getestet. Es löscht definitiv keine Daten und kopiert nur die aktuelle Datenpartition auf die neue Partition. Falls doch irgendwas schief laufen sollte kann man durch Zurückkopieren der gesicherten /boot/cmdline.txt.sd auf die /boot/cmndline.txt immer wieder die alte originale Datenpartition auf der SD Karte benutzen. Danach muss man nur die Zielpartition wieder löschen und hat den alten Originalzustand.

Trotzdem gilt natürlich dass man zur Sicherheit immer vor solch einer Umstellung ein Backup machen sollte.

Links

Kommentar schreiben

Hinweis

Die eMail ist nicht öffentlich sichtbar und wird benutzt um auf neue Kommentare zu subscriben. Es kann jederzeit mit einem Unsubscribelink der sich in jeder Benachrichtigungsmail befindet die Subscription gelöscht werden.

Spam Kommentare werden gelöscht und nicht veröffentlicht um Subscriber vor Spam zu schützen. Die Überprüfung wird manuell vorgenommen und deshalb wird ein Kommentar nicht sofort veröffentlicht.


Kommentare   
0 #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
0 #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
0 #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
0 #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
0 #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
0 #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
0 #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
0 #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