La Raspberry Pi sólo arranca desde la SD así que es imposible que hacerla arrancar desde un disco duro. Lo que si es posible es trasladar la partición de arranque a un disco duro obteniendo un aumento significativo de la velocidad y de la «confiabilidad» del equipo (las SD suelen acabar fallando tras un número elevado de ciclos lectura/escritura, mucho antes de que un disco con la misma carga).
Esta configuración es especialmente recomendable al usar la Pi como servidor de ficheros, media server o para usar una base de datos.
¿ Cómo se arranca desde un disco duro ?
Los pasos básicos son:
- Instalar el sistema operativo de la RPi en la tarjeta SD
- Conectar el disco duro
- Preparar el disco con las particiones y formatos adecuados
- Copiar el sistema desde la SD al disco duro
- Modificar el arranque para que acceda al disco y no a la tarjeta
Partimos de la base que el sistema está instalado y la Raspberry Pi funciona perfectamente y que tiene acceso a Internet.
1) Actualizar
El primer paso es actualizar el software y el firmware. Para ello en la consola usaremos los siguientes comandos, contestando si (yes) en caso que nos indique que descargará ficheros:
sudo apt-get update sudo apt-get upgrade sudo rpi-update sudo reboot
El proceso completo puede tardar algunos minutos.
2) Conectar el disco duro
Tan simple como conectar el disco al puerto USB, pero ojo, la RPi no tiene potencia por si sola para alimentar un disco duro externo (o a casi ningún disco externo, que puede que con suerte alguno si que funcione). Es necesario usar un disco con alimentación propia o bien un concentrador USB activo (con su propia fuente de alimentación). Si se usa directamente un disco sin alimentación puede que funcione pero tarde o temprano se producen errores de lectura o resets de la propia RPi.
3) Particionar y formatear
Con el disco correctamente conectado ejecutamos:
sudo fdisk -l
Se nos mostrarán las particiones de la SD y las del disco duro. Lo mas probable es que la SD y el HD aparezcan respectivamente como
/dev/sda y /dev/mmcblk0
Crearemos en el disco como mínimo tres particiones : la de arranque, la de intercambio (swap) y la de trabajo. (Por supuesto son posibles más combinaciones, dejar el swap en la SD, mantener arranque y trabajo en la misma partición, crear varias particiones para datos, … no es muy difícil modificar estas instrucciones para adaptarse a otro escenario. En este caso nos enfocamos en la primera opción descrita).
¡Ojo! Se borrarán todos los datos del disco duro. Si el disco contiene información que quieras guardar haz una copia en otro sitio primero.
Ejecuta
sudo fdisk /dev/sda
Entra «p» para ver las particiones existentes en el disco. Si existen particiones bórralas de una en una con «d» e indicando en número de partición.
En cuanto no existan particiones (o directamente si en disco no tenía ninguna definida) entra «n» para crear la primera partición.
Esta será la partición del sistema, entra «p» (primaria) y «1» como número de partición. Como sector de inicio deja el que el sistema propone y como sector de fin entra «+8GB». (Puedes indicar cualquier otro tamaño siempre y cuando tenga como mínimo el mismo tamaño que la tarjeta SD) .
Entra «n» de nuevo, para la segunda partición, esta vez la de intercambio (swap) a la que daremos un tamaño de 2GB. Como antes tipo «p», número de partición «2», sector de inicio el propuesto por el sistema y sector de fin «+2GB».
Por último creamos la partición de trabajo. Entra «n», «p», partición «3» y deja los valores por defecto para el sector de inicio y de fin.
Con «p» se muestra el listado de las particiones que hemos creado y si está todo a tu gusto entra «w» para que los cambios sean permanentes y salir.
Formateamos la partición de trabajo y la de intercambio respectivamente con los comandos:
sudo mkfs.ext4 /dev/sda3 sudo mkswap /dev/sda2
La partición del sistema se formatea «sola» al copiar el contenido de la SD, así que no tenemos que hacer nada ahora.
4) Copiar el sistema al disco duro
Primero veamos donde está la partición de arranque en la SD. Para ello ejecuta
cat /boot/cmdline.txt
Busca donde pone «root=» y toma nota de lo que aparece detrás (en mi caso root=/dev/mmcblk0p6)
Para copiar la partición de arranque al disco duro:
sudo dd if=/dev/mmcblk0p6 of=/dev/sda1 bs=32M conv=noerror,sync
(modifica el primer parámetro, lo que está después del «if=», para que ponga lo que acabas de anotar)
Comprueba que no hay errores:
e2fsck -f /dev/sda1
y amplia la partición para ocupar todo el espacio disponible
resize2fs /dev/sda1
5) Configurar el arranque
Lo primero es hacer una copia de la configuración actual:
sudo cp /boot/cmdline.txt /boot/cmdline.old
Ahora editamos la configuración modificando el fichero cmdline.txt para ello ejecutamos
sudo nano /boot/cmdline.txt
y modificamos el contenido poniendo /dev/sda1 donde ahora pone /dev/mmcblk0p6
Con Control+O y Control+X guardas los cambios y sales del editor.
Modificaremos ahora la configuración de carga de discos del nuevo sistema. Para ello, montamos el arranque del disco duro
sudo mount /dev/sda1 /mnt
y modificamos los parámetros de carga de los discos, de modo que se carguen de forma automática las particiones de swap y datos que están en el disco duro:
sudo nano /mnt/etc/fstab
Donde pone «/dev/mmcblk0p6″ pon «/dev/sda1″ (sin las comillas) y añade después dos líneas debajo
/dev/sda2 none swap sw 0 0
/dev/sda3 /mnt/wrk ext4 defaults 0 0
Control+O y Control+X para guardar y salir del editor.
Crearemos ahora el punto de montaje para la partición de datos
sudo mkdir /mnt/wrk
y borraremos el fichero de swap
sudo rm /etc/rc2.d/S02dphys-swapfile
Para terminar, nos aseguramos de que todo queda grabado y reiniciamos:
sync sudo reboot
La Raspberry Pi arrancará desde la SD para cargar el sistema desde el disco duro.
Este tutorial está basado en los que están enlazados mas abajo, ninguno ha sido herido en la elaboración de este documento. http://www.blogdugas.net/?p=269 http://www.raspberrypi.org/forums/viewtopic.php?f=26&t=26751 http://tech.enekochan.com/en/2013/11/02/make-raspbian-run-from-an-external-usb-hard-drive-or-usb-memory-stick/ http://raspberrypihobbyist.blogspot.com.es/2013/07/running-from-external-hard-drive.html
Muy útil. Gracias
Podrías indicar la fuente sobre la que te has basado.
http://raspberrypihobbyist.blogspot.com.es/2013/07/running-from-external-hard-drive.html
Hola ‘copypaste’, gracias por tu comentario.
El post está elaborado en base a un combinación de varias fuentes, todas con un contenido muy parecido. Además de la que indicas las otras están enlazadas aquí:
http://www.blogdugas.net/?p=269
http://www.raspberrypi.org/forums/viewtopic.php?f=26&t=26751
http://tech.enekochan.com/en/2013/11/02/make-raspbian-run-from-an-external-usb-hard-drive-or-usb-memory-stick/
He modificado el post para incluirlas.