1 votes

Pourquoi l'utilisation de liens symboliques dans /system réduit-elle progressivement l'espace disponible ?

Je travaille sur une routine pour échanger des dictionnaires sur un e-reader (Nook Simple Touch--Android 2.1). J'ai mis au point les commandes shell et j'ai construit une application en utilisant Tasker. Tout fonctionne à merveille sauf qu'après quelques changements de dictionnaires, l'espace disponible dans /system (où se trouvent les bases de données des dictionnaires) diminue au point que les dictionnaires de base ne peuvent pas être restaurés à leur place d'origine.

Je commence par déplacer les bases de données de stock de leur emplacement par défaut vers un répertoire où tous les dictionnaires seront stockés. Une option est dans /data/media et l'autre sur la carte SD. Les deux semblent fonctionner correctement. Une fois que ceux-ci sont hors de portée, des liens symboliques sont créés pour les remplacer, se référant aux bases de données dans les répertoires de stockage des dictionnaires. Il s'agit de la séquence générale en termes de commandes 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

ou, pour l'option de stockage /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

Ces changements nécessitent un redémarrage pour prendre effet.

Pour supprimer les liens symboliques en préparation d'un autre dictionnaire ou avant de restaurer le dictionnaire de base à sa place :

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

Comme je l'ai dit, tout fonctionne bien, à l'exception de la disparition de l'espace disponible dans /system, au point qu'il est impossible de restaurer le dictionnaire d'origine.

Avant de procéder à ces opérations, j'utilise généralement environ 80 % de /system. Il devrait rester environ 55 Mo disponibles (avec les dictionnaires de base en place). Mais après plusieurs échanges de dictionnaires, j'affiche environ 89 % de remplissage et je n'ai plus que 30 Mo disponibles. La restauration des dictionnaires de base nécessite environ 57 Mo d'espace disponible.

J'ai cherché dans /system quelque chose de "nouveau" qui prendrait de la place, mais je n'ai rien trouvé.

Je n'ai jamais vu cette question abordée nulle part. Je vous serais reconnaissant de me faire part de vos commentaires.

1voto

Shane Nelson Points 1

Grâce au commentaire d'alecxs et à des recherches supplémentaires dans ce sens, j'ai trouvé une solution, du moins pour mon cas.

Il est indiqué ailleurs que la suppression de fichiers utilisés par des processus en cours d'exécution entraînera une perte d'inodes disponibles. Bien que je ne puisse prétendre comprendre toutes les nuances des inodes, cela m'a incité à examiner les processus d'arrière-plan sur le lecteur électronique. L'un d'entre eux, com.bn.nook.reader.activites, a ses vrilles dans le dictionnaire. J'ai donc essayé :

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

Cela renvoie un nombre à quatre chiffres que j'utilise comme :

adb shell kill [pid]

Je procède ensuite à mes opérations sur les fichiers de la base de données, notamment le déplacement, la suppression, la création de liens symboliques, la suppression de liens symboliques, la restauration des fichiers d'origine, etc.

Tout fonctionne avec seulement les changements attendus dans l'espace disponible du /système à chaque étape. Aucune donnée ne semble être perdue en tuant le processus d'arrière-plan et la fonction de lecture démarre immédiatement lorsqu'un livre est consulté avec le nouveau dictionnaire immédiatement accessible, sans redémarrage nécessaire (un bonus).

Ainsi, avant chaque changement à partir de l'application de gestion du dictionnaire, je récupère le pid et je tue le processus en arrière-plan. Ça marche du tonnerre !

Merci encore, alecxs !

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X