Proceso de arranque Raspbian y la tabla de particiones

13

¿Alguna buena descripción del proceso de arranque de Raspberry Pi y la estructura de partición del disco?

¿Qué se almacena en cada partición (y por qué)?

¿El RPI arranca desde la tarjeta SD (sector cero) o las lecturas de firmware desde la estructura del disco?

Supongo que al ser NOOBS creado copiando algunos archivos bajo cualquier O / S, el firmware RPI conoce la estructura del disco MS-DOS (de alto nivel) y encuentra su camino en la memoria SD.

Quiero clonar una buena tarjeta SD en una tarjeta SD más grande para ampliar el espacio disponible.
¿Puedo crear y particionar una nueva SD y solo DD cada partición al nuevo dispositivo? ¿Qué particiones son necesarias?

¿La 'linux'partición en el nuevo dispositivo será más grande que la original y luego extenderá el espacio en disco?

Tal vez clone en una nueva tarjeta y extienda solo la última partición (p6) para usar el espacio disponible, pero no quiero usar un método de prueba y error, me gustaría saber cómo y por qué.

¿Por qué mi pregunta?

La mayoría de las tarjetas SD RPI tienen dos particiones (fdisk), tal vez cuando se instalan desde un .img

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

Sin embargo, tengo uno con hasta 6 particiones, esta es la estructura heredada de NOOBS.

        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

Creo que hay algo mal con esta imagen. ¿Dos particiones W95?

Me gustaría clonar solo las particiones correctas en una nueva tarjeta. ¡Tengo que trabajar mucho en esta SD en ejecución para comenzar de nuevo! (Por cierto, tengo algunas buenas copias de seguridad).

Algunas notas.

Dividir 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

Dividir p2

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

Dividir 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

La partición p4no existe.

Partición 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
...

Partición p6(la verdadera partición raspbian )

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
fuente
Solo puede tener un máximo de cuatro particiones 'primarias' y, si necesita más que esa cantidad total de particiones, debe convertirse (como lo p2ha hecho) en una partición extendida, en este caso una "Linux" y es un contenedor para el resto los necesarios por encima de 4, y hay más de una forma de organizar esas particiones 'lógicas' dentro de la extendida.
SlySven

Respuestas:

6

Mi resultado final para migrar a una tarjeta SD más grande en una configuración de noobs, es el siguiente.

Realizo una copia de seguridad de la imagen en vivo original en un disco externo temporal, compartido con un cuadro de Windows, una memoria extra lo hará.

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

También puede hacer una copia de seguridad con win32DiskImager, luego, quemé la imagen en una tarjeta SD más grande (pasé de 8 a 16 GB) esta vez, usando win32DiskImager.

Arranqué la SD recién creada. En este punto, el SD aún conservaba las mismas particiones, primarias, extendidas y lógicas. Entonces el arranque debería funcionar sin problemas.

Utilizando

fdisk /dev/mmcblk0

Tome una captura de pantalla en vivo de la tabla de particiones actual con el pcomando

Elimine la partición no utilizada e innecesaria # 3 (p3) ubicada al final del 'disco' físico (después de la partición extendida # 2) con d.

A continuación, elimine valientemente la partición n. ° 2 (p2), la partición lógica anidada también desaparecerá.

Recree la partición extendida # 2, pero ahora, usando todo el espacio disponible.
Para recrear el n. ° 2, use exactamente el mismo sector original inicial y deje fdiskque le proporcione el sector final. Utilice pverificar y que el tipo es extendido tipo '85' y que el nuevo sector final es de hecho más grande que el original.

Recree las dos particiones lógicas anteriores: comience con la partición lógica # 5 (p5); para el sector inicial, use el sector exacto de la captura de pantalla anterior, igual que el sector final (este disco lógico no crecerá), use tpara establecer la identificación en c(MS-DOS). Luego, vuelva a crear la partición n. ° 6 (p6) con el mismo sector inicial que antes pero con el sector final seleccionado por fdisky p' id83 '.

Verifique sus entradas con py si y solo si se ve bien, simplemente escriba la tabla de particiones con lo wcontrario solo ^ C y comience nuevamente.

Reinicia y cruza los dedos. Raspbian puede reiniciarse dos veces.

Luego simplemente expanda el sistema de archivos con

resize2fs /dev/mmcblk0p6

Este es el resultado final, ¡ahora con 8 gb adicionales!

 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

Entonces, ahora mi sector final es 14,442,496 de 6,840,320.

La bota

Sé que este tema está en otra parte, sin embargo, es bueno saberlo.

Raspberry tiene dos procesadores integrados: la GPU (Unidad de procesamiento gráfico) y el ARM, cada uno con una tarea diferente. La GPU comparte la memoria con el ARM, un procesador RISC (Computadora de conjunto de instrucciones reducido) de uso general muy eficiente, que ejecuta un conjunto de instrucciones estándar de la industria. Todo incluido en un BCM2835 'SoC' (Sistema en un Chip)

Al encender el control se le da primero a la GPU, solo el núcleo, al final del proceso de arranque, se ejecutará en el procesador ARM.

En la primera etapa, la GPU ejecutará el firmware ROM en el chip para cargarlo bootcode.binen la memoria caché L2 y pasar el control. bootcode.binhabilitará la tarjeta SD, la SDRAM y usará la primera partición de MS-DOS para buscar, cargar y ejecutar 'start.elf'.

En este punto, los siguientes archivos son considerados por bootcode.binla primera partición de MS-DOS en la tarjeta SD:

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

Hay una buena cantidad de opciones que se pueden personalizar config.txt. Puede editar el archivo montando la SD en una computadora externa o simplemente editar en una unidad en funcionamiento:

nano /boot/config.txt

Los cambios típicos en config.txt están relacionados con overclock , HDMI , tamaño de pantalla , aspecto , cámara , configurar su dirección MAC, etc.

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

Como puede ver, la partición de arranque designada, donde kernel.imgarrancará es / dev / mmcblk0p6 y esta es la segunda partición requerida en su tarjeta SD, formateada como 'ext4' (Linux o Id '83' en la jerga de fdisk).

Finalmente, start.elfcargará y ejecutará kernel.imgsu kernel de Linux.

Puede (debería?) Actualizar el núcleo con rpi-update; si no solo allí apt-get install rpi-update).

nota: el sudoprefijo eliminado por brevedad.

fcm
fuente
3

Si buscas en Google el proceso de arranque de Raspberry PI, encontrarás muchos, incluido ¿Cuál es la secuencia de arranque? (Ha habido algunos cambios menores).

What is stored on each partition (and why)? Esto varía, dependiendo de cómo se configuró y qué distribución se usa.

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

Can I create and partition a new SD and just DD each partition to the new device? Si. Aunque puede ser mejor clonar la tarjeta y expandir la partición.

Most RPI SD cards have two (fdisk) partitions, perhaps when installed from a .img Mientras que Raspbian lo hace, la partición FAT32 normalmente comienza en 8192, lo cual es ideal para tarjetas SD. (Las particiones deben ubicarse en el límite del Grupo de bloques de borrado 4M).

However I have one with as many as 6 partitions, some overlapping other sectors, perhaps this is the structure when started/inherited from NOOBS. Necesita comprender particiones extendidas. Prueba Wiki.

Milliways
fuente
El enfoque en mi pregunta es qué particiones son necesarias y qué particiones no son cuando se expande el espacio en disco en una SD de NOOBS.
fcm
1
Los necesitas a todos. Puede eliminar algunos de los archivos en la partición de recuperación. La conversión de NOOBS a Raspbian estándar se puede hacer, pero requiere un poco (en realidad bastante) de violín. PUEDE usar el Raspbian (p6) con cambios mínimos (a / etc / fstab) con una partición de arranque Raspbian FAT32 estándar.
Milliways