Saltar al contenido principal

Sistema operativo de sólo lectura

Jose CerrejonAlrededor de 1 minLinuxRaspberry PIBanana PiODROIDBanana PiLinuxRaspberry PIBanana PiODROIDBanana Pi

Sistema operativo de sólo lectura

SD Lock
SD Lock

Tengo un problema: He de montar un proyecto donde en cualquier momento se puede ir la luz o apagarse bruscamente el equipo (léase Raspberry Pi/ODROID/PC). Lo bueno es que no necesito escribir en el sistema, así que hoy voy a montar un sistema operativo de sólo lectura para evitar corromper la tarjeta SD.


Lo que sigue a continuación es casi una traducción del artículo blog.pi3g.com > Make Raspbian System Read-Onlyopen in new window.

Voy a partir de una distribución liviana. Me he decantado por Diet Piopen in new window, pero puedes usar Raspbian u otra. Todos los comandos serán ejecutados como root.

Desactivar swap:

dphys-swapfile swapoff
dphys-swapfile uninstall
update-rc.d dphys-swapfile disable

Instalar UnionFS, que nos va a permitir crear sistemas de ficheros en la RAM (Como en los Live-CD):

apt-get install -y unionfs-fuse

Vamos a crear un script que se encargará de montar en un sistema de ficheros unionfs los directorios /etc y /var. Creamos el fichero con nano /usr/local/bin/mount_unionfs y copiamos el siguiente código:

#!/bin/sh
DIR=$1
ROOT_MOUNT=$(awk '$2=="/" {print substr($4,1,2)}' < /etc/fstab)
if [ $ROOT_MOUNT = "rw" ]
then
/bin/mount --bind ${DIR}_org ${DIR}
else
/bin/mount -t tmpfs ramdisk ${DIR}_rw
/usr/bin/unionfs-fuse -o cow,allow_other,suid,dev,nonempty ${DIR}_rw=RW:${DIR}_org=RO ${DIR}
fi

Lo hacemos ejecutable con chmod +x /usr/local/bin/mount_unionfs

Editar /etc/fstab y modificar los puntos de montaje a modo sólo lectura (ro) y añadiendo /etc y /var. Debe quedar más o menos así:

/dev/mmcblk0p1  /boot           vfat    defaults,noatime,ro  0       0
/dev/mmcblk0p2  /               ext4    defaults,noatime,nodiratime,ro  0       0
mount_unionfs   /etc            fuse    defaults          0       0
mount_unionfs   /var            fuse    defaults          0       0

Limpiamos el directorio Log (Esto es opcional):

mount -o remount,rw /
for f in $(find . -name \*log); do > $f; done
cd /var_org/log
rm -f *.gz

Si quieres instalar algún paquete ejecuta lo siguiente (Este paso del tutorial original a mí no me ha funcionado):

mount -o remount,rw /
aptitude update
aptitude install stress

Listo, ya tienes un sistema de sólo lectura. Es mejorable y tal vez algún día lo haga, pero funcionar, funciona.

wink
wink

Para los que tengan Arch Linux:

Enlace: github.com > Read-only FS on Arch Linux ARMopen in new window