View this PageEdit this PageUploads to this PageVersions of this PageHomeRecent ChangesSearchHelp Guide

Reparar una telecancela con una partición jffs2 llena (que no deja borrar ficheros)

Procedimiento que se ha seguido para reparar una telecancela de tribunal que tenía la partición jffs2 llena por un fichero /home/smp/LSTCOND.SMP que no debería estar ahí y no se podía borrar (mtdblock1 montado en /var con sistema de archivos jffs2).

Resulta que jffs2 no permite borrar ficheros una vez que el sistema de archivos está lleno por lo que la única solución es reformatear la partición. Este procedimiento guarda los datos existentes (quitando el fichero problemático) y crea una nueva partición con esos datos, que a continuación se flashea en el equipo.

1. En uiharu, como root, se instala el paquete que contiene el mkfs.jffs2 y se instala el driver jffs2:
apt-get-get install mtd-utils
modprobe jffs2


2. Se obtienen los datos actuales de la partición; suponiendo que la telecancela está en la red de SICO en la ip 3.0.1.221, en uiharu (3.0.1.3) como usuario dario, se hace:
mkdir -p /src/telecancela-tribunal-fix-jffs2
cd /src/telecancela-tribunal-fix-jffs2
socket-upipe-server 10000 > mtdblock1_without_SMP.tgz
# dejamos esta ventana abierta esperando los datos


3. una ventana diferente, en la telecancela (3.0.1.221, entras con telnet y te haces root), como root:
cd /tmp
# hacemos un ftp a salchicha para coger el socket-upipe
ftp 3.0.1.170
# pones usuario y password de ftp en salchicha, p.ej. dario y la password correspondiente
bin
cd /usr/local/bin
get socket-upipe-client
get socket-upipe-server
quit
# fin del ftp
chmod a+x socket-upipe-client socket-upipe-server
mkdir t
mount --bind /var /tmp/t
tar -cpf - --exclude ./home/smp --exclude ./home/smp/LSTCOND.SMP . | gzip -1 | ../socket-upipe-client 3.0.1.3 10000
cd ..
umount t
ps -efa | sed "s/^ *//g" | grep "reiniciar\|montarNFS\|home\|sleep" | cut -d ' ' -f 1 | tr '\n' ' ' | xargs kill -9
sleep 2
ps -efa | sed "s/^ *//g" | grep "reiniciar\|montarNFS\|home\|sleep" | cut -d ' ' -f 1 | tr '\n' ' ' | xargs kill -9
mount -o remount,ro /var
./socket-upipe-server 10000 | dd of=/dev/mtdblock1 bs=16384
# Se queda esperando datos para sobrescribir la partición jffs2


4. El terminal de (2) ya debe haberse salido del socket-upipe-server al recibir los datos. En uiharu, como root:
cd /src/telecancela-tribunal-fix-jffs2
mkdir t
cd t
tar -xvzpf ../mtdblock1_without_SMP.tgz
cd ..
mkfs.jffs2 --root=t --output=mtdblock1.raw.new --eraseblock=0x20000 --little-endian --no-cleanmarkers --pad=1441792
cat mtdblock1.raw.new | socket-upipe-client 3.0.1.221 10000


5. El terminal de (3) ya debe haber puesto otra vez el prompt del shell al haber terminado de recibir los datos; sólo falta reiniciar la telecancela. En la telecancela (3.0.1.221), como root:
reboot


NOTA: Se ha utilizado información de aquí para construir la orden de mkfs.jffs2.


Attachs (apuntes de cuando se hizo este procedimiento en tribunal)

como.txt
donde.txt
create-jffs2.sh
history.txt
history uiharu 01 usuario.txt
history uiharu 02 root.txt
mtdblock1 without SMP.tgz
proc-mtd.txt