Si eres uno de los afortunados poseedores de alguno o varios de estos pequeños ordenadores, seguramente te habrás dado cuenta de que al instalar una de las imágenes existentes no se aprovecha todo el espacio de la tarjeta de memoria. Por eso mismo he hecho las pruebas pertinentes y te pongo los pasos para saber cómo redimensionar la partición de raspberry pi para usar la sd o microsd entera.
Por lo general al cargar una de las imágenes que podemos encontrar para nuestra raspberry, vamos a ver cómo solo se aprovechan un par de gigas de nuestra tarjeta, y no vamos a tener acceso al resto desde el sistema. Esto pasa por que estas imágenes están pensadas para funcionar con tarjetas de memoria pequeñas, y tienen una tabla de particiones creada de forma predeterminada.
Por ahí te puedes encontrar una buena cantidad de tutoriales que te indican cómo aumentar el tamaño de la partición root modificándola desde otro equipo, pero en la mayoría de los casos te terminará dando problemas, y por tanto es mejor centrarte en una solución como la mía, ya que modificamos el tamaño de las particiones desde la raspberry, sin necesidad mas que de tener acceso a la consola y al usuario root.
Cómo extender la partición root en Raspberry pi para usar toda la tarjeta de memoria
Aunque te puedan parecer unos pasos complejos que ejecutar en consola, no deberías tener problema en realizarlo en cualquiera de las versiones de linux, ya que lo único que vamos a hacer es modificar el sector en el que termina la partición root. En este caso he usado raspbian, que está basado en Debian, y es la versión mínima sin ni siquiera interfaz gráfica, pero te debería funcionar en cualquier versión.
Vamos a necesitar permisos de superusuario (root), ya bien sea añadiendo el prefijo sudo y la contraseña si nos la pide, o directamente acceder como root por ssh o su root desde consola en la misma raspberry. Una vez que tengamos claro que podemos acceder como root simplemente tendremos que seguir una serie de pasos.
Antes de nada te comento que no debes asustarte, ya que solo vamos a hacer que se modifique el inicio y final de la partición root, y después haremos que se asigne dicho espacio a la partición.
Al principio deberíamos tener algo como lo siguiente al ejecutar df -h:
S.ficheros Tamaño Usados Disp Uso% Montado en /dev/root 1,2G 860M 246M 78% / devtmpfs 459M 0 459M 0% /dev tmpfs 463M 0 463M 0% /dev/shm tmpfs 463M 6,2M 457M 2% /run tmpfs 5,0M 4,0K 5,0M 1% /run/lock tmpfs 463M 0 463M 0% /sys/fs/cgroup /dev/mmcblk0p1 60M 20M 41M 34% /boot
Pero sin embargo tengo puesta una MicroSD de 16GB, por lo que estoy desaprovechando prácticamente todo el espacio disponible.
- Empezaremos ejecutando el comando fdisk para empezar a modificar:
fdisk /dev/mmcblk0
- Una vez en la consola de fdisk le daremos a la letra p para que nos liste las particiones, deberemos ver algo como lo siguiente:
Command (m for help): p Disk /dev/mmcblk0: 14,5 GiB, 15523119104 bytes, 30318592 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x6f92008e Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 8192 131071 122880 60M c W95 FAT32 (LBA) /dev/mmcblk0p2 131072 2658303 2527232 1,2G 83 Linux
Apuntaremos el Start de la partición Type Linux, en mi caso 131072, ya que luego nos hará falta para indicar el inicio de la partición. Como puedes ver en mi caso solo hay dos, pero dependiendo de tu distribución puede tener una partición más denominada Linux Swap.
- Ahora eliminaremos las dos particiones Linux y Linux Swap, dejando solo la W95 FAT32 sin tocar. Le damos a la d para eliminar y seleccionamos la partición 2, y si tenemos la de swap lo repetimos con la 3.
Command (m for help): d Partition number (1,2, default 2): 2 Partition 2 has been deleted.
- Ahora tendremos que crear nuevamente la partición root con todo el tamaño restante empezando por el sector que hemos apuntado antes, pulsa n y luego p para crear la partición primaria. Selecciona como número de partición 2.
Cuando te pregunte el First sector o primer sector introduce el apuntado, en mi caso 131072Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): 2 First sector (2048-30318591, default 2048): 131072 Last sector, +sectors or +size{K,M,G,T,P} (131072-30318591, default 30318591): Created a new partition 2 of type 'Linux' and of size 14,4 GiB.
- Por último solo nos queda guardar todos los cambios para que se escriban en la memoria, pulsa w y deberías ver un mensaje en rojo o error como el siguiente:
Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Dispositivo o recurso ocupado The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
Hasta aquí todo bien, de momento no te preocupes por el error, se debe a que el sistema está cargado y por tanto al usar las particiones no puede realizar los cambios. Como puedes ver en la captura todos los pasos los podemos seguir en una simple pantalla.
Para que se escriban los cambios nos tocará reiniciar la raspberry:
reboot
Y ahora si hacemos df -h aún veremos los tamaños de partición antiguos, tenemos que ejecutar un último comando que es
resize2fs /dev/mmcblk0
Esto lo que hará será redimensionar el uso de la partición que hemos asignado con fdisk y hacerlo usable. Tendremos que esperar un rato (a mí me ha tardado unos segundos), dependerá de lo rápida que sea la memoria y nuestra versión de raspberry que tarde más o menos en redimensionar la partición root.
Tan pronto como termine veremos un mensaje como este
root@raspberrypi:~# resize2fs /dev/mmcblk0p2 resize2fs 1.42.12 (29-Aug-2014) El sistema de ficheros de /dev/mmcblk0p2 está montado en /; hace falta cambiar el tamaño en línea old_desc_blocks = 1, new_desc_blocks = 1 The filesystem on /dev/mmcblk0p2 is now 3773440 (4k) blocks long.
Y si ahora hacemos df -h veremos que ya utiliza todo el espacio disponible en la tarjeta de memoria
S.ficheros Tamaño Usados Disp Uso% Montado en /dev/root 15G 861M 13G 7% / devtmpfs 459M 0 459M 0% /dev tmpfs 463M 0 463M 0% /dev/shm tmpfs 463M 6,2M 457M 2% /run tmpfs 5,0M 4,0K 5,0M 1% /run/lock tmpfs 463M 0 463M 0% /sys/fs/cgroup /dev/mmcblk0p1 60M 20M 41M 34% /boot
Ten en cuenta que el sector de inicio tiene que coincidir con el que apuntes, ya que si lo ponemos mal nos podemos encontrar con que la raspberry no arranque. En caso de que quieras hacerlo por ssh puedes ver aquí cómo habilitar el acceso root por ssh en linux que te valdrá para cualquier versión.
¿Por qué no se borran los datos al redimensionar la partición de la raspberry con este método?
Es bastante sencillo, lo que hacemos es eliminar la partición de root y también la de swap si existe, una vez hecho esto volvemos a crear la partición root usando el sector de inicio original y antes de que se escriba cualquier dato en el disco. Esto resulta en que los datos que contiene dicha partición quedan intactos.
Además, en caso de que nos toque eliminar la partición Swap dejamos la zona libre para que la partición root pueda crecer, ya que de lo contrario no podríamos ampliarla por tener el swap a continuación, de esta forma ya no tiene otra partición contigua que le impida usar el resto de la memoria.
Lo último que hacemos después de marcar la nueva tabla de particiones es redimensionar la que existe y la partición root ocupará toda la tarjeta de memoria restante.
¿Tienes una Raspberry Pi? ¿Qué versión y para qué la usas?