adb remount overlayfs的说明
Posted 望月~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了adb remount overlayfs的说明相关的知识,希望对你有一定的参考价值。
在android R项目中执行adb remount的时候,能看到"Using overlayfs for xxx"的打印,类似如下:
#adb root
restarting adbd as root
#adb remount
Disabling verity for /system
Using overlayfs for /system
Disabling verity for /system_ext
Using overlayfs for /system_ext
Disabling verity for /product
Using overlayfs for /product
Using overlayfs for /vendor
Now reboot your device for settings to take effect
remount succeeded
那这些打印表示什么意思呢?
看打印的内容来看,有overlayfs,先看一下wiki上的描述:https://zh.wikipedia.org/wiki/OverlayFS
截取其中一段描述:
“OverlayFS的主要机制涉及当两个文件系统提供同一名称的目录时目录访问的合并。除此之外,OverlayFS呈现其中一个所产生的对象(如果有),“上层”文件系统优先。OverlayFS与其他覆盖型文件系统不同,OverlayFS合并的目录子树不一定是来自不同的文件系统。”
看到这应该明白了,是为了让lower层的vendor等分区仍然为read-only只读,但是又有一个对应的upper层可读可写,两层不同的文件则放入到work层。
举个例子,当adb remount重启设备后,往vendor分区push内容,这时会在其upper层对应创建相同文件名的文件出来,如果修改此文件名的文件,则会优先修改upper层的数据。
overlay后,能看到vendor有三层了,lowerdir、upperdir、workdir
# mount |grep overlay
(rw,seclabel,noatime,lowerdir=/vendor,upperdir=/mnt/scratch/overlay/vendor/upper,workdir=/mnt/scratch/overlay/vendor/work,override_creds=off)
google在android项目上引入overlayfs就很巧妙了,如果没有这个overlayfs,adb remount后vendor分区本身就需要修改为rw可读可写了,而有了overlayfs,vendor分区还是ro只读的,原始数据不用修改。
/dev/block/dm-3 on /vendor type ext4 (ro,seclabel,relatime,discard)
overlay on /vendor type overlay (ro,seclabel,noatime,lowerdir=/vendor,upperdir=/mnt/scratch/overlay/vendor/upper,workdir=/mnt/scratch/overlay/vendor/work,override_creds=off)
adb remount执行overlayfs动作的地方在fs_mgr_remount.cpp的do_remount函数,感兴趣的可以继续跟踪一下如下代码的详细实现。
if (fs_mgr_overlayfs_setup(nullptr, mount_point.c_str(), &change, just_disabled_verity))
if (change)
LOG(INFO) << "Using overlayfs for " << mount_point;
reboot_later = can_reboot;
user_please_reboot_later = true;
setup_overlayfs = true;
else if (errno)
PLOG(ERROR) << "Overlayfs setup for " << mount_point << " failed, skipping";
retval = BAD_OVERLAY;
it = partitions.erase(it);
continue;
以上是关于adb remount overlayfs的说明的主要内容,如果未能解决你的问题,请参考以下文章
adb remount 失败:remount failed: Operation not permitted