Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1292352
  • 博文数量: 478
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4833
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-28 11:12
文章分类

全部博文(478)

文章存档

2019年(1)

2018年(27)

2017年(21)

2016年(171)

2015年(258)

我的朋友

分类: Android平台

2015-10-17 09:53:31

[FAQ14937][Storage]Download开机后恢复出厂设置userdata可用空间变小
2015-09-02
FAQs 1 of 81
[Storage]关于文件系统空间预留的说明

内容

[DESCRIPTION]
    在开启MTK_SHARED_SDCARD时,userdata分区会自适应emmc剩余空间的大小,您可能会注意到download bin档后开机,透过adb shell df或Setting -> Storage查询到的内部存储空间(/data)大小会比恢复出厂设置后稍大。
    但是第二次再做恢复出厂设置,/data的空间大小就不会再发生变化,一直保持第一次恢复出厂后的大小。除非再次重新download,又会发生这样的现象。
 
 
[SOLUTION]
      编译时分区表设定的userdata分区size较小(大概1GB多),build时生成的userdata.img是以这个较小的size生成的。从build log中会找到类似以下这段:

make_ext4fs -s -T -1 -S out/target/product/sisley2OTP/root/file_contexts -l 1237319680 -a data out/target/product/sisley2OTP/userdata.img out/target/product/sisley2OTP/data

Creating filesystem with parameters:
    Size: 1237319680   //0x49c00000
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7552
    Inode size: 256
    Journal blocks: 4720
    Label: 
    Blocks: 302080
    Block groups: 10
    Reserved block group size: 79
Created filesystem with 33/75520 inodes and 10340/302080 blocks

     可以看到这个例子中生成ext4 image时总的size为0x49c00000 (1180MB)。
     而download后第一次开机后会执行ext4 resize操作,根据实际userdata分区的大小修改ext4 fs里面的相关参数,以达到文件系统自适应emmc实际大小的目的。 可以从kernel log中找到类似下面的log:

[    7.677582].(5)[180:resize_ext4]resize: Size for partition(/dev/block/platform/mtk-msdc.0/by-name/userdata) is 12064256K. //0x2E0580000,userdata分区实际的size
[    7.678956].(5)[180:resize_ext4]resize: Size in superblock is 1208320K.  //0x49C000000, userdata在分区表中的size
[    7.679793].(5)[180:resize_ext4]resize: Size will (maybe) resize to(after adjust) is 12064256K.
[    7.681178].(5)[180:resize_ext4]resize: Running /system/bin/resize2fs on /dev/block/platform/mtk-msdc.0/by-name/userdata
[    8.169390].(0)[180:resize_ext4]resize: Resize ext4 return 0

      在执行恢复出厂设置时,会擦除userdata分区,并重新利用make_ext4fs创建新的文件系统,这时候就是直接根据userdata分区的实际大小来创建ext4 fs。从factory reset recovery log中会找到类似以下这段:

Formatting /data...
format /data start=1420131485 
I:GPT is supported!
Creating filesystem with parameters:
    Size: 12353798144     //0x2E0580000
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8112
    Inode size: 256
    Journal blocks: 32768
    Label: 
    Blocks: 3016064
    Block groups: 93
    Reserved block group size: 743
Created filesystem with 11/754416 inodes and 87558/3016064 blocks
format end=1420131494 duration=9

     对比build时创建的userdata.img和factory reset时在userdata分区创建文件系统,由于userdata分区的size在这两种情况下不同,那么创建ext4时一些参数就会被自动调整,这里看到最重要的就是 Journal blocks差异较大,build时是 4720,recovery时是32768,差了110MB左右。inode per group也会有些差异,这些都是导致df出来的分区大小差异的原因。因为ext4 resize操作不会调整这些参数值,只会调整super block里面的参数,以及总的block和group数目。

     一般手机只会在工厂产线上遇到这样的问题,手机在产线上一定会最后做factory reset,end user一般只会做OTA升级,不会再遇到这样的问题。

阅读(1647) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~