是否可以为Android 4.x创建RAMDisk / Ramdrive?


8

是否可以在扎根的Android 4.x上创建自动增长的tmpfs ramdisk?如果是,怎么办?


2
您需要什么呢?
geffchang

各种文档文件的临时存储
eadmaster 2013年

1
SD卡在关闭时不会自动清洗...
eadmaster 2014年

2
@geffchang他为什么需要这个有什么区别?我碰巧也需要这个,原因完全不同。
Michael

3
就我而言,原因是用于临时存储(Android几乎可以随时警告我的进程而无需发出警告)而无需触摸闪存(有限的擦除周期,增加的电源使用量,更慢的速度等)
2014年

Answers:


6

如果您这样做cat /proc/filesystems,则应注意tmpfs。因此,如果您有权访问该mount命令,则应该能够

  1. 建立目录(mkdir MYDIRECTORY
  2. 在其中挂载tmpfs文件系统(mount -t tmpfs tmpfs MYDIRECTROY

默认情况下,tmpfs挂载将使用系统上可用RAM的一半。因此,您可以将其视为“自动收缩”,而不是“自动增长”,即使用得越多,可用的RAM就越少。在最坏的情况下,您的系统可能会开始交换(不需要)。您可以使用选项为该安装使用不同的RAM大小。

2017年2月28日更新:由于Android施加的限制,您应在可写入所有应用程序的文件下方选择一个挂载点。就像SD卡一样。


好的,所有应用程序mount -o size=16M -t tmpfs tmpfs /data/local/tmp
均可

@eadmaster的哪一部分使所有人都可写?大小或挂载点?(这对我不起作用...)
Michael

@Michael您会看到什么属性。如果您ls -Fal在挂载目录中发布?
Nils

ls -Fal挂载目录中的文件没有输出。我只是得到提示。如果我从父母那里列出目录,我会得到drwxrwxrwt root root 2014-04-06 20:18 tmp
Michael

@Michael(如果您的操作系统已植根),您应该可以访问它
eadmaster 2014年

3

从OP附带的链接中,关键部分进行了总结:

从2.4版本开始,Linux内核支持tmpfs。[3] tmpfs(以前称为shmfs)基于引导期间使用ramfs代码

强调我的,那就是RAMDisk的目的!它使内核可以临时挂载根文件系统,并在启动时继续执行必要的脚本。

在Android的情况下也是如此,无论是通过Odin,fastboot,Kies,Sony Update Software,Heimdall等boot.img方式闪现到/boot分区的每一个,都包含“ ramfs代码”,该代码具有包含相关代码的目录结构被包含在内:

  • /dev 用于设备文件
  • /sbin 用于系统二进制文件
  • /sys安装 用于与设备文件进行交互的用途/proc

启动脚本读取ramfs目录结构,并/system在启动的早期阶段成功挂载ramfs目录结构。

与问题中OP的关键字有关:

创建一个自动增长的...

它本身并不会自动增长,而是受ramfs结构和可用RAM数量的限制,更重要的是,它在重新启动后会消失!

混淆来自“ RAMDisk”与“ RAMDrive”的可互换混合使用,从技术上讲,RAMDrive是本机交换分区中的交换空间,通常在台式机Linux上发现如果您考虑使用DOS的旧DOS时代。 ,以模拟驻留在内存中的磁盘驱动器,并且将程序复制到该磁盘并加载得更快时执行速度不会更快,而不是从旧的MFM / RLL磁盘驱动器中加载(曾经见过DOS目录列表在这些驱动器上滚动得非常慢?),也被称为RAMDisk!(更糟糕的是,那时,不同的制造商生产RAMDRIVE.SYS甚至RAMDISK.SYS!)

就Linux内核而言,无论是台式机还是Android,RAMDisk都是tmpfs,但不适合普通用户存储数据/文档等,因为它仅供内核本身使用!

编辑

要注意下面的@nil注释,可以将其挂载,但是它要付出一定的代价,分配给tmpfs获取器的资源将减少一半,并且会用掉剩余的任意RAM量的一半。实际上,从在设备上运行Android的角度来看,这不是一个理想的途径。

这就是该/sdcard进来,到用户数据/文件,因为这个原因独自一人,因此为什么我省略了事实,你可以,但话又说回来,为什么

  • 如果最终用户忘记将数据保存到正确的位置怎么办-因为重启后数据丢失了!

因此,简短的答案是:是的,可以。mount -t tmpfs
尼尔斯,

@Nils我没有说是!从读取ramfs(具有准系统初始化脚本)的内核启动并执行mount -t tmpfs 后开始,即完成安装后,系统的其余部分将像在开机后(在Android环境中)那样启动。此外,例如,通过事后这样做adb shell,您正在减少系统资源,尤其是在内存和资源有限的智能手机的情况下!
t0mm13b 2013年

1
不,安装tmpfs不会使用RAM。当您将文件放入其中时,使用将开始-至少这是我的Linux服务器所做的。Android可以在Linux上运行...
Nils

@Nils非常错误的印象。Android无法在Linux上运行!内核是linux,但是userland空间不是bash之类的东西,就像台式机一样。它使用仿生运行时库,从那里一直到Android主屏幕都没有glibc和dalvik / zygote。
t0mm13b

tmpfs是内核而不是用户空间。因此,我的猜测是这甚至不是内核模块,因为在引导过程中需要安装initrd。
Nils
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.