Android 常用命令和工具解析之存储相关

1 基本概念

2 命令解读

2.1 adb shell df

df 命令主要用于需要检查文件系统上已使用和可用的磁盘空间的数量。如果没有指定文件名,则显示在当前所有挂载的文件系统上可用的空间。其原理是从proc/mounts 或 /etc/mtab 中检索磁盘信息。

注意:df命令并不是来打印当前磁盘各个文件的大小,而是打印当前挂载的文件系统和块设备之间的关系。

df命令平时使用的多的参数是df -h和df -a。

df -a能够打印当前所有文件系统,包括伪的(具有0块的伪文件系统(没有直接绑定到物理设备))、重复的、不可访问的文件系统。

df -h是以人类可读的方式打印,它还会自动过滤到那些没有占空间的文件系统,例如:

C:\Users\pengcheng.ding>adb shell df -h
Filesystem            Size Used Avail Use% Mounted on
/dev/block/dm-5       692M 690M  2.0M 100% /
tmpfs                 911M 3.1M  908M   1% /dev
tmpfs                 911M    0  911M   0% /mnt
/dev/block/dm-6       337M 336M  1.0M 100% /system_ext
/dev/block/dm-7       215M 214M  684K 100% /vendor
/dev/block/dm-8       122M 121M  392K 100% /product
tmpfs                 911M  16K  911M   1% /apex
tmpfs                 911M 764K  910M   1% /linkerconfig
/dev/block/mmcblk0p7   16M 116K   16M   1% /metadata
/dev/block/mmcblk0p9  2.9M  84K  2.9M   3% /mnt/vendor/protect_f
/dev/block/mmcblk0p10 5.4M  76K  5.4M   2% /mnt/vendor/protect_s
/dev/block/mmcblk0p6   52M 1.6M   50M   4% /mnt/vendor/nvdata
/dev/block/mmcblk0p5   24M  32K   24M   1% /mnt/vendor/nvcfg
/dev/block/mmcblk0p12  38M  52K   38M   1% /mnt/vendor/persist
/dev/block/dm-43       24G  23G  1.0G  96% /data
/dev/block/loop8       22M  22M   28K 100% /apex/com.android.extservices@340090000
/dev/block/loop5      232K 104K  128K  45% /apex/com.android.scheduling@340090000
tmpfs                 911M    0  911M   0% /data_mirror
/dev/block/loop7      7.6M 7.6M   28K 100% /apex/com.android.wifi@340090000
/dev/block/loop10      24M  24M   32K 100% /apex/com.android.art@340090000
/dev/block/loop9      3.1M 3.0M   32K  99% /apex/com.android.neuralnetworks@340090000
/dev/block/loop6      232K 196K   36K  85% /apex/com.android.configinfrastructure@340090000
/dev/block/loop13     4.2M 4.2M   32K 100% /apex/com.android.media@340090000
/dev/block/loop12      12M  12M   28K 100% /apex/com.android.vndk.v34@1
/dev/block/loop11     764K 736K   28K  97% /apex/com.android.tzdata@340090000
/dev/block/loop14      14M  14M   32K 100% /apex/com.android.permission@340090000
/dev/block/loop17     2.0M 2.0M   32K  99% /apex/com.android.os.statsd@340090000
/dev/block/loop18      20M  20M   28K 100% /apex/com.android.media.swcodec@340090000
/dev/block/loop16     2.8M 2.8M   28K 100% /apex/com.android.resolv@340090000
/dev/block/loop15      21M  21M   32K 100% /apex/com.android.btservices@340090000
/dev/block/loop19      18M  18M   40K 100% /apex/com.android.adservices@340090000
/dev/block/loop20     488K 460K   28K  95% /apex/com.android.sdkext@340090000
/dev/block/loop22      33M  33M   28K 100% /apex/com.android.i18n@1
/dev/block/loop24     4.1M 4.0M   32K 100% /apex/com.android.adbd@340090000
/dev/block/loop23      14M  14M   28K 100% /apex/com.android.tethering@340090000
/dev/block/loop21      19M  19M   28K 100% /apex/com.android.vndk.v33@1
/dev/block/loop27     8.0M 8.0M   32K 100% /apex/com.android.mediaprovider@340090000
/dev/block/loop31     3.1M 3.1M   32K 100% /apex/com.android.conscrypt@340090000
/dev/block/loop26     3.3M 3.3M   32K 100% /apex/com.android.runtime@1
/dev/block/loop25      12M  12M   28K 100% /apex/com.android.cellbroadcast@340090000
/dev/block/loop29     5.2M 5.2M   32K 100% /apex/com.android.devicelock@1
/dev/block/loop30     2.7M 2.6M   28K  99% /apex/com.android.appsearch@340090000
/dev/block/loop28     2.8M 2.8M   28K 100% /apex/com.android.uwb@340090000
/dev/block/loop32     712K 684K   28K  97% /apex/com.android.ipsec@340090000
/dev/block/loop36     8.4M 8.4M   28K 100% /apex/com.android.healthfitness@340090000
/dev/block/loop34     2.1M 2.1M   32K  99% /apex/com.android.ondevicepersonalization@340090000
/dev/block/loop35      17M  17M   28K 100% /apex/com.android.vndk.v31@1
/dev/block/loop33     252K 220K   32K  88% /apex/com.android.virt@2
/dev/block/loop38     1.0M 0.9M   28K  98% /apex/com.android.rkpd@1
/dev/block/loop37      45M  45M   32K 100% /apex/com.android.vndk.v30@1
/dev/fuse              24G  23G  1.0G  96% /mnt/installer/0/emulated

字段Filesystem

filesystem字段为当前的文件系统类型,通常有如下几个类型:

  • /dev/block/dm-*:通常表示设备映射(Device Mapper)的块设备。设备映射是 Linux 内核中的一个功能,用于实现高级磁盘映射和管理功能,例如卷管理、快照等。这些文件系统通常代表实际的磁盘分区或逻辑卷。
  • /dev/block/mmcblk0p*:通常表示 MMC 块设备(如 SD 卡、eMMC 等)的分区。这些文件系统代表了存储在移动存储设备上的文件系统。
  • /dev/block/loop*:代表回环设备(loop device),用于在文件系统中创建虚拟块设备,可以将文件系统映射为块设备进行访问。
  • tmpfs:基于内存的临时文件系统,数据存储在内存中而不是硬盘上。通常用于存储临时数据和文件系统操作。
  • /dev/fuse:它是一个特殊的设备文件,用于实现用户空间文件系统(Filesystem in Userspace,FUSE)的功能。FUSE 是一个允许非特权用户创建文件系统的框架,它允许用户空间的程序通过 FUSE 接口来实现文件系统操作,而无需修改内核。这种机制使得开发者可以在用户空间实现各种自定义的文件系统,而无需深入了解内核编程。有些地方将 FUSE 文件系统称为虚拟文件系统,是因为这种文件系统并不是基于硬件设备或真实存储介质的,而是在用户空间中通过程序动态创建的。从内核的角度看,FUSE 文件系统并不是一个传统意义上的文件系统,它是在用户空间中模拟文件系统接口的一种机制

字段Mounted on

Mounted on字段显示了文件系统挂载的目标路径。

/dev/block/dm-7块设备总大小215M,已经使用214M,挂载在/vendor目录

/dev/block/dm-7       215M 214M  684K 100% /vendor 

/apex目录是一个基于内存的临时数据,占用了16K的大小

tmpfs                 911M  16K  911M   1% /apex

下面这种看起来是mainline里面的应用,被作为回环设备进行挂载

/dev/block/loop12      12M  12M   28K 100% /apex/com.android.vndk.v34@1

/dev/block/dm-43块设备总大小24G,已经使用23G,挂载在/data目录

/dev/block/dm-43       24G  23G  1.0G  96% /data   

/dev/fuse作为虚拟文件系统被挂载在/mnt.installer/0/emulated

/dev/fuse              24G  23G  1.0G  96% /mnt/installer/0/emulated 

为什么/dev/fuse和/data使用情况基本保持一致?

2.2 adb shell du

du命令主要用于需要了解系统上的目录或文件所使用的磁盘空间量。当试图识别占用大部分磁盘空间的大文件或目录时,它特别方便。

du命令可以直接遍历当前目录各个子文件或者子文件夹大小,用起来很方便。

其中du --max-depth=1 指定深度为1

2.3 dumpsys devicestoragemonitor

参考Android 系统服务之DeviceStorageMonitorService-CSDN博客

3 Android相关机制

3.1 DeviceStorageMonitorService

DeviceStorageMonitorService是framework中实时检查当前设备是否存在底存储空间状态的服务,他继承于systemserver。 参考Android 系统服务之DeviceStorageMonitorService-CSDN博客

我们可以通过dumpsys devicestoragemonitor来获取他的一些信息。

C:\Users\pengcheng.ding>adb shell dumpsys devicestoragemonitor
Known volumes:Default:level=LOW lastUsableBytes=476016640lowBytes=524288000 fullBytes=1048576path=/datamSeq=1 mForceState=UNKNOWN

这里我们接着来讨论一下df命令里面为什么/dev/fuse和/data使用情况基本保持一致?因此我做了如下几个实验:

步骤一:填充/sdcard/Movies,/dev/block/dm-43和/dev/fuse的可用空间为557M

步骤二:确认当前是否处于低存储状态,确认当前还未达到LOW状态

步骤三:adb push 150M文件到/sdcard/Movies目录,确认状态

填充到/sdcard/Movies目录会占用/data目录空间,即/data剩余可用减少了151M从而导致设备进入LOW状态。

此时紧接着继续推送一个55M的文件,能够继续推送成功,即lowBytes并不会阻碍文件存储,但是install应用的地方会去检验这个值。

步骤四:adb push 150M文件到/data目录,确认状态

总结:通过步骤3和步骤4可以看出来/data和/sdcard/目录基本完全一致,他们的设备存储介质是一致的?

3.2 /sdcard目录到是怎么回事?

进入根目录,执行ls -la命令:

D50:/ # ls -la
drwxrwx--x  62 system system     4096 2025-02-24 22:08 data
lrw-r--r--   1 root   root         21 2009-01-01 08:00 sdcard -> /storage/self/primary

进入/storage/self/primary的父目录,执行ls -la命令:

D50:/storage/self # ls -la
lrwxrwxrwx 1 root  root       19 2025-02-24 20:00 primary -> /storage/emulated/0

因此我们可以发现/mnt/installer/0/emulated和/storage/emulated基本一致,那么为什么他们是一致的呢?中途也没有发现任何软链接引用的地方?

那么这两个目录和/data目录有什么关联呢?也没有发现任何软链接引用的地方?

因此/mnt/installer/0/emulated和/storage/emulated和/data/media居然指向同样的地方?

  • reboot设备在开机logo阶段,执行df -h此时还没有/dev/fuse节点的文件系统,因此此时系统上层还未创建虚拟文件系统,因此针对linux内核来说它就是一个虚拟的。

  • 完全开机之后,执行df -h出现了/dev/fuse,但是挂载的路径却变成了/storage/emulated,如下截图,因此这个挂载点可能还是随机的,但都是同一个物理块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ZFile打造属于自己的私有云系统结合内网穿透实现安全远程访问

文章目录 前言1.关于ZFile2.本地部署ZFile3.ZFile本地访问测试4.ZFile的配置5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定ZFile公网地址 前言 在数字化的今天,我们每个人都是信息的小能手。无论是职场高手、摄影达人还是学习狂人,每天都在创造…

HarmonyOS 5.0应用开发——鸿蒙接入高德地图实现POI搜索

【高心星出品】 文章目录 鸿蒙接入高德地图实现POI搜索运行结果:准备地图编写ArkUI布局来加载HTML地图 鸿蒙接入高德地图实现POI搜索 在当今数字化时代,地图应用已成为移动设备中不可或缺的一部分。随着鸿蒙系统的日益普及,如何在鸿蒙应用中…

idea + Docker + 阿里镜像服务打包部署

一、下载docker desktop软件 官网下载docker desktop,需要结合wsl使用 启动成功的画面(如果不是这个画面例如一直处理start或者是stop需要重新启动,不行就重启电脑) 打包成功的镜像在这里,如果频繁打包会导致磁盘空间被占满,需…

IP---网络类型

这只是IP的其中一块内容-网络类型,IP还有更多内容可以查看IP专栏,前一章内容为访问服务器流程,可通过以下路径查看IP----访问服务器流程-CSDN博客,欢迎指正 2.网络类型 网络类型---根据二层(数据链路层)所…

【监督学习】ARIMA预测模型步骤及matlab实现

ARIMA预测模型 ARIMA预测模型1.算法步骤2.参数选择(1)拖尾截尾判断法(2) AIC 准则(3) BIC 准则 3.MATLAB 实现参考资料 ARIMA预测模型 #mermaid-svg-mDhjwpnuA0YcEGnE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…

使用git管理uniapp项目

1.本地管理 1. 在项目根目录中新建 .gitignore 忽略文件,并配置如下: # 忽略 node_modules 目录 /node_modules /unpackage/dist 2. 打开终端,切换到项目根目录中,运行如下的命令,初始化本地 Git 仓库&#xff1…

Unity中动态切换光照贴图的方法

关键代码:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…

C# 运算符

C# 运算符 在C#编程语言中,运算符是用于执行数学或逻辑运算的符号。它们是构建程序逻辑和表达式的基石。C#支持多种类型的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、自增自减运算符以及一些特殊运算符。 算术运算符 算术运算符用于执行基本的…

1.2 Kaggle大白话:Eedi竞赛Transformer框架解决方案02-GPT_4o生成训练集缺失数据

目录 0. 本栏目竞赛汇总表1. 本文主旨2. AI工程架构3. 数据预处理模块3.1 配置数据路径和处理参数3.2 配置API参数3.3 配置输出路径 4. AI并行处理模块4.1 定义LLM客户端类4.2 定义数据处理函数4.3 定义JSON保存函数4.4 定义数据分片函数4.5 定义分片处理函数4.5 定义文件名排序…

pycharm远程连接服务器运行pytorch

Linux部署pytorch 背景介绍 不同的开源代码可能需要不同的实验环境和版本,这时候的确体现出Anaconda管理环境的好处了,分别搞一个独立环境方便管理。 有的教程建议选择较旧的版本,但笔者建议在条件允许的情况下安装最新版,本次…

Python开发 Flask框架面试题及参考答案

目录 Flask 的核心设计理念是什么?与 Django 相比有哪些显著差异? 解释 Flask 框架的核心理念及其作为 “微框架” 的优缺点 Flask 的依赖库有哪些?简述 Werkzeug 和 Jinja2 的作用 什么是 WSGI?Flask 如何基于 WSGI 实现服务端与应用的交互 解释 RESTful API 的设计原…

从“Switch-case“到“智能模式“:C#模式匹配的终极进化指南

当代码开始"思考" 你是否厌倦了层层嵌套的if-else地狱?是否想过让代码像侦探推理一样优雅地解构数据?C#的模式匹配正是这样一把瑞士军刀,从C# 7.0到C# 12,它已悄然进化成改变编程范式的利器。 一、模式匹配的三重境界…

组件注册方式、传递数据

组件注册 一个vue组件要先被注册,这样vue才能在渲染模版时找到其对应的实现。有两种注册方式:全局注册和局部注册。(组件的引入方式) 以下这种属于局部引用。 组件传递数据 注意:props传递数据,只能从父…

ROS的action通信——实现阶乘运算(三)

在ROS中除了常见的话题(topic)通信、服务(server)通信等方式,还有action通信这一方式,由于可以实时反馈任务完成情况,该通信方式被广泛运用于机器人导航等任务中。本文将通过三个小节的分享,实现基于action通信的阶乘运…

四款 AI 协作办公工具,AI工具库革新办公效率

在数字化办公时代,AI 技术正深刻改变着我们的工作方式。AIDH.NETAI工具库汇聚了众多先进的工具,今天我们来了解 AI协作办公工具,探索它们如何助力企业和团队在办公场景中脱颖而出。 Taskade:智能工作流的领航者 Taskade 是一款将…

vue2 h5 画高德地图电子围栏

使用前请先申请高德地图key JavaScript API | 腾讯位置服务 npm install lodash-es效果图 子组件代码 <template><div class"fence-container"><div v-if"loading" class"map-loading"><div class"loader">…

unity学习54:图片+精灵+遮罩mask,旧版文本 text 和新的TMP文本

目录 1 图片 image 1.1 如果直接导入image 1.2 图片 image 和精灵 sprite 1.2.1 继续修改上面的格式 texture type 是default 1.2.2 再次关联到UI的 image 物体上就可以了 1.3 图片和遮罩 mask 1.3.1 创建1个父物体和1个子物体&#xff0c;分别都是image 1.3.2 如果父…

Spring Data JPA vs MyBatis:ORM框架如何选择?

在选择ORM框架时&#xff0c;Spring Data JPA和MyBatis是两个常见的选择&#xff0c;它们各有优缺点&#xff0c;适用于不同的场景。以下是两者的对比&#xff0c;帮助你做出选择&#xff1a; 1. Spring Data JPA 优点&#xff1a; 开发效率高&#xff1a;通过简单的接口定义和…

Selenium 与 Coze 集成

涵盖两者的基本概念、集成步骤、代码示例以及相关注意事项。 基本概念 Selenium:是一个用于自动化浏览器操作的工具集,支持多种浏览器(如 Chrome、Firefox 等),能够模拟用户在浏览器中的各种操作,如点击、输入文本、选择下拉框等,常用于 Web 应用的自动化测试。Coze:它…

在线骑行|基于SpringBoot的在线骑行网站设计与实现(源码+数据库+文档)

在线骑行网站系统 目录 基于SpringBoot的在线骑行设计与实现 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 路线攻略管理 5.3路线类型管理 5.4新闻赛事管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取…