È possibile creare un RAMDisk / Ramdrive per Android 4.x?


8

È possibile creare un ramdisk tmpfs a crescita automatica su un Android 4.x con root? Se si, come?


2
A cosa ti serve?
Geffchang,

archiviazione temporanea per vari file di documenti
eadmaster il

1
La SDCard non viene pulita automaticamente allo spegnimento ...
eadmaster

2
@geffchang che differenza importa perché ha bisogno di questo? mi capita di aver bisogno anche di questo, per una ragione totalmente diversa.
Michael,

3
e nel mio caso, il motivo è l'archiviazione temporanea (Android può interrompere il mio processo senza preavviso in quasi ogni momento) senza dover toccare il flash (cicli di cancellazione limitati, maggiore consumo di energia, più lento, ecc.)
Michael,

Risposte:


6

Se lo fai cat /proc/filesystemsdovresti notare tmpfs . Quindi, se hai accesso al mountcomando, dovresti essere in grado di farlo

  1. crea una directory ( mkdir MYDIRECTORY)
  2. montare lì un file system tmpfs ( mount -t tmpfs tmpfs MYDIRECTROY)

Per impostazione predefinita, un tmpfs-mount utilizzerà halv della RAM disponibile sul sistema. Quindi, piuttosto che "auto-crescita", puoi pensarlo come "auto-restringimento", vale a dire che più lo usi, meno RAM sarà disponibile. Nel peggiore dei casi il tuo sistema potrebbe iniziare a scambiare (cosa che non vuoi). È possibile utilizzare le opzioni per utilizzare una diversa dimensione della RAM per quella montatura.

28/02/2017 Aggiornamento: a causa delle restrizioni imposte da Android, dovresti scegliere un punto di montaggio sotto uno scrivibile per tutte le App. Come una scheda SD.


ok, in questo modo è scrivibile da tutte le app:mount -o size=16M -t tmpfs tmpfs /data/local/tmp
eadmaster

@eadmaster quale parte di ciò lo rende scrivibile da tutti? la dimensione o il punto di montaggio? (non funziona per me ...)
Michael,

@Michael per quali attributi vedi. se emetti ls -Falnella directory montata?
Nils,

ls -Falnella directory montata non fornisce alcun output. Ho appena ricevuto il prompt. Se elenco la directory dal genitore, ottengodrwxrwxrwt root root 2014-04-06 20:18 tmp
Michael

@Michael se il tuo SO è
rootato

3

Dal link racchiuso l'OP, la parte chiave lo ha riassunto:

tmpfs è supportato dal kernel Linux dalla versione 2.4 in poi. [3] tmpfs (precedentemente noto come shmfs) si basa sul codice ramfs utilizzato durante l'avvio

Sottolinea il mio, ecco di cosa tratta il RAMDisk! Permette al kernel di montare temporaneamente il filesystem di root e di continuare ad eseguire gli script necessari all'avvio.

Lo stesso vale in questo caso di Android, ognuno dei boot.imgquali viene trasmesso alla /bootpartizione, sia da Odin, fastboot, Kies, Sony Update Software, Heimdall, ecc., Contiene il "codice ramfs", che ha una struttura di directory contenente quelli pertinenti sono inclusi:

  • /dev per i file del dispositivo
  • /sbin per i binari di sistema
  • /sysper l'utilizzo dell'interazione con i file del dispositivo dopo il /proc montaggio

Lo script di avvio legge la struttura della directory ramfs e la monta dopo aver montato correttamente /systemnella fase iniziale di avvio.

Come in relazione alla parola chiave del PO nella domanda:

creare un auto-crescita ...

Non si auto-cresce di per sé, piuttosto, è limitato dalla struttura ramfs e dalla quantità di RAM disponibile e, cosa più importante, scompare al riavvio!

La confusione deriva dall'intercambiare "RAMDisk" con "RAMDrive" in modo intercambiabile, tecnicamente un RAMDrive, è uno spazio di swap nella partizione di swap nativa, che si trova comunemente sul desktop Linux Se stai pensando alla vecchia era DOS, dove è stato utilizzato RAMDrive , per simulare un'unità disco residente in memoria e i programmi quando copiati su quel disco e caricati più velocemente non si eseguono più velocemente , piuttosto che caricarli dalle vecchie unità disco MFM / RLL ( mai vedere l'elenco delle directory DOS scorrere molto lentamente su quelle unità ? ) questo, era anche conosciuto come RAMDisk! (A peggiorare le cose, allora, diversi produttori producevano RAMDRIVE.SYS o addirittura RAMDISK.SYS!)

Nel caso del punto di vista del kernel Linux, sia desktop che Android, RAMDisk è tmpfs , ma non è destinato agli utenti normali per archiviare dati / documenti ecc. Poiché è esclusivamente per l'utilizzo da parte del kernel stesso!

modificare

Per notare il commento di @ nil qui sotto, puoi montarlo sì, ma viene fornito con un costo, le risorse allocate per tmpfsvengono dimezzate e utilizza la metà rimanente di qualsiasi quantità di RAM rimasta. Realisticamente parlando, non è una strada ideale da perseguire dal punto di vista di Android in esecuzione su dispositivi.

È qui che /sdcardarriva, per archiviare i dati / documenti dell'utente solo per quel motivo, quindi perché ho omesso il fatto che puoi, ma poi di nuovo, perché ?

  • Che cosa succede se l'utente finale dimentica di salvare i dati nel posto giusto, perché al momento del riavvio si perdono!

Quindi la risposta breve è: Sì, puoi. mount -t tmpfs.
Nils,

@Nils non ho detto di si! Ciò avviene dal momento in cui il kernel si è avviato ed esegue mount -t tmpfs dopo aver letto i ramfs (che ha uno script init barebone), una volta montato, il resto del sistema si presenta come in post-boot, che è l'ambiente Android. Inoltre, facendo ciò in seguito, ad esempio adb shell, stai riducendo le risorse di sistema, specialmente nel caso di smartphone con memoria e risorse limitate!
t0mm13b,

1
No, il montaggio di un tmpfs non utilizzerà la RAM. L'utilizzo inizierà quando si inseriscono i file al suo interno - almeno questo è ciò che fanno i miei server Linux. E Android funziona su Linux ...
Nils,

@Nils Impressione molto sbagliata. Android non funziona su Linux! Il kernel è Linux, ma lo spazio utente non è bash ecc. Come la controparte desktop completa. Utilizza una libreria di runtime bionica, senza glibc e dalvik / zygote da lì in poi fino alla schermata principale di Android.
t0mm13b,

tmpfs non è lo spazio utente del kernel. Quindi la mia ipotesi è che questo non è nemmeno un modulo kernel, dal momento che è necessario durante l'avvio per montare initrd.
Nils,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.