当我玩我的 Android 手机(CyanogenMod 10.1,内核 3.0.78)时,我发现了这个:
- 一个脚本在
/etc/init.d/99system.swap.sh
- 它将 /system 重新挂载为 rw,并在中创建一个映像文件
/system/swap/swap.img
手机启动后,通过查看可以找到这个swap.img文件,并且它正在使用中/proc/swaps
。但/system
安装为 ro。
我尝试在另一部手机上手动执行相同的操作。但是当我尝试重新安装/system
时罗,我收到错误消息,指出有资源正在使用。如果我交换文件上的图像swap.img
,我可以立即重新挂载/system
为罗。
我错了,我不能重新表达/system
为罗在我将其重新安装为读写。拉索夫显示大量进程正在使用/system
。
答案1
理论上应该是可能的,正如swapon
联机帮助页所述:
[...] the swap file implementation in the kernel expecting to be able to write to the file directly, without the assistance of the file system [...]
因此,当您有交换文件时,内核更喜欢将其视为分区,即它确定交换文件在磁盘上的物理位置,然后直接使用该区域,就像使用分区区域一样。这是一个技巧,可以使交换到文件的速度与交换到常规分区的速度一样快。
此时文件系统已脱离循环,应该可以将文件系统本身设置为只读。你是否真的被允许这样做是另一回事;我自己还没有测试过,特别是 Android 的行为可能与常规 Linux 环境不同。