adb remount overlayfs的说明

article/2025/9/25 9:51:44

在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;}

为方便与大家及时交流,弄了一个微信公众号,欢迎大家留言沟通~
在这里插入图片描述


http://chatgpt.dhexx.cn/article/Qelj4U2l.shtml

相关文章

[高通SDM450][Android9.0]adb无法进行remount的解决方案

文章目录 开发平台基本信息问题描述解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 在调试开发的时候&#xff0c;执行remount可以获得更高的权限&#xff0c;对系统的一些应用或者文件进行删除或替换&#xff0c;达到快速调试的目的&…

adb remount

使用adb remount失败了&#xff0c;提示 如下图。 解决方法 先执行 adb root 然后 ctrlc, 然后再adb remount就成功了

Android 11 无法remount问题

问题描述&#xff1a; 在Android 11开发的时候&#xff0c;想快速调试把单独编译好的模块push 到 /system 目录下&#xff0c;结果发现remount failed C:>adb root restarting adbd as rootC:>adb remount Skipping /system for remount Skipping /vendor for remount S…

Android P(9.0) userdebug 版本执行adb remount失败

当你执行 adb remount 时会发现提示 remount of the / superblock failed: Permission denied remount failed 原因是android P 版本后 google 启用 avb(Android Verified Boot)2.0&#xff0c;verified boot and DM-verity默认启用策略发生了变化。详情如下&#xff1a; DM-V…

remount

1. 需要获取手机的root权限&#xff0c;方法很多了&#xff0c;我用的是360一键Root&#xff0c;有时也用百度一键Root 2. 从其他手机拷贝sqlite3文件到PC&#xff0c;我是从模拟器copy出来的&#xff0c;为方便大家&#xff0c;附件就有&#xff0c;可以直接下载哈 3. 进入手机…

Typescript之接口(Interface)

我们可以通过Interface关键字来定义限制数据的类型。 1.给对象定义类型 /*** 定义一种类型&#xff0c;名称叫做PersonInfo&#xff0c;里面有三个属性* name 人物的名字,类型为string* age 人物的年龄&#xff0c;类型为number* say 人物的方法&#xff0c;类型为函数类型&a…

astype

anp.array([1.1,1.2]) print(a数据类型&#xff1a;,a.dtype) print(astype修改数据类型&#xff1a;,a.astype(float).dtype) print(原数据类型未改变,a.dtype)#正确操作 aa.astype(float32) print(修改类型后再次操作&#xff0c;类型改变&#xff1a;,a.dtype) ba.astype(in…

TypeScript中的interface和type区别

&#x1f482; 个人网站: 【紫陌】【笔记分享网】 &#x1f485; 想寻找共同学习交流、共同成长的伙伴&#xff0c; 请点击【前端学习交流群】 在 TypeScript中&#xff0c;type 和 interface有些相似&#xff0c;都可以给类型命名并通过该名字来引用表示的类型。不过它们之间使…

TypeScript接口——interface

目录 一、接口概述&#xff1a; 二、接口类型介绍&#xff1a; 1、属性接口&#xff1a; 2、 函数接口&#xff1a; 3、可索引接口&#xff1a; &#xff08;1&#xff09;可索引接口约束数组示例&#xff1a; &#xff08;2&#xff09; 可索引接口约束对象示例&#xf…

【TypeScript】接口类型 Interfaces 的使用理解

导语&#xff1a; 什么是 类型接口&#xff1f; 在面向对象语言中&#xff0c;接口&#xff08;Interfaces&#xff09;是一个很重要的概念&#xff0c;它是对行为的抽象&#xff0c;而具体如何行动需要由类&#xff08;classes&#xff09;去实现&#xff08;implement&#x…

type 与 interface 的区别,你真的懂了吗?

大厂技术 高级前端 Node进阶 点击上方 程序员成长指北&#xff0c;关注公众号 回复1&#xff0c;加入高级Node交流群 在写 ts 相关代码的过程中&#xff0c;总能看到 interface 和 type 的身影。它们的作用好像都一样的&#xff0c;相同的功能用哪一个都可以实现&#xff0c;…

自定义字体 Typeface ttf

一、简介 有时候界面在设计app时会使用一些比较美观的字体&#xff0c;在安卓中使用起来也并不困难&#xff0c;随着安卓SDK的更新&#xff0c;它的实现方式也有所不同&#xff0c;该文章来看看怎么实现自定义字体。 二、普通方法 设置字体TextView.setTypeface(Typeface) pub…

TypeScript - Interfaces(接口)

目录 1、接口介绍 1.1 接口示例 2、可选属性 3、只读属性 4、额外的属性检查 5、函数类型 6、可索引的类型 &#xff17;、类类型 &#xff17;.1 类静态部分和实例部分 &#xff18;、继承接口 &#xff19;、混合类型 1&#xff10;、接口继承类 1、接口介绍 Ty…

type 与 interface

type 与 interface 官方文档是这么说的&#xff1a; For the most part, you can choose based on personal preference, and TypeScript will tell you if it needs something to be the other kind of declaration. If you would like a heuristic, use interface until you…

TypeScript中type和interface区别

typescript中interface介绍&#xff1a;TypeScript 中的接口 interface_疆~的博客-CSDN博客通常使用接口&#xff08;Interface&#xff09;来定义对象的类型。https://blog.csdn.net/qq_40323256/article/details/128478749 type type关键字是声明类型别名的关键字。用来给一…

TypeScript中interface 与 type的区别,你真的懂吗?

在写 ts 相关代码的过程中&#xff0c;总能看到 interface 和 type 的身影。它们的作用好像都一样的&#xff0c;相同的功能用哪一个都可以实现&#xff0c;也都很好用&#xff0c;所以也很少去真正的理解它们之间到底有啥区别&#xff0c; 分别在什么场景下使用&#xff0c;将…

Android 设置字体的三种方法(TypeFace)

http://blog.csdn.net/legend12300/article/details/69875816 Android系统默认字体支持四种字体&#xff0c;分别为&#xff1a; noraml &#xff08;普通字体,系统默认使用的字体&#xff09;sans&#xff08;非衬线字体&#xff09;serif &#xff08;衬线字体&#xff09;…

Android 之 Paint API —— Typeface (字型)

本节带来Paint API系列的最后一个API&#xff0c;Typeface(字型)&#xff0c;由字义&#xff0c;我们大概可以猜到&#xff0c;这个 API是用来设置字体以及字体风格的&#xff0c;使用起来也非常的简单&#xff01;下面我们来学习下Typeface的一些相关 的用法&#xff01; 官方…

Pycham_python 安装 gherkin

1.File>Settings>Plusings> 在MarketPlace标签下&#xff0c;搜索gherkin&#xff0c;选择如下图所示&#xff0c;点击Install&#xff0c;安装成功后重启pycharm即可 2&#xff0c;打开feature文件&#xff0c;就会有格式显示了 转载于:https://www.cnblogs.com/aide…