Apakah mungkin untuk membuat RAMDisk / Ramdrive untuk Android 4.x?

8

Apakah mungkin untuk membuat ramdisk tmpfs yang tumbuh secara otomatis pada Android 4.x yang di-rooting? Jika ya, bagaimana?

eadmaster
sumber
2
Untuk apa Anda membutuhkan ini?
geffchang
penyimpanan sementara untuk berbagai file dokumen
eadmaster
1
SDcard tidak auto-dibersihkan di stutdown ...
eadmaster
2
@geffchang apa bedanya mengapa dia membutuhkan ini? Saya kebetulan membutuhkan ini juga, untuk alasan yang sama sekali berbeda.
Michael
3
dan dalam kasus saya, alasannya adalah untuk penyimpanan sementara (Android dapat mematikan proses saya tanpa peringatan di hampir setiap saat) tanpa perlu menyentuh flash (siklus penghapusan terbatas, peningkatan penggunaan daya, lebih lambat, dll.)
Michael

Jawaban:

6

Jika Anda melakukannya, cat /proc/filesystemsAnda harus memperhatikan tmpfs . Jadi, jika Anda memiliki akses ke mountperintah, Anda harus bisa

  1. buat direktori ( mkdir MYDIRECTORY)
  2. pasang sistem file tmpfs di sana ( mount -t tmpfs tmpfs MYDIRECTROY)

Per default tmpfs-mount akan menggunakan halv dari RAM yang tersedia di sistem Anda. Jadi alih-alih "tumbuh otomatis" Anda dapat menganggapnya sebagai "menyusut otomatis" - yaitu semakin banyak Anda menggunakannya, semakin sedikit RAM yang tersedia. Dalam kasus terburuk, sistem Anda mungkin mulai bertukar (yang tidak Anda inginkan). Anda dapat menggunakan opsi untuk menggunakan ukuran RAM yang berbeda untuk pemasangan itu.

2017-02-28 Pembaruan: Karena batasan yang diberlakukan oleh Android, Anda harus memilih titik pemasangan di bawah yang dapat ditulisi ke semua Aplikasi. Seperti Kartu SD.

Nils
sumber
ok, cara ini dapat ditulis oleh semua aplikasi:mount -o size=16M -t tmpfs tmpfs /data/local/tmp
eadmaster
@ kepala bagian apa yang membuatnya bisa ditulisi oleh semua? ukuran atau titik pemasangan? (Ini tidak bekerja untuk saya ...)
Michael
@Michael atribut apa yang Anda lihat. jika Anda mengeluarkan ls -Faldalam direktori yang di-mount?
Nils
ls -Faldalam direktori mount tidak memberikan output. Saya baru saja mendapatkan prompt kembali. Jika saya daftar direktori dari orang tua, saya dapatkandrwxrwxrwt root root 2014-04-06 20:18 tmp
Michael
@Michael jika OS Anda di-rooting, Anda harus dapat mengaksesnya
eadmaster
3

Dari tautan yang dilampirkan OP, bagian kuncinya menyimpulkan:

tmpfs didukung oleh kernel Linux dari versi 2.4 dan lebih tinggi. [3] tmpfs (sebelumnya dikenal sebagai shmfs) didasarkan pada kode ramfs yang digunakan selama bootup

Tekankan pada saya, itu yang dimaksud dengan RAMDisk! Ini memungkinkan kernel untuk secara temporer me-mount sistem file root, dan melanjutkan mengeksekusi skrip yang diperlukan saat start-up.

Hal yang sama berlaku dalam kasus Android ini, masing-masing dan setiap boot.imgyang di-flash ke /bootpartisi, apakah oleh Odin, fastboot, Kies, Perangkat Lunak Pembaruan Sony, Heimdall, dll, berisi "kode ramfs", yang memiliki struktur direktori berisi, yang terkait sudah termasuk:

  • /dev untuk file perangkat
  • /sbin untuk binari sistem
  • /sysuntuk penggunaan berinteraksi dengan file perangkat setelah /proc dipasang

Skrip boot-up membaca struktur direktori ramfs dan memasangnya setelah berhasil memasang /systempada tahap awal boot.

Seperti dalam kaitannya dengan kata kunci OP dalam pertanyaan:

buat penumbuhan otomatis ...

Itu tidak otomatis tumbuh sendiri, melainkan dibatasi oleh struktur ramfs, dan jumlah RAM yang tersedia, dan yang lebih penting, itu menghilang saat reboot!

Kebingungan datang dari inter-pencampuran "RAMDisk" dengan "RAMDrive" secara bergantian, secara teknis RAMDrive, adalah ruang swap di partisi swap asli, biasanya ditemukan di desktop Linux Jika Anda berpikir tentang era DOS lama, di mana RAMDrive digunakan , untuk mensimulasikan penghuni disk drive dalam memori, dan program ketika disalin ke disk, dan dimuat lebih cepat tidak mengeksekusi lebih cepat , daripada memuat dari drive disk MFM / RLL lama ( Pernah melihat daftar direktori DOS gulir dengan sangat lambat pada drive tersebut ? ) ini, juga dikenal sebagai RAMDisk! (Untuk memperburuk keadaan, saat itu, berbagai produsen menghasilkan RAMDRIVE.SYS atau bahkan RAMDISK.SYS!)

Dalam hal sudut pandang kernel Linux, baik desktop dan Android, RAMDisk adalah tmpfs , tetapi tidak dimaksudkan untuk pengguna normal untuk menyimpan data / dokumen dll karena itu hanya untuk penggunaan oleh kernel itu sendiri!

Edit

Untuk mencatat komentar @ nil di bawah ini, Anda dapat memasangnya ya, tetapi disertai dengan biaya, sumber daya yang dialokasikan untuk tmpfsseparuh dan menggunakan hingga setengah dari jumlah RAM yang tersisa. Secara realistis, ini bukan cara yang ideal untuk mengejar dari sudut pandang Android yang berjalan pada perangkat.

Di situlah /sdcardmasuk, untuk menyimpan data pengguna / dokumen untuk alasan itu saja, maka mengapa saya menghilangkan fakta bahwa Anda bisa, tetapi sekali lagi, mengapa ?

  • Bagaimana jika pengguna akhir lupa untuk menyimpan data ke tempat yang tepat - karena itu hilang saat reboot!
t0mm13b
sumber
Jadi jawaban singkatnya adalah: Ya, Anda bisa. mount -t tmpfs.
Nils
@Nils Saya tidak mengatakan ya! Itu dilakukan sejak kernel boot dan dijalankan mount -t tmpfs setelah membaca ramfs (yang memiliki skrip init barebones), setelah itu di-mount, maka seluruh sistem akan menampilkan seperti pada post-boot, yang merupakan lingkungan Android. Selain itu, dengan melakukan itu setelah itu, misalnya adb shell, Anda mengurangi sumber daya sistem, terutama dalam hal ponsel cerdas dengan memori dan sumber daya terbatas!
t0mm13b
1
Tidak, memasang tmpfs tidak akan menggunakan RAM. Penggunaan akan dimulai ketika Anda memasukkan file ke dalamnya - setidaknya inilah yang dilakukan server Linux saya. Dan Android berjalan di Linux ...
Nils
@Nils Kesan yang sangat salah. Android tidak berjalan di Linux! Kernelnya adalah linux, tetapi ruang userland bukan bash, dll. Seperti desktop full-blown counterpart. Ini menggunakan perpustakaan runtime bionik, tidak ada glibc dan dalvik / zygote dari sana ke atas ke layar awal Android.
t0mm13b
tmpfs adalah kernel- bukan ruang pengguna. Jadi saya kira ini bukan modul-kernel, karena ini diperlukan saat boot untuk me-mount initrd.
Nils