¿Arrancar desde una memoria / unidad USB externa?

44

Sé que no es posible iniciar directamente desde un dispositivo / memoria USB externo, pero en su lugar, debe iniciar desde la tarjeta SD y luego el dispositivo externo puede hacerse cargo. ¿Cuál es la forma más fácil y preferida de configurar esto, por lo tanto, inicie desde la tarjeta SD y luego deje que un dispositivo externo se haga cargo?

stefan.at.wpf
fuente

Respuestas:

37

Si tiene un sistema operativo existente ejecutándose en el Pi, en primer lugar sería útil saber si el dispositivo USB es compatible. Puede hacer esto montándolo como de costumbre:

mount /dev/sda1 /mnt 

Si eso falla, no podrá usar el dispositivo USB como una partición raíz sin habilitar los módulos del núcleo. Y para eso puede que necesite compilar su propio núcleo.

Si tiene éxito, debería funcionar bien con algunos ajustes de los parámetros de arranque que utiliza Pi:

En una imagen existente, abra cmdline.txt, que se puede encontrar en la partición de arranque, e ingrese las siguientes líneas:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 
root=/dev/sda1 rootfstype=ext4 rootwait text

Todo lo que debe hacer es grabar esa imagen en la tarjeta SD y arrancar la Pi. Si todo está bien, /dev/sda1debe ser la ubicación de la unidad USB cuando se inicia el Pi y, por lo tanto, debe intentar usar esa ubicación como raíz. El rootwaitparámetro es importante ya que hará que el proceso de arranque se bloquee hasta que se reconozca la unidad USB. Sin ella, el Pi puede quejarse de que la ubicación no existe.

Le sugiero que copie la partición raíz de una imagen Raspberry Pi existente en su unidad USB y la use para arrancar.

Avíseme si necesita más información.

Jivings
fuente
+1 Gran respuesta. ¿No debería console=...ya estar allí?
Alex Chamberlain
2
Además, ¿puedes usar UUID en la línea de comando?
Alex Chamberlain
Sí, proporcioné el archivo completo y ¿de dónde habla usar UUID?
Jivings
3
Muchas gracias Jivings, "mostré" la imagen oficial en mi memoria USB, luego copié el material de la partición FAT a una tarjeta SD y ajusté el cmdline.txt. En mi caso, la partición raíz es / dev / sda2, porque / dev / sda1 es la partición de arranque (no utilizada) en el dispositivo USB. No necesitaba el rootwait en mi caso, ¡pero es bueno saber este parámetro!
stefan.at.wpf
@ stefan.at.wpf (y Jivings) Puede usar UUID en lugar de /dev/sdx, al menos en /etc/fstab/, entonces no importa si los xcambios.
Alex Chamberlain
4

La forma más fácil de configurar esto sería usar BerryBoot . Admite la instalación en, o desde, una o más imágenes en una memoria USB (o en la tarjeta SD) desde el primer momento a través de una agradable interfaz GUI.

Para configurarlo, todo lo que tiene que hacer es copiar los ~ 70 MB de archivos de instalación en una tarjeta SD formateada con FAT32, insertarla en su dispositivo y arrancar. Incluso tiene una lista de imágenes preconfiguradas que puede descargar e instalar automáticamente a través de una conexión ethernet o wi-fi.

Luego selecciona el sistema operativo que desea que se inicie de forma predeterminada a partir de sus imágenes disponibles, y si desea agregar nuevas imágenes o cambiar el predeterminado en una fecha posterior, simplemente presione Intro durante el proceso de inicio para reconfigurar.

Nathan Dunn
fuente
mover la imagen a la tarjeta SD? ¿Pensé que queríamos instalarlo en una memoria USB?
Suhaib
Como el OP declaró que no es posible iniciar directamente desde una memoria USB en una Raspberry Pi: necesita una tarjeta SD con un gestor de arranque instalado que pueda pasar el proceso a otro dispositivo una vez encendido.
Nathan Dunn
2

ok, para aclarar

Además de la respuesta de @Jivings:

Hay varias formas de referirse a un disco en el fstab. El uso de / dev / sdXX puede no ser siempre seguro, ya que el orden en que aparecen los discos scsi puede no estar garantizado.

Lo que no sé es si la configuración de arranque comprende algo más que las etiquetas básicas del dispositivo. Sin embargo, "root = / dev / sda1" es una abstracción, por lo que en teoría root = LABEL = TEST podría funcionar. Necesito investigar

Pido disculpas si no estoy siendo muy claro. Obviamente, tengo que ganar algo de habilidad para explicar Linux a gente nueva.

Nox
fuente
1
Jivings: ¿podría explicar algunos de los parámetros en su ejemplo de línea de comando para nosotros nubies? Gracias.
Michael Moriarty
Nunca mencionó fstab. El nombre del dispositivo / partición de destino es un parámetro del núcleo. Creo que otras convenciones de nombres como UUID son posibles con núcleos modernos, especialmente si tienen módulos initrd / initramfs.
jiggunjer