Root-Filesystem auf USB-Datenträger umstellen: Unterschied zwischen den Versionen

Aus CyberWiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 5: Zeile 5:
  sudo service mysql stop
  sudo service mysql stop
  sudo /etc/init.d/apache2 stop
  sudo /etc/init.d/apache2 stop
sudo service logitechmediaserver stop
Im konkreten Fall wird ein Intenso 32GB USB-Stick verwendet, der besonders klein ist.<br />
Im konkreten Fall wird ein Intenso 32GB USB-Stick verwendet, der besonders klein ist.<br />
[[Datei:Intenso.jpg]]<br />
[[Datei:Intenso.jpg]]<br />
Zeile 14: Zeile 15:
* Kopieren der Systempartition
* Kopieren der Systempartition
* Änderung der Konfigurationsdateien (MySQL, Samba) - [[Samba installieren]]
* Änderung der Konfigurationsdateien (MySQL, Samba) - [[Samba installieren]]
====Vorbereitung des USB-Sticks====
====Vorbereitung des USB-Sticks====
Falls der Stick nicht unter Windows angesprochen werden soll, ist es sinnvoll diesen als '''ext4''' zu formatieren. Die Daten sind dann über Samba, in einer Virtuellen Linux-Maschine oder über Filetransfer (scp) erreichbar.<br />
Falls der Stick nicht unter Windows angesprochen werden soll, ist es sinnvoll diesen als '''ext4''' zu formatieren. Die Daten sind dann über Samba, in einer Virtuellen Linux-Maschine oder über Filetransfer (scp) erreichbar.<br />
Zeile 58: Zeile 60:
  #  use  dphys-swapfile swap[on|off]  for that
  #  use  dphys-swapfile swap[on|off]  for that
  UUID=408a8c1c-0e37-46de-8914-3b093e7cca0c /media/usbhdd ext4 defaults,user,rw,noatime 0 0
  UUID=408a8c1c-0e37-46de-8914-3b093e7cca0c /media/usbhdd ext4 defaults,user,rw,noatime 0 0
Ein Reboot sollte nun funktionieren. Damit auch die Applikationen laufen, sind allenfalls auch dort Änderungen erforderlich (Webserver, MySQL, Samba, ...). Das bezieht sich allerdings nur für den Fall, dass root- und Datenpartition getrennt werden!
Ein Reboot sollte nun funktionieren. Damit auch die Applikationen laufen, sind allenfalls auch dort Änderungen erforderlich (Webserver, MySQL, Samba, ...). Das gilt allerdings nur für den Fall, dass root- und Datenpartition getrennt werden!


====Schlussbemerkung====
====Schlussbemerkung====
Zeile 69: Zeile 71:


====Kopieren einer Systempartition====
====Kopieren einer Systempartition====
Mit '''rsync''' kann auch eine Systempartition kopiert werden (Sicherung, Erzeugen einer Testpartition etc.) Angenommen wird, dass der Vorgang auf einer Linux-Maschine (Virtuelle Maschine) durchgefüht wird. Die Einhängepunkte können variieren. Formatierung und Label siehe oben.
Siehe https://wiki.archlinux.org/title/Rsync#Full_system_backup<br />
Mit '''rsync''' kann auch eine Systempartition kopiert werden (Sicherung, Erzeugen einer Testpartition etc.) Angenommen wird, dass der Vorgang auf einer Linux-Maschine (Virtuelle Maschine) durchgefüht wird. Die Einhängepunkte können variieren. Formatierung und Label siehe oben.<br />
ACHTUNG! Es ist wichtig, dass nur Linux-Dateisysteme beteiligt sind, da einige Dateitypen (z.B. Symlinks) unter Windows nicht existieren und die Sicherung nach kopieren auf FAT oder NTFS unbrauchbar werden würde.
  sudo rsync -axv /media/gl/rootfs/ /media/gl/rootfs1/
  sudo rsync -axv /media/gl/rootfs/ /media/gl/rootfs1/
Entscheidend sind die "/" am Ende der Quell- und Zielangabe!
Entscheidend sind die "/" am Ende der Quell- und Zielangabe!

Aktuelle Version vom 24. Januar 2023, 18:02 Uhr

http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_Laufwerke.html

Überblick

Angesichts der heutigen Größen von USB-Stick oder externen Festplatten ist es sinnvoll, das Root-Filesystem auf einen USB-Datenträger auszulagern. Die SD-Karte wird dann nur noch zum Booten lesend angesprochen. Da reicht dann auch die kleinste Größe, weil nur noch die Boot-Partition (Typ vfat) benötigt wird.
ACHTUNG: falls man einen bereits in Betrieb befindlichen Datenträger umbaut, ist es wichtig, diesen zuvor in der Datei /etc/fstab mit "#" auszukommentieren, da sonst der Raspberry Pi nicht mehr fehlerlos bootet. Man kann dann nur mehr im Konsolmodus reparieren. Weiters ist es wahrscheinlich sinnvoll, eventuelle cronjobs vorübergehend stillzulegen.

sudo service mysql stop
sudo /etc/init.d/apache2 stop
sudo service logitechmediaserver stop

Im konkreten Fall wird ein Intenso 32GB USB-Stick verwendet, der besonders klein ist.
Intenso.jpg
Folgende Schritte sind dabei auszuführen:

  • Sicherung der SD-Karte (SD-Karte formatieren und sichern)
  • Sicherung der bisherigen Daten auf dem USB-Stick (falls bereits verwendet -> Copy unter Windows)
  • Vorbereitung des USB-Sticks (partitionieren und formatieren)
  • Einbinden der Partitionen ins System (/etc/fstab)
  • Kopieren der Systempartition
  • Änderung der Konfigurationsdateien (MySQL, Samba) - Samba installieren

Vorbereitung des USB-Sticks

Falls der Stick nicht unter Windows angesprochen werden soll, ist es sinnvoll diesen als ext4 zu formatieren. Die Daten sind dann über Samba, in einer Virtuellen Linux-Maschine oder über Filetransfer (scp) erreichbar.
Hier werden zwei Partitionen verwendet. Eine 4 GB-Partition für das System (das ist bei weitem ausreichend) und der Rest für Daten. Die Partitionierung und Formatierung kann man am Einfachsten mit GParted in der Virtuellen Maschine vornehmen.
Die Systempartition muss zwingend mit ext4 formatiert werden und das Label rootfs erhalten. Die Datenpartition heißt data.

Einbinden der Partitionen ins System

Um die neuen Partitionen dauerhaft ins System einzubinden, werden sie in /etc/fstab eingetragen. Mit sudo blkid werden die dazu notwendigen Informationen angezeigt. Es empfiehlt sich, ein weiteres Terminalfenster zu öffnen. Die Systempartition wird zuerst temporär gemountet mit

$ sudo mount /dev/sda1 /mnt

Die Datenpartition kann bereits in die fstab als /media/usbhdd eingetragen werden. Das Ergebnis sieht dann so aus:

proc            /proc           proc    defaults          0       0
PARTUUID=1fc1d6b9-01  /boot           vfat    defaults          0       2
PARTUUID=1fc1d6b9-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
UUID=408a8c1c-0e37-46de-8914-3b093e7cca0c /media/usbhdd ext4 defaults,user,rw,noatime 0 0

"noatime": Linux speichert standardmäßig die letzte Zugriffszeit einer Datei (atime). Wenn diese Information nicht gebraucht oder nicht gewünscht wird, können Partitionen mit der o. g. Option gemountet werden. Die Speichermedien werden dadurch weniger belastet (weniger Schreiboperationen), was sich zudem in einem kleinen Performance-Schub bemerkbar macht.
Hinweis: In der Regel ist der Zugriff auf die neue Platte nur für den Superuser möglich. Sollen alle User in den Genuss der USB-Disk kommen, könnte man es auch so machen wie beim Verzeichnis /tmp. Hier dürfen alle lesen und schreiben. Damit aber nicht ein User die Dateien eines anderen löschen kann, wird noch das "sticky"-Bit gesetzt (das gilt, wie gesagt, nur für eine zusätzliche Datenpartition!):

chmod 1777 /media/ubshdd

Für den vollständigen Zugriff unter Windows (Samba) muss man für einzelne Verzeichnisse die Berechtigung allerdings öffnen.

chmod 777 /media/usbhdd/2017

Kopieren der Systempartition

Für das Kopieren der root-Partition gibt es mehrere Möglichkeiten (dd, tar). Hier wird rsync verwendet. Das funktioniert relativ schnell und kopiert das laufende System. Es sollten während dieser Zeit natürlich keine verarbeitenden Prozesse laufen. Die Dateien werden dabei in die temporär gemountete Systempartition kopiert.

$ sudo rsync -axv / /mnt

Ist rsync nicht installiert:

sudo apt-get update
sudo apt-get install rsync

Das war's. Es ist naheliegend, diese Methode später auch zum Sichern der root-Partition zu verwenden.

Änderung Konfigurationsdateien

Als letzten Schritt muss der Raspberry Pi so konfiguriert werden, dass er nicht mehr von der SD-Karte sondern vom USB-Datenträger bootet. Dazu wird zuerst die Datei /boot/cmdline.txt bearbeitet. Da es sich um eine doch recht wichtige und kritische Systemdatei handelt, ist zuerst ein Backup eine gute Idee.

sudo cp /boot/cmdline.txt /boot/cmdline.orig

In dieser Datei wird die bisherige Bootpartition /dev/mmcblk0p2 durch die neue Partition /dev/sda1 ersetzt. Zur Sicherheit wird noch ein weiterer Befehl angehängt, falls der Datenträger nicht sofort bereit ist. Die geänderte Datei sieht dann wie folgt aus (eine Zeile!):

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 ↵
 console=tty1 root=/dev/sda1 rootfstype=ext4 ↵
 elevator=deadline rootwait rootdelay=3

Schussendlich muss der USB-Datenträger auch noch in der Datei /etc/fstab als Root-Filesystem eingebunden werden (der alte Eintrag wurde mit "#" auskommentiert). Achtung: NICHT die Datei /etc/fstab auf der SD-Karte, sondern die auf dem USB-Datenträger!

proc            /proc           proc    defaults          0       0
PARTUUID=1fc1d6b9-01  /boot           vfat    defaults          0       2
/dev/sda1       /                     ext4    defaults,noatime  0       1
#PARTUUID=1fc1d6b9-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
UUID=408a8c1c-0e37-46de-8914-3b093e7cca0c /media/usbhdd ext4 defaults,user,rw,noatime 0 0

Ein Reboot sollte nun funktionieren. Damit auch die Applikationen laufen, sind allenfalls auch dort Änderungen erforderlich (Webserver, MySQL, Samba, ...). Das gilt allerdings nur für den Fall, dass root- und Datenpartition getrennt werden!

Schlussbemerkung

Mit der Root-Partition auf einen USB-Datenträger ergeben sich etliche Vorteile:

  • Ein USB-Stick verträgt wesentlich mehr Schreib-/Lesezyklen als eine SD-Karte und eine USB-Platte sowieso.
  • Schreiben und Lesen geht bei USB auch flotter, denn die SD-Karte wird über ein relativ einfaches serielles Protokoll angesprochen.
  • Die SD-Karte benötigt nur noch die Boot-Partition, die vom Typ vfat ist und daher auch unter Windows angesprochen werden kann. Um wieder komplett von SD-Karte zu booten, muss man nur die Datei /boot/cmdline.txt auf der SD-Karte wieder in den Originalzustand versetzen.
  • Von der Root-Partition auf dem USB-Datenträger kann recht einfach ein Backup gezogen werden, indem man den USB-Datenträger mit dem Linux-PC verbindet. Dann kann mittels dd, rsync, tar, etc. auf die gleiche Weise wie oben geschildert der Inhalt des USB-Datenträgers gesichert werden.

Kopieren einer Systempartition

Siehe https://wiki.archlinux.org/title/Rsync#Full_system_backup
Mit rsync kann auch eine Systempartition kopiert werden (Sicherung, Erzeugen einer Testpartition etc.) Angenommen wird, dass der Vorgang auf einer Linux-Maschine (Virtuelle Maschine) durchgefüht wird. Die Einhängepunkte können variieren. Formatierung und Label siehe oben.
ACHTUNG! Es ist wichtig, dass nur Linux-Dateisysteme beteiligt sind, da einige Dateitypen (z.B. Symlinks) unter Windows nicht existieren und die Sicherung nach kopieren auf FAT oder NTFS unbrauchbar werden würde.

sudo rsync -axv /media/gl/rootfs/ /media/gl/rootfs1/

Entscheidend sind die "/" am Ende der Quell- und Zielangabe!