Est-il possible de créer un RAMDisk / Ramdrive pour Android 4.x?

8

Est-il possible de créer un ramdisk tmpfs à croissance automatique sur un Android 4.x enraciné? Si oui, comment?

eadmaster
la source
2
Pourquoi avez-vous besoin de cela?
geffchang
stockage temporaire pour divers fichiers de documents
eadmaster
1
La carte SD n'est pas nettoyée automatiquement à l'arrêt ...
eadmaster
2
@geffchang quelle différence importe pourquoi il en a besoin? il se trouve que j'en ai besoin aussi, pour une raison totalement différente.
Michael
3
et dans mon cas, la raison est pour le stockage temporaire (Android peut tuer mon processus sans avertissement à presque tout moment) sans avoir besoin de toucher au flash (cycles d'effacement limités, consommation d'énergie accrue, plus lent, etc.)
Michael

Réponses:

6

Si vous faites cela, cat /proc/filesystemsvous devriez remarquer tmpfs . Donc, si vous avez accès à la mountcommande, vous devriez pouvoir

  1. créer un répertoire ( mkdir MYDIRECTORY)
  2. y monter un système de fichiers tmpfs ( mount -t tmpfs tmpfs MYDIRECTROY)

Par défaut, un montage tmpfs utilisera la moitié de la RAM disponible sur votre système. Donc, plutôt que de "croître automatiquement", vous pouvez le considérer comme "rétrécissant automatiquement" - c'est-à-dire que plus vous l'utilisez, moins la RAM sera disponible. Dans le pire des cas, votre système peut commencer à échanger (ce que vous ne voulez pas). Vous pouvez utiliser des options pour utiliser une taille de RAM différente pour ce montage.

Mise à jour du 28/02/2017: En raison des restrictions imposées par Android, vous devez choisir un point de montage en dessous d'un inscriptible pour toutes les applications. Comme une carte SD.

Nils
la source
ok, cette façon est accessible en écriture par toutes les applications:mount -o size=16M -t tmpfs tmpfs /data/local/tmp
eadmaster
@eadmaster quelle partie à ce sujet le rend accessible à tous? la taille ou le point de montage? (ça ne marche pas pour moi ...)
Michael
@Michael pour quels attributs voyez-vous. si vous émettez ls -Faldans le répertoire monté?
Nils
ls -Faldans le répertoire monté ne donne aucune sortie. Je reçois juste l'invite. Si je liste le répertoire du parent, je reçoisdrwxrwxrwt root root 2014-04-06 20:18 tmp
Michael
@Michael si votre système d'exploitation est enraciné, vous devriez pouvoir y accéder
eadmaster
3

Du lien que l'OP a inclus, la partie clé l'a résumé:

tmpfs est pris en charge par le noyau Linux à partir de la version 2.4 et supérieure. [3] tmpfs (anciennement shmfs) est basé sur le code ramfs utilisé lors du démarrage

Soulignez le mien, c'est à cela que sert le RAMDisk! Il permet au noyau de monter temporairement le système de fichiers racine et de continuer à exécuter les scripts nécessaires au démarrage.

Il en va de même dans ce cas d'Android, tous ceux boot.imgqui sont flashés sur la /bootpartition, que ce soit par Odin, fastboot, Kies, Sony Update Software, Heimdall, etc., contient le "code ramfs", qui a une structure de répertoires contenant des éléments pertinents. sont inclus:

  • /dev pour les fichiers de périphérique
  • /sbin pour les binaires système
  • /syspour l'utilisation de l'interaction avec les fichiers du périphérique après le /proc montage

Le script de démarrage lit la structure du répertoire ramfs et la monte après avoir correctement monté le /systemdans la toute première étape de démarrage.

Comme par rapport au mot clé du PO dans la question:

créer une croissance automatique ...

Il ne se développe pas automatiquement en soi, il est plutôt limité par la structure ramfs et la quantité de RAM disponible, et plus important encore, il disparaît au redémarrage!

La confusion vient de l'inter-mélange de "RAMDisk" avec "RAMDrive" de manière interchangeable, techniquement un RAMDrive, est un espace de swap dans la partition de swap native, communément trouvé sur le bureau Linux Si vous pensez à l'ancienne ère DOS, où RAMDrive était utilisé , pour simuler un lecteur de disque résidant en mémoire, et les programmes lorsqu'ils sont copiés sur ce disque, et chargés plus rapidement ne s'exécutent pas plus rapidement , plutôt que de charger à partir des anciens lecteurs de disque MFM / RLL ( Voir la liste des répertoires DOS défiler très lentement sur ces lecteurs) ? ) cela, était également connu sous le nom de RAMDisk! (Pour aggraver les choses, à l'époque, différents fabricants produisaient RAMDRIVE.SYS ou même RAMDISK.SYS!)

Dans le cas du point de vue du noyau Linux, à la fois de bureau et d'Android, RAMDisk est tmpfs , mais n'est pas destiné aux utilisateurs normaux pour stocker des données / documents, etc. car cela est exclusivement destiné à l'usage du noyau lui-même!

Éditer

Pour noter le commentaire de @ nil ci-dessous, vous pouvez le monter oui, mais il a un coût, les ressources allouées au tmpfssont divisées par deux et utilisent la moitié du reste de la quantité de RAM restante. De manière réaliste, ce n'est pas une avenue idéale pour poursuivre du point de vue d'Android fonctionnant sur des appareils.

C'est là /sdcardqu'intervient, pour stocker les données / documents utilisateur pour cette seule raison, d'où la raison pour laquelle j'ai omis le fait que vous pouvez, mais là encore, pourquoi ?

  • Et si l'utilisateur final oublie de sauvegarder les données au bon endroit - parce que cela est perdu au redémarrage!
t0mm13b
la source
Donc, la réponse courte est: oui, vous le pouvez. mount -t tmpfs.
Nils
@Nils je n'ai pas dit oui! Cela se fait à partir du moment où le noyau a démarré et s'exécute mount -t tmpfs après avoir lu les ramfs (qui a un script d'initialisation barebones), une fois qu'il est monté, le reste du système s'affiche comme dans le post-démarrage, qui est l'environnement Android. De plus, en faisant cela par la suite, par exemple adb shell, vous réduisez les ressources système, en particulier dans le cas des smartphones avec une mémoire et des ressources limitées!
t0mm13b
1
Non, le montage d'un tmpfs n'utilisera pas de RAM. L'utilisation commencera lorsque vous y mettrez des fichiers - c'est du moins ce que font mes serveurs Linux. Et Android fonctionne sur Linux ...
Nils
@Nils Très mauvaise impression. Android ne fonctionne pas sur Linux! Le noyau est Linux, mais l'espace utilisateur n'est pas bash, etc., comme son homologue de bureau complet. Il utilise la bibliothèque d'exécution bionique, pas de glibc et dalvik / zygote à partir de là vers l'écran d'accueil Android.
t0mm13b
tmpfs est un noyau et non un espace utilisateur. Donc, je suppose que ce n'est même pas un module de noyau, car cela est nécessaire lors du démarrage pour monter l'initrd.
Nils