jjzjj

adb remount之后,OTA 升级失败的问题

xuyewen288 2023-08-04 原文

MTK平台,remount后ota升级失败


userdebug版本,remount升级失败

adb root
adb remount
然后push了一堆东西进去,ota升级的时候会报空间不够,我们先看mtk的debug log

 473   473 I update_engine: [1101/114216.247577:INFO:dynamic_partition_control_android.cc(197)] Loaded metadata from slot A in /dev/block/platform/bootdevice/by-name/super
 473   473 I update_engine: [1101/114216.247946:INFO:boot_control_android.cc(312)] Removing group main_b
 473   473 I update_engine: [1101/114216.248105:INFO:boot_control_android.cc(343)] Added group main_b with size 1844969472
 473   473 I /system/bin/update_engine: [liblp]Partition vendor_b will resize from 0 bytes to 327540736 bytes
 473   473 I update_engine: [1101/114216.248254:INFO:boot_control_android.cc(360)] Added partition vendor_b to group main_b with size 327540736
 473   473 I /system/bin/update_engine: [liblp]Partition product_b will resize from 0 bytes to 252170240 bytes
 473   473 I update_engine: [1101/114216.248382:INFO:boot_control_android.cc(360)] Added partition product_b to group main_b with size 252170240
 473   473 E /system/bin/update_engine: [liblp]Not enough free space to expand partition: system_b
 473   473 E update_engine: [1101/114216.248480:ERROR:boot_control_android.cc(356)] Cannot resize partition system_b to size 1154273280. Not enough space?
 473   473 E update_engine: [1101/114216.248544:ERROR:delta_performer.cc(998)] Unable to initialize partition metadata for slot B
 473   473 E update_engine: [1101/114216.248630:ERROR:download_action.cc(336)] Error ErrorCode::kInstallDeviceOpenError (7) in DeltaPerformer's Write method when processing the received payload -- Terminating processing
 473   473 I update_engine: [1101/114216.249175:INFO:multi_range_http_fetcher.cc(177)] Received transfer terminated.
 473   473 I update_engine: [1101/114216.249358:INFO:multi_range_http_fetcher.cc(129)] TransferEnded w/ code 200
 473   473 I update_engine: [1101/114216.249451:INFO:multi_range_http_fetcher.cc(131)] Terminating.
1236  1524 V FespxProcessor: onMultibfDataReceived: 8 index 0 size 4096 mPreUploadRollbackDataSize 131072
 473   473 I update_engine: [1101/114216.253259:INFO:action_processor.cc(116)] ActionProcessor: finished DownloadAction with code ErrorCode::kInstallDeviceOpenError
 473   473 I update_engine: [1101/114216.253452:INFO:action_processor.cc(121)] ActionProcessor: Aborting processing due to failure.
 473   473 I update_engine: [1101/114216.253521:INFO:update_attempter_android.cc(454)] Processing Done.
 473   473 I update_engine: [1101/114216.253568:INFO:dynamic_partition_control_android.cc(151)] Destroying [] from device mapper
3254  3272 D clifeOTA: onStatusUpdate  status: 0
 473   473 I update_engine: [1101/114216.254265:INFO:metrics_repo

原因分析:

看这句
ERROR:boot_control_android.cc(356)] Cannot resize partition system_b to size 1154273280. Not enough space?
意思是空间不够,查看储存,16G内存只占用了5G多,实际内存多,为什么内存不够, 主要是看对分区的内存,结合MTKAB分区这个链接里面的分区,partition_ab_dynamic.xml,或者partition_dynamic.xml 这两个文件可以看到对super分区和userdata分区的大小,如userdata分区6291456* 512 / 1024 /1024 /1024 =3 G,表示用户空间占3G,出错原因主要是super分区的大小导致的,一般情况下是16G以上的内存的话, AB分区各占1.5G左右,然后adb remount之后会产生一个overlay的scratch分区,这个分区实际上占用在super分区上的,具体占用多少内存还是看 product,vendor,system三个目录的大小,这样,如果super分区太小的话,在AB OTA升级的时候,就是导致动态分区不够,导致升级失败,因OTA升级时不会清除scratch分区的,我这里为什么会报错,是因为改了内存,从16G降到了8G,然后其他同事改分区的时候只减小修改了super分区大小为3G多,所以userdebug版本,remount之后,overlay占用了super分区,导致升级slot b分区的时候,动态分配分区内存就不够,所以升级失败。

<?xml version="1.0" encoding="utf-8"?>
<partition lba="31457280">

<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="6144" name="proinfo"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="30720" name="cam_vpu1_a"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="30720" name="cam_vpu2_a"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="30720" name="cam_vpu3_a"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="30720" name="cam_vpu1_b"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="30720" name="cam_vpu2_b"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="30720" name="cam_vpu3_b"/>
	
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="10240" name="nvram"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="20480" name="protect1"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="20480" name="protect2"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="98304" name="persist"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="16384" name="nvcfg"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="512" name="seccfg"/>
	
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="2048" name="lk_a"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="2048" name="lk_b"/>
	
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="65536" name="boot_a"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="65536" name="boot_b"/>
	
	<!-- <entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="65536" name="recovery"/> -->
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="1024" name="para"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="16384" name="logo"/>
	
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="16384" name="dtbo_a"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="16384" name="dtbo_b"/>
	
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="20480" name="expdb"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="2048" name="frp"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="10240" name="tee_a"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="10240" name="tee_b"/>
	
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="4096" name="kb"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="4096" name="dkb"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="65536" name="metadata"/>
	
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="11520" name="vbmeta_a"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="11520" name="vbmeta_b"/>
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="8192" name="nvdata" />
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="4096" name="vbmeta_system_a" />
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="4096" name="vbmeta_system_b" />
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="4096" name="vbmeta_vendor_a" />
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="4096" name="vbmeta_vendor_b" />
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="16769024" name="super"/>
	<!-- <entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="229376" name="cache"/>  -->
	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" size="6291456" name="userdata"/>
</partition>

我们对比前后lpdump分区的区别,adb remount之后,
看分区 Name: scratch

C:\Users\aaa>adb shell
xxxx:/ $ lpdump
Metadata version: 10.0
Metadata size: 844 bytes
Metadata max size: 65536 bytes
Metadata slot count: 3
Partition table:
------------------------
  Name: vendor_a
  Group: main_a
  Attributes: readonly
  Extents:
    0 .. 639727 linear super 2048
------------------------
  Name: vendor_b
  Group: main_b
  Attributes: readonly
  Extents:
------------------------
  Name: product_a
  Group: main_a
  Attributes: readonly
  Extents:
    0 .. 492511 linear super 643072
------------------------
  Name: product_b
  Group: main_b
  Attributes: readonly
  Extents:
------------------------
  Name: system_a
  Group: main_a
  Attributes: readonly
  Extents:
    0 .. 2254431 linear super 1136640
------------------------
  Name: system_b
  Group: main_b
  Attributes: readonly
  Extents:
------------------------
  Name: scratch
  Group: default
  Attributes: none
  Extents:
    0 .. 1295 linear super 641776
    1296 .. 2351 linear super 1135584
    2352 .. 1910119 linear super 3391072
------------------------
Block device table:
------------------------
  Partition name: super
  First sector: 2048
  Size: 3690987520 bytes
  Flags: none
------------------------
Group table:
------------------------
  Name: default
  Maximum size: 0 bytes
  Flags: none
------------------------
  Name: main_a
  Maximum size: 1844969472 bytes
  Flags: none
------------------------
  Name: main_b
  Maximum size: 1844969472 bytes
  Flags: none
------------------------

正常设备lpdump

C:\Users\xxxx>adb shell
xxxx:/ $ lpdump
Metadata version: 10.0
Metadata size: 720 bytes
Metadata max size: 65536 bytes
Metadata slot count: 3
Partition table:
------------------------
  Name: vendor_a
  Group: main_a
  Attributes: readonly
  Extents:
    0 .. 639727 linear super 2048
------------------------
  Name: vendor_b
  Group: main_b
  Attributes: readonly
  Extents:
------------------------
  Name: product_a
  Group: main_a
  Attributes: readonly
  Extents:
    0 .. 492511 linear super 643072
------------------------
  Name: product_b
  Group: main_b
  Attributes: readonly
  Extents:
------------------------
  Name: system_a
  Group: main_a
  Attributes: readonly
  Extents:
    0 .. 2254431 linear super 1136640
------------------------
  Name: system_b
  Group: main_b
  Attributes: readonly
  Extents:
------------------------
Block device table:
------------------------
  Partition name: super
  First sector: 2048
  Size: 3690987520 bytes
  Flags: none
------------------------
Group table:
------------------------
  Name: default
  Maximum size: 0 bytes
  Flags: none
------------------------
  Name: main_a
  Maximum size: 1844969472 bytes
  Flags: none
------------------------
  Name: main_b
  Maximum size: 1844969472 bytes
  Flags: none
------------------------

解决方案:

1.暂时解决方案,清楚了为什么会失败,那么只需要关掉overlay就行
adb root
adb enable-verity
adb reboot
搞定

2.上面只是短暂解决问题,根本上解决,还是要修改super分区大小
怎么算,比如userdata分区6291456* 512 / 1024 /1024 /1024 =3 G
一个8G的话,一般系统占用时1.5G左右,要想remount没有问题的话,至少需要
1.5 * 2 + overlay分区的占用, 这里的话,我写一个4G, 8388608的,在测试,ok,
注意, 所有加起来的大小不能超过 这个,不然编译不过

有关adb remount之后,OTA 升级失败的问题的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  4. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  5. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  6. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  7. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  8. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  9. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  10. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

随机推荐