Good to Know Database

Raspbian Jessie: Root-Partition auf einen USB-Datenträger verschieben


Standardmäßig bootet man den Raspberry Pi von einer SD-Karte auf welcher sich die Boot- und Root-Partition befindet. Da SD-Karten nur eine begrenzte Anzahl an Schreibzyklen besitzen und es sehr häufig zu Dateisystemfehlern kommt wenn die Stromversorgung des Raspberry Pi's unterbrochen wird ohne dass dieser ordnungsgemäß heruntergefahren wurde, stellt sich die Frage welche Alternativen es gibt. In dieser Anleitung soll die Root-Partition auf einen USB-Datenträger wie zum Beispiel ein USB-Stick oder eine USB-Festplatte ausgelagert werden. Zum Booten wird auch weiterhin eine SD-Karte benötigt auf welcher sich nur noch die Boot-Partition befinden muss.

Verlagert man die Root-Partition auf einen USB-Datenträger sollte man sich bereits vorher Gedanken machen ob am Raspberry Pi nur ein USB-Datenträger angeschlossen wird oder ob vielleicht noch weitere USB-Datenträger hinzukommen werden. Soll nur ein USB-Datenträger eingesetzt werden, können Sie mit dieser Anleitung fortfahren. Für den Fall, dass Sie mehrere USB-Datenträger an Ihrem Raspberry Pi betreiben oder eventuell später noch weitere hinzufügen wollen, folgen Sie bitte der Anleitung Raspbian Jessie: Root-Partition auf einen USB-Datenträger verschieben wenn mehrere USB-Datenträger verwendet werden. Der Hintergrund hierfür liegt darin, welchen Devicename Linux dem USB-Datenträger zuweist. Bei mehreren USB-Datenträgern kann es vorkommen, dass sich der Gerätenamen nach einem Neustart des Systems ändert oder der USB-Datenträger einen anderen Gerätenamen bekommt wenn dieser in einem anderen USB-Port verwendet wird. In der folgenden Anleitung wird der Gerätename für die Adressierung der Root-Partition verwendet. Sollte sich dieser ändern, wird der Linux Kernel die Root-Partition nicht mehr finden und somit den Bootvorgang abbrechen.

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

Verschaffen Sie sich zuerst 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 fdisk, 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.

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

pi@raspberrypi:~ $ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-15141503, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-15141503, default 15141503):

Created a new partition 1 of type 'Linux' and of size 7.2 GiB.

Command (m for help): p
Disk /dev/sda: 7.2 GiB, 7752450048 bytes, 15141504 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6fcf21f3

Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1        2048 15141503 15139456  7.2G 83 Linux


Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

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/

Zum Übertragen der Daten von der aktuellen Root-Partition auf die neue Root-Partition verwende ich hier rsync. Da rsync standardmäßig noch nicht installiert ist, holen Sie dies mit den folgenden Befehlen nach.

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

Starten Sie jetzt die Datenübertragung von der SD-Karte auf den USB-Datenträger. 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, können Sie die /etc/fstab auf der neuen Root-Partition anpassen. Öffnen Sie daher 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 den Devicenamen der neuen Root-Partition (in diesem Fall /dev/sda1).

/dev/sda1       /               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 den Devicenamen der neuen Root-Partition.

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 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-Datenträger (/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_2826.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer