Good to Know Database

Raspbian Jessie: Root-Partition auf einen USB-Datenträger verschieben wenn mehrere USB-Datenträger verwendet werden


In der Anleitung Raspbian Jessie: Root-Partition auf einen USB-Datenträger verschieben wurde bereits beschrieben aus welchen Gründen es eventuell sinnvoll ist die Root-Partition von der SD-Karte auf einen USB-Datenträger zu verschieben. Wie dort auch bereits beschrieben wurde, sollte man sich vorher überlegen ob nur ein USB-Datenträger am Raspberry Pi zum Einsatz kommt oder ob eventuell zu einem späteren Zeitpunkt noch weitere USB-Datenträger dem System hinzugefügt werden sollen. Da dies sehr häufig nicht absehbar ist, empfehle ich Ihnen die folgene Anleitung zu verwenden.

Der Unterschied zwischen der oben genannten Anleitung und dieser liegt im genutzen Format der Partitionstabelle und den sich daraus ergebenden Möglichkeiten bei der Adressierung der Root-Partition. Wird wie in der oben genannten Anleitung eine Master Boot Record (MBR) Partitionstabelle verwendet, kann bei der Adressierung der Root-Partition über die Kernelparameter nur der Devicename verwendet werden. Die Adressierung über die UUID der Root-Partition wird standardmäßig von Raspbian nicht unterstützt. Verwendet man hingegen wie in dieser Anleitung beschrieben die GUID Partition Table (GPT), kann die Adressung über den Gerätenamen oder über die PARTUUID erfolgen. Im Folgenden wird beschrieben wie Sie eine GUID Partition Table auf Ihrem USB-Datenträger erstellen und die Root-Partition über die PARTUUID ansprechen.

Hinweis: Als Grundlage für die folgende Anleitung dient das Raspbian Jessie Lite Image vom 27.05.2016.

Aktualisieren Sie zuerst die lokale Paketdatenbank und installieren anschließend die Pakete gdisk und rsync.

pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install gdisk rsync

Verschaffen Sie sich mit fdisk einen Überblick über die verfügbaren Datenträger und deren Devicenamen.

pi@raspberrypi:~ $ sudo fdisk -l

Hinweis: Im weiteren Verlauf wird davon ausgegangen, dass die Boot-Partition mit /dev/mmcblk0p1, die Root-Partition mit /dev/mmcblk0p2 und der USB-Datenträger für das Raspbian System mit /dev/sda angesprochen wird. Sollte dies bei Ihnen nicht der Fall sein, müssen Sie bei den hier gezeigten Befehlen die entsprechenden Devicenamen anpassen. Sollten Sie einen falschen Devicenamen verwenden, kann dies zu Datenverlust führen.

Starten Sie jetzt gdisk, löschen die bestehenden Partitionen vom Datenträger /dev/sda und erstellen eine neue primäre Partition. In diesem Fall wird die gesamte Datenträgergröße für die Root-Partition verwendet. Wenn eine weitere Partition für Ihre Daten gewünscht wird, können Sie die Größe der Root-Partition entsprechend angeben und weitere Partitionen anlegen.

Beim Start von gdisk wird geprüft ob bereits eine GUID Partition Table auf dem Datenträger existiert. Ist dies nicht der Fall, wird gdisk automatisch eine GUID Partition Table erzeugen.

Hinweis: Beachten Sie, dass bei den folgenden Schritten alle Daten auf dem USB-Datenträger verloren gehen.

pi@raspberrypi:~ $ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************


Warning! Secondary partition table overlaps the last partition by
33 blocks!
You will need to delete this partition or resize it in another utility.

Command (? for help): d
Using 1

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-15141470, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-15141470, default = 15141470) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sda: 15141504 sectors, 7.2 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 0D5625F1-57C6-4AC3-BEFB-FFF3DA4714EE
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 15141470
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        15141470   7.2 GiB     8300  Linux filesystem

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

Nachdem die zukünftige Root-Partition (/dev/sda1) erstellt wurde, müssen Sie noch das Ext4-Dateisystem anlegen.

pi@raspberrypi:~ $ sudo mkfs.ext4 /dev/sda1

Mounten Sie jetzt das erstellte Dateisystem in das Verzeichnis /mnt.

pi@raspberrypi:~ $ sudo mount /dev/sda1 /mnt/

Starten Sie jetzt die Datenübertragung von der SD-Karte auf den USB-Stick. Dieser Vorgang dauert je nach der Datenmenge auf der Root-Partition und der Übertragungsgeschwindigkeit mehrere Minuten.

pi@raspberrypi:~ $ sudo rsync -ax --progress / /mnt/

Sobald alle Daten erfolgreich übertragen wurden, sollten Sie die UUID und PARTUUID der neuen Root-Partition mit blkid ermitteln. Die UUID benötigen Sie für die /etc/fstab damit das richtige Dateisystem in das Root-Verzeichnis von Linux gemountet wird. Da wie bereits erwähnt der Kernel von Raspbian das Booten mit einer UUID nicht unterstützt, benötigen Sie die PARTUUID damit der Kernel auf die Root-Partition zugreifen kann.

pi@raspberrypi:~ $ sudo blkid /dev/sda1
/dev/sda1: UUID="d49b8a47-a420-4f4f-9baa-1673c1e3c1e2" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="b1607cbe-b5a9-4325-9a66-72f90a1fe3de"

Öffnen Sie jetzt die /etc/fstab auf der neuen Root-Partition (also die Datei /mnt/etc/fstab) mit einem Editor.

pi@raspberrypi:~ $ sudo vi /mnt/etc/fstab

Hier sollten Sie unter anderem die folgende Zeile vorfinden.

/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

Ersetzen Sie die bisherige Root-Partition /dev/mmcblk0p2 durch UUID= gefolgt von der zuvor ausgelesenen UUID der neuen Root-Partition.

UUID=d49b8a47-a420-4f4f-9baa-1673c1e3c1e2  /               ext4    defaults,noatime  0       1

Des Weiteren muss die Bootkonfiguration angepasst werden damit der Kernel die richtige Root-Partition verwendet. Öffnen Sie dazu die /boot/cmdline.txt mit einem Editor.

pi@raspberrypi:~ $ sudo vi /boot/cmdline.txt

Standardmäßig sollte diese Datei die folgende Zeile enthalten.

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Ersetzen Sie bei der Option root den Devicenamen /dev/mmcblk0p2 durch PARTUUID= und geben die zuvor ermittelte PARTUUID an.

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=b1607cbe-b5a9-4325-9a66-72f90a1fe3de rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Sobald Sie alle Dateien übertragen und die beiden Konfigurationsdateien angepasst haben, können Sie die neue Root-Partition wieder aushängen und einen Neustart des Systems durchführen.

pi@raspberrypi:~ $ sudo umount /mnt
pi@raspberrypi:~ $ sudo shutdown -r now

Nach dem Neustart können Sie mit dem Befehl mount überprüfen ob die Root-Partition vom USB-Stick (/dev/sda1) anstelle der von der SD-Karte gemountet wurde.

pi@raspberrypi:~ $ mount
/dev/sda1 on / type ext4 (rw,noatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=469536k,nr_inodes=117384,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=22,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mmcblk0p1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)

Für den Fall, dass Ihr System wider erwartens nicht mehr startet, mounten Sie die erste Partition der SD-Karte auf einem anderen Linux-System und setzen in der Datei cmdline.txt den Parameter root wieder auf /dev/mmcblk0p2 zurück. Dadurch startet der Raspberry Pi wieder mit der Root-Partition auf der SD-Karte.


Dieser Eintrag wurde am 16.09.2016 erstellt und zuletzt am 25.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2827.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer