在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的说明相关推荐

  1. Android 动态分区详解(七) overlayfs 与 adb remount 操作

    0. 导读 最开始学习 Android 动态分区源码的时候,比较代码发现 system/core/fs_mgr 目录下多了一个名为 fs_mgr_overlayfs.cpp 的文件,一直不知道什么时候 ...

  2. Android中fastboot devices无法发现设备解决方案和adb remount问题解决

    1. 问题描述 今天在对安卓设备进行fastboot解锁的时候,发现当调用adb reboot bootloader后,无法使用fastboot进行解锁,后来通过fastboot devices命令查 ...

  3. android root 挂载分区,adb — adb disable-verity, adb remount 实现重新挂载system分区为可读写分区...

    关键词:adb; disable-verity; adb remount; android 7.1; 如果你的安卓版本是android7.1之前的版本,请参考该文章< 1.android 在版本 ...

  4. adb remount失败解决

    问题:在Android机器上adb remount命令失败 解决方法: 1. 进入shell,使用shell命令将需要读写的文件夹挂在为RW adb root adb shell mount -o r ...

  5. adb remount失败的解决办法:

    adb remount失败的解决办法: adb remount失败大概有两种可能: 前面在学习的时候遇到了adb remount,执行的时候总是失败,现将自己解决问题的思路写下 第一种:因为selin ...

  6. adb remount 失败

    我们在使用adb命令时经常会遇到一些问题,这次就看一下adb remount失败吧. 报错信息:remote couldn't create file: Read-only file system 解 ...

  7. adb remount失败的一种解决办法

    有可能是使能了dm-verity, sudo adb root sudo adb disable-verity 然后重启手机, sudo adb remount 然后再push

  8. Android P userdebug模式获取adb root adb remount 无权限 remount失败

    1.Android P 无法直接 adb remount 原因 Android P之后的版本,google 弃用了 avb 2.0,默认打开了 security boot.DM-Verity 启动策略 ...

  9. adb disable-verity和adb remount的用法

    在Android 7之后,对分区会进行相应的验证,例如system分区,不能向之前的版本一样,使用adb root;adb remount对system分区进行挂载,需要先关闭分区检测功能,所以用ad ...

最新文章

  1. golang源码分析:调度器chan调度
  2. 基于LODOP的打印
  3. MySQL—外连接查询
  4. (三)虚拟化技术重点笔记与总结
  5. hive分隔符_HIVE-默认分隔符的(linux系统的特殊字符)查看,输入和修改
  6. cad2014工具集_2014年最佳公开教育工具和故事
  7. r语言clind函数_R 语言学习笔记 1
  8. centos mysql 安装及配置
  9. 进程和线程的联系和区别
  10. 图像数集据增广的15+种功能总结和Python代码实现
  11. Daily scrum 10.12
  12. @ OutputCache 指令的 VaryByCustom 属性来缓存不同版本的页面
  13. java动态代理_Java核心 -- 动态代理
  14. 基于javaweb的医院门诊收费管理系统(java+html+jdbc+mysql)
  15. 脱库和删库的实践及解决方案
  16. 微信API接口(收藏)
  17. 线性代数及矩阵论(八)
  18. 2022年linux面经必备(持续更新中)
  19. axis调用java实现webservice实例
  20. 移动端可移动小图标(vue版)

热门文章

  1. 如何能能够学好软件编程技术
  2. 滴滴不倒闭,世界和中国的奇迹!
  3. c语言共享内存,在爷儿俩进程间使用共享内存(共享内容含指针)
  4. linux游戏调试,LINUX游戏服务器的安装与调试.doc
  5. 如何在data visualization 中update svg_如何操作小程序页面中data数据区中的数据
  6. NOI图论算法:网络流
  7. 堆之二项堆(Binominal Heap)
  8. 1.4编程基础之逻辑表达式与条件分支 02 输出绝对值
  9. 第53课 化功大法 《小学生C++趣味编程》
  10. 1.5 编程基础之循环控制 05 最高的分数