DeNOOBSation

  • Warnung vorweg! (Oder kurz: "Ich wars nicht!")

    Diese Anleitung ist zwar getestet und funktioniert im beschriebenen Fall. Aber wie so oft, wenn viele Daten kopiert, gelöscht, Partitionen angelegt und weitere potenziell gefährdende Dinge unternommen werden, gilt: VORSICHT ist die Mutter des Porzellanladens. Bitte lieber einmal mehr prüfen, ob der eingegebene Befehl wirklich wirklich tatsächlich einhundertprozentig korrekt ist. Bitte nur nachmachen, wenn Ihr genau wisst, was Ihr da tut. Und IMMER VORHER eine Sicherung anlegen (z.B. mit framp s raspibackup), aber das versteht sich ja von selbst. Na denn: Liberté, Egalité, Fraternité.

    Ein mit dem Installer NOOBS installiertes Raspbian lässt sich recht leicht "befreien", es wird dazu nur ein laufendes Linux und evt. Platz zum Zwischenlagern des Systems benötigt. Ob ein RPi, ein PC mit (Live) Linux oder aber eine VM genutzt wird, spielt keine Rolle. Wichtig ist nur, ext4 formatierte Partitionen, wie sie von Raspbian u.a. verwendet werden, korrekt lesen und schreiben zu können.

    Ich beschreibe den Weg mit Zwischenspeicherung der Daten, so dass nur eine (m)SD Karte notwendig ist. Einen zweiten Kartenleser vorausgesetzt, könnte das System auch gleich auf den Zielspeicher geschrieben werden. Das Vorgehen sieht kompliziert aus, ist es aber nicht. Ich habe lediglich so ausführlich wie möglich die Schritte beschrieben.

    (meine) Voraussetzungen

    • PC mit Oracle VM VirtualBox mit Pixel for PC and Mac (beides ist willkürlich gewählt)
    • Speicherkartenleser
    • Speicherkarte mit NOOBS und installiertem Raspbian (in diesem Fall habe ich testweise Raspbian with pixel, Raspbian lite und OSMC installiert)
    • genügend Speicher zum Zwischenlagern des Systems

    Schritt 1 - Identifizieren und Sichern

    • boot und root der betreffenden Installation identifizieren
      (alle mountbaren Partitionen wurden hier automatisch gemountet, sollte das nicht der Fall sein, kann man sie mit sudo blkid anzeigen lassen und manuell die jeweilige Kombination mounten)
    Code
    pi@raspberry:~ $ ls -l /media/pi
    insgesamt 21
    drwxr-xr-x  4 pi   pi   2560 Jan  1  1970 boot
    drwxr-xr-x  4 pi   pi   2560 Jan  1  1970 boot0
    drwxr-xr-x  5 pi   pi   3072 Jan  1  1970 boot-rbp2
    drwxrwxrwx 22 root root 4096 Jun 27 03:22 root
    drwxrwxrwx 22 root root 4096 Jun 27 03:09 root0
    drwxr-xr-x 23 root root 4096 Jul 16 10:06 root-rbp2
    drwxrwxrwx  5 root root 1024 Jul 16 08:25 SETTINGS

    Wie zu erwarten, gehören folgende Kombinationen zusammen:

    boot / root -> Raspbian with pixel

    boot0 / root0 -> Raspbian lite

    boot-rbp2 / root-rbp2 -> OSMC

    Dies ist z.B. an speziellen Dateien erkennbar, im Falle von OSMC sieht boot-rbp2 wie folgt aus (Hervorhebungen von mir):

    Spoiler anzeigen

    pi@raspberry:~ $ ls /media/pi/boot-rbp2/

    bcm2708-rpi-0-w.dtb bcm2710-rpi-cm3.dtb bcm2835-rpi-zero-w.dtb dtb-4.14.34-2-osmc System.map-4.14.34-2-osmc

    bcm2708-rpi-b.dtb bcm2835-rpi-a.dtb bcm2836-rpi-2-b.dtb fixup_x.dat System Volume Information

    bcm2708-rpi-b-plus.dtb bcm2835-rpi-a-plus.dtb bcm2837-rpi-3-b.dtb kernel.img utab

    bcm2708-rpi-cm.dtb bcm2835-rpi-b.dtb bootcode.bin LICENCE.broadcom vmlinuz-4.14.34-2-osmc

    bcm2709-rpi-2-b.dtb bcm2835-rpi-b-plus.dtb cmdline.txt os_config.json

    bcm2710-rpi-3-b.dtb bcm2835-rpi-b-rev2.dtb config-4.14.34-2-osmc overlays

    bcm2710-rpi-3-b-plus.dtb bcm2835-rpi-zero.dtb config.txt start_x.elf

    Man könnte simple Textdateien zur Identifizierung durchaus selbst in boot und root des noch laufenden Systems erstellen, um es hernach leichter finden zu können.

    • Sichern

    Jetzt müssen zwei Verzeichnisse auf einem Datenträger mit genügend Platz (und allen Rechten) erstellt werden, in denen das System zwischengelagert wird (im Beispiel wird das Homeverzeichnis des angemeldeten Nutzers verwendet). Danach werden die Dateien mittels rsync kopiert. Wichtig! Die Option -a sorgt dafür, dass die Rechte erhalten bleiben. Die Option --progress kann natürlich weggelassen werden, allerdings erfolgt dann während des Kopierens - das dauert eine ganze Weile - keinerlei Ausgabe.

    Code
    mkdir -p ~/save/boot
    mkdir -p ~/save/root
    sudo rsync -a --progress /media/pi/boot/ ~/save/boot/
    sudo rsync -a --progress /media/pi/root/ ~/save/root/

    Schritt 2 - Vorbereiten, Anpassen und auf Datenträger zurücksichern

    Entweder werden zuerst auf dem Zielspeicher zwei Partitionen angelegt und mit dem entsprechenden Format formatiert.

    1) FAT32 Partition mit ca. 40 - 50 MB

    2) Label setzen für Partition: boot

    3) ext4 Partition (Rest bzw. beliebige Größe)

    4) Label setzen für Partition: root

    Oder alternativ kann ein Raspbian Image mit Win32Diskimager oder Etcher geschrieben und das System einmal gestartet werden, damit die zweite Partition automatisch auf die volle Größe der Speicherkarte ausgedehnt wird. Wenn das geschehen ist, wird das System wieder heruntergefahren und die Dateien auf den Partitionen boot (Fat32) und root (ext4) werden alle(!) gelöscht, so dass zwei leere Partitionen übrig bleiben.

    Danach werden die PARTUUID der (leeren) Partitionen der neuen Speicherkarte ausgelesen (Hervorhebungen von mir).

    Code
    pi@raspberry:~ $ sudo blkid /dev/sdb*
    /dev/sdb: PTUUID="d853c545" PTTYPE="dos"
    /dev/sdb1: SEC_TYPE="msdos" UUID="2501-AA1C" TYPE="vfat" PARTUUID="d853c545-01"
    /dev/sdb2: UUID="3a07b8d7-e427-4b76-a4ac-fbd5836a6a55" TYPE="ext4" PARTUUID="d853c545-02"

    Jetzt müssen zwei Dateien angepasst werden, damit das System später starten kann. Davor wird der aktuelle Stand gesichert.

    Code
    cp ~/save/boot/cmdline.txt ~/save/boot/cmdline.txt.noobs
    nano ~/save/boot/cmdline.txt

    Hier den Eintrag hinter root= ändern mit der PARTUUID, die gerade ausgelesen wurde (im Beispiel die 4. Zeile mit dem Eintrag TYPE="ext4": PARTUUID="d853c545-02 )

    (Achtung, alles MUSS in einer Zeile stehen bleiben!)

    Das ist das Original (NOOBS)...

    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles

    So wird es geändert:

    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=d853c545-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

    Speichern mit STRG-O, beenden mit STRG-X.

    Die zweite Datei wird wie folgt geändert:

    Code
    sudo cp ~/save/root/etc/fstab ~/save/root/etc/fstab.noobs
    sudo nano ~/save/root/etc/fstab

    Der Inhalt sieht etwa so aus:

    Spoiler anzeigen

    proc /proc proc defaults 0 0

    /dev/mmcblk0p6 /boot vfat defaults 0 2

    /dev/mmcblk0p7 / ext4 defaults,noatime 0 1

    # a swapfile is not a swap partition, no line here

    # use dphys-swapfile swap[on|off] for that

    Hier jetzt die beiden Zeilen mit /dev/mmcblk0px ändern. Wiederum die mit blkid ausgelesenen PARTUUID eintragen (Hervorhebungen wieder von mir). Alles andere genau so stehen lassen.

    Spoiler anzeigen

    proc /proc proc defaults 0 0

    PARTUUID=d853c545-01 /boot vfat defaults 0 2

    PARTUUID=d853c545-02 / ext4 defaults,noatime 0 1

    # a swapfile is not a swap partition, no line here

    # use dphys-swapfile swap[on|off] for that

    Speichern mit STRG-O, beenden mit STRG-X.

    Jetzt werden die Dateien auf die noch leeren Partitionen (in meinem Beispiel wieder automatisch durchs System nach /media/pi/boot und /media/pi/root gemountet) geschrieben.

    Code
    sudo rsync -a --progress ~/save/boot/ /media/pi/boot/ 
    sudo rsync -a --progress ~/save/root/ /media/pi/root/
    sync

    Jetzt kann die Karte ausgeworfen werden und sollte im RPi eingelegt diesen das von NOOBS befreite System starten lassen.

    Grüße, STF

  • Wenn man diese Anleitung noch in ein kleines Script giesst ist das DeNOOBsen ein Klacks.

    Aber Strafe muss sein wenn jemand NOOBs benutzt hat .... dann muss er alle Schritte manuell durchführen :lol:

    PS: So hatte ich mir das auch vorgestellt dass es gehen müsste nachdem ich mir damals oberflächlich das NOOBs Partitionslayout angesehen hatte. Habe nur zugegebenermassen keinen Sinn darin gesehen das auszuprobieren wie STF. Komisch nur dass überall steht dass das schwierig ist :denker:

  • Hab das jetzt einmal versucht und es kam beim kopieren der Dateien von boot diese Meldung:

    Code
    rsync: chown "/media/oi/boot/.COPYING.linux.MCLAkn" failed: Operation not permitted (1)

    Die Dateien auf der SD-Karte gehören jetzt dem User unter Linux (nicht dem Raspbian, sondern dem Linux unter dem ich alles kopiert habe), nicht root. Die SD bootete trotzdem. Müsste ich den Besitzer noch nachträglich ändern?

    Ich habe rsync aber mit sudo ausgeführt, keine Ahnung wieso das nicht geht.

    Beide Mountpoints haben die gleichen Rechte/Besitzer

    Code
    ls -lh
    insgesamt 6,5K
    drwxr-xr-x  3 richi richi 2,5K Jul 27 13:34 boot
    drwxr-xr-x 22 richi richi 4,0K Jul 21 08:51 root
  • Die Dateien auf der SD-Karte gehören jetzt dem User unter Linux (

    /boot = vfat = non-unix => bekommt owner/group des Users beim Mounten, wenn nicht anders angegeben (uid/gid). rsync als non-root-user kann die nicht ändern, also bekommen Dateien beim Kopieren owner/group des Users. Für späteren Gebrauch aber egal.

    Wenn du nichts zu sagen hast, sag einfach nichts.

    Einmal editiert, zuletzt von llutz (27. Juli 2018 um 18:51)

  • Tippfehler, der Ordner im Pfad heißt pi nicht oi. Ändert aber am Problem nichts.

    Das oben war nur eine Bsp.Datei. Gilt für alle Dateien in boot.

    Ich hab rsync als root mit sudo ausgeführt. Und trozdem kommen die Fehler.

  • Sieht Beitrag #8 von llutz. Er hat geschrieben, das es egal wäre. Aber wenn ich es richtig verstanden habe, dann sollte nach dem Booten des RPi /boot/* Benutzer und Gruppe root sein. Bzw. der mount Eintrag für /boot in /etc/fstab legt das fest.

  • Ich hab das ganze jetzt 3x versucht, jedesmal kommt beim booten die Meldung

    Code
    Not syncing: No working init found. Try passing init= option to kernel. See Linux Documentatio/init.txt fot guidance.

    Ich hab es 2x mit manuell erstellten Partitionen auf der neuen SD versucht und einmal mit einem wiederhergestellten Raspbian-Stretch-Image (kein Backup, sondern eines aus dem Netz). Das zunächst gebootet, das Filesystem auf die SD-Karte erweitert und dann alle Daten gelöscht. Immer das gleiche Ergebnis.

    Die cmdline.txt sieht so aus:

    Code
    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=bb5e94c6-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

    alternativ hab ich aus das hier versucht:

    Code
    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

    Die fstab sieht so aus:

    Code
    proc            /proc           proc    defaults          0       0
    PARTUUID=bb5e94c6-01  /boot           vfat    defaults          0       2
    PARTUUID=bb5e94c6-02  /               ext4    defaults,noatime  0       1

    Die PARTUUID stimmt, das hab ich mehrfach geprüft. Hab das ganze auch auf 2 verschiedenen SD-Karte getestet um Fehler auszuschließen.

  • Zitat

    Einen zweiten Kartenleser vorausgesetzt, könnte das System auch gleich auf den Zielspeicher geschrieben werden.

    Der ganze Weg erscheint mir total kompliziert und fehleranfällig. Als Raspi-Anfänger traue ich mich da nicht dran - und für solche ist es ja wohl gedacht, da der Experte ja niemals NOOBS verwendet.

    Könnte man das Ganze in ein Schript giessen und vor allem die einfachere Variante mit zweiter SD-Karte als Ziel beschreiben?

  • Könnte man das Ganze in ein Schript giessen und vor allem die einfachere Variante mit zweiter SD-Karte als Ziel beschreiben?

    Kann man machen, aber es gibt unzählige Ausnahmen, die abgefangen werden müssen.

    Ansonsten hat man hinterher nur Mist auf dem Zieldatenträger.

    Für Anfänger: Einfach ein neues Raspbian OS installieren

  • Ich komme nochmal darauf zurück. Ich beschäftige mich gerade mit RaspiBackup und kann dort mein (leider) NOOBS System nicht mit rsync sichern. Schade, dass in den Anleitungen, die man als blutiger RPi-Anfänger findet immer von NOOBS die Rede ist. Inzwischen habe ich ja dieses Forum gefunden und meine RPis 2 und 3 unter Windows kinderleicht mit einem Raspian ohne NOOBS beglückt.

    Leider ist der RPi 1 in Produktion, betreibt ein großes NAS-Raid, DLNA-Server usw. Bei einem deNOOBSsen darf daher nichts schief gehen. Und ich kann auch nicht so einfach neu installieren ("Für Anfänger: Einfach ein neues Raspbian OS installieren"), Aufwand und Risiko wären enorm. Das Raid wird zwar auch noch gesichert, aber ich habe einfach Bammel davor, dass bei der Umstellung etwas schiefgeht.

    Ich habe eine Kopie der SD-Karte (erstellt mit "SD card copier"). Die könnte ich an meinem Linux-Mint Laptop direkt bearbeiten und ohne Zwischenspeicherung das neue System direkt auf einer neuen Karte erstellen. Dann wäre am RPi nur eine reboot mit Wechsel der SD-Karte nötig. Und die Hoffnung, dass danach alles wie vorher läuft.

    Was halten die Experten davon? Gibt es irgendwo eine Anleitung mit der direkten Änderung von Karte zu Karte NOOBS nach nicht-NOOBS unter Linux?

    Danke schonmal.

  • RaspiBackup und kann dort mein (leider) NOOBS System nicht mit rsync sichern.

    Doch ;) . Ist zwar nicht mehr explizit beschrieben aber das sollte gehen. Du musst allerdings den partitionsorientierten Modus benutzen und * fuer die zu sichernden Partitionen angeben. Ich schreibe sollte da das nicht mehr von mir getestet wird. Ich bin mir aber zu 99.9% sicher dass es funktioniert. Wenn nicht erstelle einen Beitrag im Backupforum und beschreibe was fuer Fehler Du bekommst.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!