1. Libros y videos
  2. Raspberry Pi
  3. Arrancar desde una unidad externa
Extrait - Raspberry Pi La guía imprescindible para aprovechar su nano-ordenador
Extractos del libro
Raspberry Pi La guía imprescindible para aprovechar su nano-ordenador
1 opinión
Volver a la página de compra del libro

Arrancar desde una unidad externa

Introducción

El capítulo anterior (Utilizar una memoria de almacenamiento externa) muestra cómo usar una memoria de almacenamiento externa para almacenar los datos. Esta memoria puede ser una llave USB o un disco duro USB. El disco duro externo, conectado en modo USB, presenta la ventaja de tener una velocidad de transferencia elevada y un bajo coste por cada GB de memoria.

Cuando arranca la Raspberry Pi B+ es necesaria la tarjeta micro SD. Es en la primera partición de esta tarjeta, formateada en FAT, donde obligatoriamente el SoC va a cargar los primeros archivos de su secuencia de inicio.

Con la Raspberry Pi 3 y el SoC BCM2837 es posible no arrancar desde la tarjeta micro SD, sino directamente desde la llave USB o el disco duro conectado a la Raspberry Pi 3.

Será necesario, obligatoriamente, prever una alimentación externa para el disco duro en caso de que encuentre problemas durante la conexión del disco duro a la Raspbery Pi. Algunos discos duros (cada vez menos) se entregan con una fuente de alimentación. Otros disponen de dos tomas USB, una reservada únicamente a la alimentación y la otra para la alimentación y la transferencia de los datos en el bus USB.

Hay que enchufar el cable de alimentación y datos a una de las tomas de la Raspberry Pi, y conectar la toma de alimentación a otra fuente de alimentación, por ejemplo un hub USB alimentado.

Para los discos duros...

Secuencia de boot de la Raspberry Pi

En la partición FAT de la tarjeta micro SD se encuentran los archivos:

  • bootcode.bin: la segunda etapa del bootloader.

  • start.elf: el firmware de la GPU proporcionado en binario.

  • kernel.img: el núcleo del OS, es decir, de Linux con Raspberry Pi OS.

  • cmdline.txt: el archivo que contiene los argumentos que se pasan al núcleo durante el boot.

  • config.txt: archivo opcional, que lee la GPU antes de inicializar la CPU ARM. Contiene información del reparto de la RAM, el overclocking, el modo de vídeo a usar, etc.

En primer lugar, la GPU carga en memoria el archivo bootcode.bin, que luego ejecuta. bootcode.bin carga start.elf, el firmware de la GPU, en la SDRAM. start.elf realiza la compartición de la memoria entre la CPU y la GPU y después carga el núcleo Linux kernel.img en la memoria reservada a la CPU.

Para la generación 4 y 5 Raspberry Pi, el archivo bootcode.bin ya no se carga desde la tarjeta micro SD, sino desde una memoria flash en la tarjeta.

El siguiente esquema muestra el funcionamiento de la Raspberry Pi cuando el sistema de archivos raíz no está situado en la tarjeta micro SD, sino en un disco duro externo.

images/9_1.png

kernel.img busca el sistema de archivos raíz (RFS = Root file System) en función del argumento root (root=/dev/mmcblk0p2) que se pasa en cmdline.txt. Por defecto es /dev/mmcblk0p2, que contiene la RFS. Por tanto, será necesario modificar...

Preparación del disco

El disco duro seleccionado para el inicio de la Raspberry Pi es un disco duro USB 3.0, de la marca Toshiba y de 1 TB de capacidad. Funcionará en modo USB 2.0 en la Raspberry Pi.

Cuando se compra el disco, solo tiene una partición exFAT de 1 TB.

La preparación del disco va a consistir en eliminar esta partición y crear una o varias particiones para el uso del disco con la Raspberry Pi.

Si el disco se debe utilizar tanto en un PC con Windows como en la Raspberry Pi, por ejemplo para leer en la Raspberry Pi vídeos del PC, es necesario prever dos particiones. Una partición Linux para alojar el sistema de archivos raíz y una partición FAT para almacenar los vídeos.

1. Eliminar la partición origen

El disco duro se ha utilizado inicialmente en una máquina que funciona con Windows. Por tanto, solo tiene una partición del mismo tamaño que el disco.

images/RI11_05.png

a. Identificación de la partición a eliminar

El administrador de los discos de Windows identifica el disco como Disco 1, con una partición principal de 931 GB con formato exFAT.

 Conecte el disco duro en el hub USB conectado a la Raspberry Pi.

El disco arranca y el sistema lo reconoce, lo que se puede comprobar con el comando dmesg (Display Message = mostrar mensajes), que muestra en pantalla los mensajes enviados por el núcleo Linux.

 Use el comando dmesg para visualizar los mensajes del núcleo.

[ 1336.537049] usb 1-1.3.2: Product: Portable USB 3.0 Drive  
[ 1336.537063] usb 1-1.3.2: Manufacturer: Toshiba  
[ 1336.537075] usb 1-1.3.2: SerialNumber: 21302B120345  
[ 1336.543037] scsi0 : usb-storage 1-1.3.2:1.0  
[ 1340.639583] scsi 0:0:0:0: Direct-Access     TOSHIBA 
MQ01ABD100       AX00 PQ: 0 ANSI: 2  
[ 1340.645009] sd 0:0:0:0: [sda] 1953525164 512-byte logical   
blocks: (1.00 TB/931 GiB)  
[ 1340.646124] sd 0:0:0:0: [sda] Write Protect is off  
[ 1340.646161] sd 0:0:0:0: [sda] Mode Sense: 00 06 00 00  
[ 1340.647250] sd 0:0:0:0: [sda] No Caching mode page present  
[ 1340.647284] sd 0:0:0:0: [sda] Assuming drive cache: write through  
[ 1340.656251] sd 0:0:0:0: [sda] No Caching mode page present  
[ 1340.656322] sd 0:0:0:0: [sda] Assuming drive cache: write through  
[ 1340.685400]...

Copia del sistema de archivos

El disco está listo para recibir el sistema de archivos raíz. El uso del comando cp, si bien está previsto para copiar el contenido de la tarjeta micro SD al disco duro, es sensible a los permisos que existan en los archivos y directorios. Más radical, el comando dd realiza una copia sector por sector, sin tener en cuenta el contenido de los sectores que se están copiando.

Atención: el comando dd es peligroso si se utiliza incorrectamente. Si los orígenes y destinos if y of son erróneos, hay riesgo de eliminación irreversible de datos.

 Inicie la copia de la partición mmcblk0p2 de la tarjeta micro SD a la partición sda1 del disco duro con el comando dd: sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M.

pi@raspberrypi ~ $ sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M 
117+1 líneas leídas 
117+1 líneas escritas  
3945791488 bytes (3,9 GB) copiados, 253,2 s, 15,6 MB/s 

Al cabo de algunos minutos, el contenido del sistema de archivos raíz se copia al disco duro.

Ahora es posible montar la partición sda1 en el sistema.

 Cree un directorio /mnt/diskusb.

 Monte la partición 1 del disco duro en este directorio.

pi@raspberrypi /mnt $ sudo mkdir diskusb 
pi@raspberrypi /mnt $ sudo mount /dev/sda1 /mnt/diskdur 
pi@raspberrypi /mnt $ cd diskdur 
pi@raspberrypi /mnt/diskdur $ ls 
bin  dev...

Modificación de los archivos de inicio

El sistema de archivos raíz está listo. Para que se pueda informar al sistema de los cambios a realizar durante el inicio también se deben modificar los archivos de inicio.

1. cmdline.txt

El archivo cmdline.txt contiene los argumentos que se pasan al núcleo durante su inicio. En particular contiene la ruta de acceso al sistema de archivos raíz, que por defecto es /dev/mmcblk0p2.

 En primer lugar, haga una copia de seguridad de cmdline.txt. Siempre puede volver atrás en caso de problema.

sudo cp cmdline.txt cmdline.org 

 Abra el archivo /boot/cmdline.txt con nano y sustituya root=/dev/mmcblk0p2 por root=/dev/sda1 en la línea de comandos.

 Compruebe cuidadosamente la modificación y guarde el archivo modificado.

2. fstab

Durante el inicio, el archivo fstab indica al sistema las particiones que debe montar, y en qué punto de conexión debe hacerlo.

El fstab que nos interesa aquí es el que se solicitará durante el inicio en el disco duro. El fstab situado en la tarjeta micro SD no tendrá más utilidad en este momento. Es el fstab situado en el disco duro el que es necesario modificar.

 En primer lugar, haga una copia de seguridad de fstab.

 En /mnt/diskdur/etc/fstab comente (ponga una # al comienzo de línea) la línea que contiene /dev/mmcblk0p2, y añada una línea empezando por /dev/sda1...

Comprobación del funcionamiento

Reinicie la Raspberry Pi. Si todas las modificaciones se han realizado correctamente, el inicio de la Raspberry se hará en la tarjeta micro SD para las primeras etapas y después el sistema de archivos raíz situado en el disco duro se montará en la raíz.

 Compruebe con el comando df que el sistema de archivos situado en el disco duro está en servicio.

login as: pi 
pi@10.25.100.15's password: 
Linux raspberrypi 3.6.11+ #474 PREEMPT Thu Jun 13 17:14:42 BST 2013 armv6l  
  
The programs included with the Debian GNU/Linux system are free software;  
the exact distribution terms for each program are described in 
the individual files in /usr/share/doc/*/copyright. 
  
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
permitted by applicable law.  
Last login: Tue Aug 13 13:36:13 2013  
pi@raspberrypi ~ $ df  
Sys. fich.     1K-blocks    Util. Disponible  Uti% Montado en 
rootfs         309637120  1568180  295471248    1% /  
/dev/root      309637120  1568180  295471248    1% /  
devtmpfs          183620        0     183620    0% /dev  
tmpfs          ...

Ir más allá

El disco duro dispone de una segunda partición formateada en FAT.

 Monte manualmente la segunda partición en una carpeta /data.

 Modifique /etc/fstab para que la partición sda2 se conecte automáticamente al inicio del sistema.

Consulte la solución de estos dos ejercicios en el anexo.

Arrancar en una llave USB sin tarjeta micro SD

Como se ha indicado en la introducción de este capítulo, durante la escritura de estas líneas esta posibilidad ofrecida por el SoC BCM2837 todavía es experimental. Funciona con Raspberry Pi OS y únicamente con algunas llaves USB y discos duros (clásicos o SSD).

1. Principio

Cuando se enchufa, solo está activada la GPU. El procesador ARM está en modo de espera y la SDRAM está desactivada. El SoC tiene una ROM (Read Only Memory - Memoria de acceso de solo lectura) en la que el fabricante ha programado la primera etapa del bootloader. Durante su reactivación, la GPU se configura para ejecutar el programa que está en esta ROM. Esto es lo que hace y el único objetivo del firmware contenido en la ROM es acceder a la tarjeta micro SD, que debe estar formateada en FAT (al menos la primera partición), salvo si se ha modificado un registro de la OTP (One Time Programmable memory), que dice al BCM2837 que, cuando arranque, compruebe si hay una tarjeta SD operativa. Si no es el caso, puede intentar arrancar en el USB el SPI o Ethernet…

images/60.png

En la foto anterior, la Raspberry Pi equipada de una tarjeta HiFiBerry funciona normalmente. Arranca directamente en la llave USB, sin intervención de la tarjeta micro SD.

2. Actualización del sistema operativo

Empiece por actualizar Raspberry Pi OS.

sudo apt-get update  
sudo apt-get upgrade 

Después, el firmware (start.elf y bootcode.bin) en /boot, se debe sustituir por la versión de la rama NEXT (experimental): sudo BRANCH=next rpi-update

pi@raspberrypi:~ $ sudo BRANCH=next rpi-update  
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom 
*** Performing self-update  
*** Relaunching after update  
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom 
*** Downloading specific firmware revision (this will take a few minutes) 
% Total % Received % Xferd Average Speed Time Time Time Current  
Dload Upload Total Spent Left Speed  
100 168 0 168 0 0 294 0 --:--:-- --:--:-- --:--:-- 294  
100 51.1M 100 51.1M 0 0 413k 0 0:02:06 0:02:06 --:--:-- 468k  
*** Updating firmware  
*** Updating kernel modules  
*** depmod 4.4.15-v7+  
*** depmod 4.4.15+  
*** Updating VideoCore libraries  ...

Conclusión

La Raspberry Pi ahora arranca en el disco duro o en llave USB. La tarjeta micro SD ya solo se pide para las primeras etapas del boot en el primero caso y se puede eliminar en el segundo caso. No se somete a más desgaste debido a las frecuentes escrituras realizadas por Linux durante su funcionamiento.

El tiempo de arranque no se ha modificado fundamentalmente. Pero la capacidad disponible ha aumentado enormemente, lo que puede ser útil para algunas aplicaciones.

La tarjeta micro SD utilizada en este capítulo para el arranque sobre el disco duro, ya no se puede utilizar sola. Marque la tarjeta cuidadosamente para que permanezca asociada al disco duro. Bastará con cambiar la tarjeta para probar otras distribuciones, el disco duro seguirá estando disponible para almacenar los datos.

Por el contrario, la tarjeta micro SD utilizada al inicio del capítulo para transferir Raspberry Pi OS a una llave USB siempre se puede utilizar sola, porque el sistema simplemente se ha clonado y la tarjeta micro SD no se ha modificado.