1 votos

¿Por qué el uso de enlaces simbólicos en /system erosiona gradualmente el espacio disponible?

Estoy trabajando en una rutina para intercambiar diccionarios en un e-reader (Nook Simple Touch--Android 2.1). Tengo los comandos del shell clavados y he construido una aplicación usando Tasker. Todo funciona muy bien, excepto que después de unos cuantos cambios de diccionario la cantidad de espacio disponible en /system (donde están las bases de datos de los diccionarios) disminuye hasta el punto de que los diccionarios de stock no pueden ser restaurados a su lugar original.

Empiezo moviendo las bases de datos de acciones desde su ubicación por defecto a un directorio donde se almacenarán todos los diccionarios. Una opción es en /data/media y la otra en la sdcard. Ambas parecen funcionar bien. Una vez que estos están fuera, se crean enlaces simbólicos para reemplazarlos, refiriéndose a las bases de datos en los directorios de almacenamiento de diccionarios. Esta es la secuencia general en términos de comandos del shell:

adb shell ln -s "'/data/media/B&N Downloads/Dictionary/en-de.db'" /system/media/reference/basewords.db
adb shell ln -s "'/data/media/B&N Downloads/Dictionary/inflect-de.db'" /system/media/reference/inflectedwords.db

o, para la opción de almacenamiento /sdcard:

adb shell ln -s "/sdcard/Dictionary/en-de.db" /system/media/reference/basewords.db
adb shell ln -s "/sdcard/Dictionary/inflect-de.db" /system/media/reference/inflectedwords.db

Estos cambios requieren un reinicio para que surtan efecto.

Para eliminar los enlaces simbólicos en la preparación de un diccionario diferente o antes de restaurar el diccionario de stock a su lugar apropiado:

adb shell rm /system/media/reference/basewords.db
adb shell rm /system/media/reference/inflectedwords.db

Como digo, todo funciona bien excepto por la desaparición del espacio disponible en /system hasta el punto de no poder restaurar el diccionario original.

Antes de hacer cualquiera de estas cosas suelo tener un 80% de /sistema utilizado. Deberían quedar unos 55 mb disponibles (eso es con los diccionarios de stock en su lugar). Pero después de varios intercambios de diccionarios, me encuentro con un 89% de uso y unos 30 mb disponibles. El restablecimiento de los diccionarios originales requiere unos 57 mb de espacio disponible.

He buscado en /system tratando de encontrar algo "nuevo" que esté ocupando espacio pero no he podido encontrar nada.

Nunca he visto que se aborde esta cuestión en ningún sitio. Agradecería alguna aportación.

1voto

Shane Nelson Puntos 1

Gracias al comentario de alecxs y a la investigación adicional en ese sentido, he llegado a una solución al menos para mi instancia.

En otro lugar se indica que la eliminación de archivos que están siendo utilizados por procesos en ejecución provocará una pérdida de inodos disponibles. Aunque no puedo decir que entienda todos los matices de los inodos, esto me hizo mirar los procesos en segundo plano del e-reader. Uno, com.bn.nook.reader.activites, tiene sus zarcillos en el diccionario. Por lo tanto, lo intenté:

adb shell pidof com.bn.nook.reader.activities

Esto devuelve un número de cuatro dígitos que uso como:

adb shell kill [pid]

Luego procedo a hacer mis operaciones con los archivos de la base de datos, incluyendo mover, borrar, crear enlaces simbólicos, borrar enlaces simbólicos, restaurar los archivos originales, etc.

Todo funciona con sólo los cambios esperados en el espacio disponible de /sistema en cada coyuntura. No parece que se pierdan datos al matar el proceso en segundo plano y la función de lectura se inicia de inmediato cuando se accede a un libro con el nuevo diccionario inmediatamente accesible, sin necesidad de reiniciar (una ventaja).

Así que antes de cada cambio de la aplicación de gestión de diccionarios simplemente obtengo el pid y mato el proceso en segundo plano. Funciona de maravilla.

¡Gracias de nuevo, alecxs!

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X