Raspbian-Boot-Prozess und die Partitionstabelle

13

Gibt es eine gute Beschreibung des Raspberry Pi-Startvorgangs und der Festplattenpartitionsstruktur?

Was wird auf jeder Partition gespeichert (und warum)?

Startet das RPI von der SD-Karte (Sektor Null) oder liest die Firmware von der Festplattenstruktur?

Ich gehe davon aus, dass die RPI-Firmware, die NOOBS erstellt, indem sie einige Dateien unter einem beliebigen Betriebssystem kopiert, die MS-DOS-Festplattenstruktur (auf hoher Ebene) kennt und den Weg in den SD-Speicher findet.

Ich möchte eine gute SD-Karte auf eine größere SD-Karte klonen, um den verfügbaren Speicherplatz zu erweitern.
Kann ich eine neue SD erstellen und partitionieren und nur jede Partition auf das neue Gerät übertragen? Welche Partitionen werden benötigt?

Die 'linux'Partition auf dem neuen Gerät ist größer als das Original und erweitert dann den Speicherplatz?

Vielleicht in eine neue Karte klonen und nur die letzte Partition (S. 6) erweitern, um den verfügbaren Speicherplatz zu nutzen, aber ich möchte keine Try-and-Error-Methode verwenden, möchte wissen, wie und warum.

Warum meine Frage?

Die meisten RPI-SD-Karten haben zwei (fdisk) Partitionen, möglicherweise wenn sie über eine .img-Datei installiert werden

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        2048   155647   153600   75M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      157696 15351807 15194112  7.3G 83 Linux

Ich habe jedoch eine mit bis zu 6 Partitionen. Dies ist die Struktur, die von NOOBS geerbt wurde.

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192     1675781      833795    e  W95 FAT16 (LBA)
/dev/mmcblk0p2         1679360    15499263     6909952   85  Linux extended
/dev/mmcblk0p3        15499264    15564799       32768   83  Linux
/dev/mmcblk0p5         1687552     1810431       61440    c  W95 FAT32 (LBA)
/dev/mmcblk0p6         1818624    15499263     6840320   83  Linux

Ich denke, mit diesem Bild stimmt etwas nicht. Zwei W95-Partitionen?

Ich möchte nur die richtigen Partitionen auf eine neue Karte klonen. Ich habe zu viel Arbeit an diesem laufenden SD, um noch einmal von vorne zu beginnen! (Übrigens habe ich ein paar gute Backups).

Einige Notizen.

Trennwand p1

-rwxr-xr-x 1 root root  18K 2015-03-09 04:45 bootcode.bin
-rwxr-xr-x 1 root root 2.2K 2015-03-09 04:45 INSTRUCTIONS-README.txt
drwxr-xr-x 4 root root  32K 2015-03-09 04:45 os
...
-rwxr-xr-x 1 root root 542K 2015-03-09 04:45 recovery.elf
-rwxr-xr-x 1 root root    0 2015-03-09 04:45 RECOVERY_FILES_DO_NOT_EDIT
-rwxr-xr-x 1 root root 2.1M 2015-03-09 04:45 recovery.img
-rwxr-xr-x 1 root root  20M 2015-03-09 04:45 recovery.rfs
-rwxr-xr-x 1 root root 9.5K 2015-03-09 04:45 riscos-boot.bin
drwxr-xr-x 2 root root 8.0K 2015-12-05 18:13 System Volume Information

Trennwand p2

mount: /dev/mmcblk0p2: can't read superblock

Trennwand p3

-rw-r--r-- 1 root root 274 1969-12-31 19:18 installed_os.json
drwx------ 2 root root 12K 1969-12-31 19:00 lost+found
-rw-r--r-- 1 root root  86 1969-12-31 19:18 noobs.conf

Partition p4existiert nicht.

Partition p5:

-rwxr-xr-x 1 root root 9.7K 2015-12-01 20:17 bcm2708-rpi-b.dtb
...
-rwxr-xr-x 1 root root  18K 2015-12-01 20:17 bootcode.bin
-rwxr-xr-x 1 root root  120 1979-12-31 19:00 cmdline.txt
-rwxr-xr-x 1 root root 1.5K 2015-11-23 09:01 config.txt
-rwxr-xr-x 1 root root  19K 2015-10-14 05:43 COPYING.linux
...
-rwxr-xr-x 1 root root 9.5K 2015-12-01 20:17 fixup_x.dat
-rwxr-xr-x 1 root root  137 2015-02-16 09:57 issue.txt
-rwxr-xr-x 1 root root 3.9M 2015-12-01 20:17 kernel7.img
...
-rwxr-xr-x 1 root root 591K 2015-12-01 20:17 start_cd.elf
...

Partition p6(die echte Raspbian Partition)

drwxr-xr-x   2 root     root     4.0K 2015-07-28 21:40 bin
drwxr-xr-x   2 root     root     4.0K 2015-02-15 09:09 boot
drwxr-xr-x 119 root     root     4.0K 2015-12-23 15:36 etc
drwxr-xr-x   4 root     root     4.0K 2015-12-19 20:53 home
drwxr-xr-x  15 root     root     4.0K 2015-12-20 22:08 lib
drwx------   2 root     root      16K 2015-02-15 06:21 lost+found
....
drwxr-xr-x  12 root     root     4.0K 2015-11-04 15:18 var
fcm
quelle
Sie können nur maximal vier "primäre" Partitionen haben. Wenn Sie mehr als die Gesamtzahl der Partitionen benötigen, muss eine (wie bei " p2hat") erweiterte Partition erstellt werden - in diesem Fall eine "Linux" -Partition und ein Container für die verbleibenden Partitionen diejenigen, die über 4 benötigt werden - und es gibt mehr als eine Möglichkeit, diese "logischen" Partitionen innerhalb der erweiterten zu organisieren.
SlySven

Antworten:

6

Mein letztes Ergebnis für die Migration auf eine größere SD-Karte mit einer Noobs-Einstellung lautet wie folgt.

Ich sichere das ursprüngliche Livebild auf einem temporären externen Laufwerk, das mit einer Windows-Box geteilt wird, ein Ersatz-Memory-Stick wird es tun.

dd if=/dev/mmcblk0 of=~/backup.img

Sie können auch mit win32DiskImager sichern. Dann habe ich das Image mithilfe von win32DiskImager auf eine größere SD-Karte gebrannt (von 8 auf 16 GB).

Ich habe die neu erstellte SD gebootet. Zu diesem Zeitpunkt behielt der SD immer noch die gleichen Partitionen, primären, erweiterten und logischen. Das Booten sollte also reibungslos funktionieren.

Verwenden

fdisk /dev/mmcblk0

Machen Sie mit dem pBefehl einen Live-Screenshot der aktuellen Partitionstabelle .

Löschen Sie die nicht verwendete und nicht benötigte Partition # 3 (p3) am Ende der physischen 'Festplatte' (nach der erweiterten Partition # 2) mit d.

Wenn Sie als Nächstes Partition 2 (p2) mutig löschen, verschwindet auch die verschachtelte logische Partition.

Erstellen Sie die erweiterte Partition Nr. 2 neu, verwenden Sie jedoch jetzt den gesamten verfügbaren Speicherplatz.
Um # 2 neu zu erstellen, verwenden Sie genau denselben Start-Original-Sektor und fdiskgeben Sie den End-Sektor an. Verwenden Sie pverify und stellen Sie sicher, dass der Typ erweitert ist, Typ '85', und dass der neue Endsektor tatsächlich größer als der ursprüngliche ist.

Erstellen Sie die beiden vorherigen logischen Partitionen neu: Beginnen Sie mit der logischen Partition Nr. 5 (S. 5). Verwenden Sie für den Startsektor den exakten Sektor aus dem vorherigen Screenshot, genau wie für den Endsektor (dieser logische Datenträger wächst nicht). Verwenden Sie t, um die ID auf c(MS-DOS) zu setzen. Erstellen Sie dann die Partition 6 (p6) mit demselben Startsektor wie zuvor, jedoch mit dem mit fdiskund p' id83 ' ausgewählten Endsektor.

Überprüfen Sie Ihre Eingaben mit pund wenn und nur wenn, sieht ok aus, schreiben Sie einfach die Partitionstabelle mit wansonsten nur ^ C und starten Sie erneut.

Starten Sie neu und drücken Sie die Daumen. Raspbian wird möglicherweise zweimal neu gestartet .

Dann erweitern Sie einfach das Dateisystem mit

resize2fs /dev/mmcblk0p6

Dies ist das Endergebnis, jetzt mit zusätzlichen 8 GB!

 Device Boot             Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192     1675781      833795    e  W95 FAT16 (LBA)
/dev/mmcblk0p2         1679360    30703615    14512128   85  Linux extended
/dev/mmcblk0p5         1687552     1810431       61440    c  W95 FAT32 (LBA)
/dev/mmcblk0p6         1818624    30703615    14442496   83  Linux

Also, jetzt ist mein Endsektor 14.442.496 von 6.840.320.

Das Boot

Ich weiß, dass dieses Thema woanders ist, aber das ist gut zu wissen.

Raspberry hat zwei Prozessoren an Bord: die GPU (Graphic Processing Unit) und den ARM mit jeweils unterschiedlichen Aufgaben. Die GPU teilt den Speicher mit dem ARM, einem sehr effizienten Allzweck-RISC-Prozessor (Reduced Instruction Set Computer), der einen Industriestandard-Befehlssatz ausführt. Alles auf einem BCM2835 'SoC' (System on a Chip)

Nach dem Einschalten wird die Steuerung zuerst an die GPU übergeben. Am Ende des Startvorgangs wird nur der Kernel auf dem ARM-Prozessor ausgeführt.

In der ersten Phase führt die GPU die On-Chip-ROM-Firmware aus, um sie bootcode.binin den L2-Cache-Speicher zu laden und die Steuerung zu übergeben. bootcode.binaktiviert SD-Karte, SDRAM und verwendet die erste MS-DOS-Partition, um "start.elf" zu finden, zu laden und auszuführen.

Zu diesem Zeitpunkt werden die folgenden Dateien bootcode.binvon der ersten MS-DOS-Partition auf der SD-Karte berücksichtigt :

/boot/config.txt,  
/boot/cmdline.txt  (kernel parameters)
/boot/bcm????-rpi-*.dtb  (device dependent) 

Es gibt eine Reihe von Optionen, die angepasst werden können config.txt. Sie können die Datei bearbeiten, mit der die SD auf einem externen Computer bereitgestellt wird, oder sie einfach auf einem laufenden Gerät bearbeiten:

nano /boot/config.txt

Typische Änderungen in config.txt beziehen sich auf Übertaktung , HDMI , Bildschirmgröße , Bildseitenverhältnis , Kamera , MAC-Adresse usw.

nano cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait

Wie Sie sehen, ist die vorgesehene Boot-Partition, auf der kernel.imggebootet wird, / dev / mmcblk0p6 und dies ist die zweite Partition, die auf Ihrer SD-Karte erforderlich ist und als 'ext4' formatiert ist (Linux oder Id '83' in fdisk lingo).

Schließlich start.elfwird kernel.imgIhr Linux-Kernel geladen und ausgeführt .

Sie können (sollten?) Den Kernel aktualisieren mit rpi-update; wenn nicht einfach da apt-get install rpi-update).

Hinweis: Das sudoPräfix wurde der Kürze halber gelöscht.

fcm
quelle
3

Wenn Sie für Raspberry PI Boot-Prozess googeln, werden Sie viele finden, einschließlich Was ist die Startreihenfolge? (Es wurden einige kleinere Änderungen vorgenommen).

What is stored on each partition (and why)? Dies hängt davon ab, wie es eingerichtet wurde und welche Verteilung verwendet wird.

Does the RPI boot from the SD card (sector zero) or the firmware reads from the disk structure? Nein.

Can I create and partition a new SD and just DD each partition to the new device? Ja. Möglicherweise ist es jedoch besser, die Karte zu klonen und die Partition zu erweitern.

Most RPI SD cards have two (fdisk) partitions, perhaps when installed from a .img Während dies bei Raspbian der Fall ist, startet die FAT32-Partition normalerweise bei 8192, was ideal für SD-Karten ist. (Partitionen sollten sich an der Grenze von Erase Block Group 4M befinden.)

However I have one with as many as 6 partitions, some overlapping other sectors, perhaps this is the structure when started/inherited from NOOBS. Sie müssen erweiterte Partitionen verstehen. Versuchen Sie Wiki.

Milliways
quelle
Der Fokus auf meiner Frage ist, welche Partitionen benötigt werden und welche Partitionen nicht, wenn der Speicherplatz auf der SD eines NOOBS erweitert wird.
fcm
1
Du brauchst sie alle. Sie können einige der Dateien auf der Wiederherstellungspartition löschen. Die Konvertierung von NOOBS in Standard-Raspbian kann durchgeführt werden, erfordert jedoch einiges (eigentlich einiges) Fummeln. Sie können Raspbian (p6) mit minimalen Änderungen (an / etc / fstab) mit einer Standard-Raspbian-FAT32-Startpartition verwenden.
Milliways