如何从shell中识别Android设备的分区?
我正在尝试从adb shell中查找哪个分区用于什么,例如如何从shell中识别Android设备的分区?,android,shell,partition,Android,Shell,Partition,我正在尝试从adb shell中查找哪个分区用于什么,例如/boot、/recovery、/system。虽然这对于当前装入的分区来说是微不足道的(使用mount或df命令,请参见示例),但对于当前未装入的分区来说(如在“用户模式”下启动时的/recovery),这似乎很棘手 有一个问题,但我尝试过的任何设备都无法解决: cat/proc/mtd:此字段为空或不存在 cat/proc/emmc:此字段为空或不存在 cat/proc/dumchar\u info:不存在(MTK/MediaTek
/boot
、/recovery
、/system
。虽然这对于当前装入的分区来说是微不足道的(使用mount
或df
命令,请参见示例),但对于当前未装入的分区来说(如在“用户模式”下启动时的/recovery
),这似乎很棘手
有一个问题,但我尝试过的任何设备都无法解决:
:此字段为空或不存在cat/proc/mtd
:此字段为空或不存在cat/proc/emmc
:不存在(MTK/MediaTek)cat/proc/dumchar\u info
:不存在或没有所需的详细信息ls-al/dev/block/platform/*/by name
刚刚产生了一个parted
错误:磁盘外不能有分区代码>在
上(只是缺少/dev/block/mmcblk1
的“名称”列)/dev/block/mmcblk0
背景:一个示例用法是“我只想检索
/boot
分区”(通过dd
获取它的映像)。首先抓取所有分区,然后进行评估是不行的——太耗时,产生的数据太多;)-这已经描述了它的意图:编写一个小工具来检索一个特定的磁盘映像。您可以在Linux上获得挂载分区的信息,但是我不认为Linux内核不知道boot
和recovery
分区,如果/dev/block/platform/**/by name
没有它
因此,您可以使用当前装载的信息来猜测哪个分区是boot
或recovery
或/dev/block/*中未装载的其他分区
事实上,fastboot只发送要闪存的分区的名称。我想这意味着只有fastboot的引导加载程序知道这些信息
由于似乎没有“独特的方法”来实现这一点,我开始将来自allover的想法结合起来,将它们加入脚本(或者更确切地说是“脚本库”)中,以便按顺序进行检查(直到取得成功),并将其集成到名为的“设备文档工具”中。感兴趣的人可以在文件中找到它。由于Adebar是开源的(GPLv2),所以可以随意复制和使用它——或者分叉项目并改进它
完整的解决方案在这里发布有点长(如前所述,您可以在Github上获取),但由于SE策略是在文章中至少包含一般部分,因此它的作用如下:
不同的来源提供了不同的细节集,因此它首先尝试“最好的”,然后递归,直到至少找到了一些东西
提供了最详细的信息,因此首先尝试此方法。快乐的MTK用户会得到这个/proc/dumchar\u info
是第二个最佳来源/proc/mtd
应该与前面的候选者一样多,但使用起来有点棘手/proc/emmc
,与……交叉核对/dev/block/platform/*/by name
与/proc/partitions
交叉检查后,我们至少得到了已安装的分区/proc/mounts
/proc/dumchar\u info
,则无需解析所有其他脚本)。它们都放在不同的函数中,使用相同的结构返回数据,甚至可以合并所有函数的结果
如果有人能想出一个更好的解决方案,我当然随时愿意接受这个想法:)您要查找的确切信息(大小、位置、装载量)是在
/proc/mounts
@jan中找不到的,如前所述,每个分区“用于”什么。例如,从mount
或您所说的/proc/mounts
派生而来,/dev/block/mmcblk1p21
持有系统
分区。但是请注意,由于mount
命令本身只保存当前装入的分区。但我还需要那些当前未装载的(例如,正常启动时恢复)。规模是次要的。标识对我来说很重要。我只需按名称ls-l/dev/block/platform/omap/omap\hsmmc.0/来获取指向实际设备的分区名称列表。@jan同意–如果可能的话(请参阅我的问题:/dev/block/platform/*/by name
:在某些设备上不存在。@Andreyua您已经从外壳部分看到了,修改设备(通过安装应用程序)不是选项限制?谢谢Kazuki–但是对于20多个分区,猜测太容易出错(26在当前连接的设备上,mmcblk1p1
至mmcblk1p26
),其中仅安装了3或4个(在所述设备上安装了3个)–尤其是“通过脚本自动猜测”。即使跳过所有具有2048个或更少块的分区,在该设备上也会留下10个分区,减去3个已装入的分区,可从中猜出7个。fastboot
可以自行判断,这是另一个证明信息必须能自动获取的证据(除非它硬编码到设备上的计数器部分).fastboot是引导加载程序的一部分,它与Linux系统分离,因此我认为您无法获得