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
    1. pi@raspberry:~ $ ls -l /media/pi
    2. insgesamt 21
    3. drwxr-xr-x 4 pi pi 2560 Jan 1 1970 boot
    4. drwxr-xr-x 4 pi pi 2560 Jan 1 1970 boot0
    5. drwxr-xr-x 5 pi pi 3072 Jan 1 1970 boot-rbp2
    6. drwxrwxrwx 22 root root 4096 Jun 27 03:22 root
    7. drwxrwxrwx 22 root root 4096 Jun 27 03:09 root0
    8. drwxr-xr-x 23 root root 4096 Jul 16 10:06 root-rbp2
    9. 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):

    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
    1. mkdir -p ~/save/boot
    2. mkdir -p ~/save/root
    3. sudo rsync -a --progress /media/pi/boot/ ~/save/boot/
    4. 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
    1. pi@raspberry:~ $ sudo blkid /dev/sdb*
    2. /dev/sdb: PTUUID="d853c545" PTTYPE="dos"
    3. /dev/sdb1: SEC_TYPE="msdos" UUID="2501-AA1C" TYPE="vfat" PARTUUID="d853c545-01"
    4. /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
    1. cp ~/save/boot/cmdline.txt ~/save/boot/cmdline.txt.noobs
    2. 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
    1. sudo cp ~/save/root/etc/fstab ~/save/root/etc/fstab.noobs
    2. sudo nano ~/save/root/etc/fstab


    Der Inhalt sieht etwa so aus:

    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.

    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
    1. sudo rsync -a --progress ~/save/boot/ /media/pi/boot/
    2. sudo rsync -a --progress ~/save/root/ /media/pi/root/
    3. sync

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


    Grüße, STF

    "And now for something completely different."


    Hofeis guide to: Wie frage ich nach Hilfe? *** Mein nagelneuer Raspberry Pi 3B+ zeigt nur ein buntes Bild. (Ab)Hilfe.

    7 Mal editiert, zuletzt von STF ()

  • STF

    Hat den Titel des Themas von „EntNOOBSen“ zu „DeNOOBSation“ geändert.
  • Die Anzahl der reel existierenden Systeme ist so gering, die Möglichkeit hat er bestimmt übersehen :fies: :lol:. Danke für das Aufzeigen einer DeNoobifizierung

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • 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:

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Torvalds, 28.9.2003

    >>> raspiBackup: Sichere Deine Raspberry regelmäßig im laufenden Betrieb <<<

    Einmal editiert, zuletzt von framp ()

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


    Code
    1. 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
    1. ls -lh
    2. insgesamt 6,5K
    3. drwxr-xr-x 3 richi richi 2,5K Jul 27 13:34 boot
    4. 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.

    The S in IoT stands for Security

    Einmal editiert, zuletzt von llutz ()

  • 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
    1. 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
    1. 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
    1. 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
    1. proc /proc proc defaults 0 0
    2. PARTUUID=bb5e94c6-01 /boot vfat defaults 0 2
    3. 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.