android文件系统空间预留-往内置存储填充,导致手机重启,且一直停在开机界面

首先,使用

 # stat -f /data
stat -f /data
  File: "/data"
    ID: c8ba634573858d55 Namelen: 255    Type: ef53
Block Size: 4096    Fundamental block size: 4096
Blocks: Total: 13626988 Free: 10493326  Available: 10438030

Inodes: Total: 3465216  Free: 3441059

看一下手机data分区空间,发现 free与available大小不一致,说明手机有预留空间,


然后在*.rc文件中搜索/system/bin/tune2fs,发现

exec /system/bin/tune2fs -O has_journal -u 10010 -r 51200 /dev/block/platform/bootdevice/by-name/userdata

这句话,是说明为data分区    且uid < 10010的进程保留 51200个块大小的存储空间,也就是192M


但为什么,明明已经做了限制,为什么还能够往内部存储里面写东西呢,


这里就要搞清楚一个问题,这里做的限制是针对uid < 10010的,如果是应用自己填充,也就是填充到/data/data/XXX下,自然会有限制,但是现在的问题是写入到内部存储,也就是写入地址为/sdcard这个空间中,


实际上写入这个空间的真正uid为1023,也就是AID_MEDIA_RW

所以上面的这个预留空间,并不能够让内部存储受到限制,


那怎么怎么改呢,


这就要到/system/core/sdcard/sdcard.c 这个文件下面,

因为我们现在用到的文件系统为sdcardfs,所以直接改的是sdcardfs_setup:

原来:

    snprintf(opts, sizeof(opts),
            "fsuid=%d,fsgid=%d,%smask=%d,userid=%d,gid=%d",

            fsuid, fsgid, multi_user?"multiuser,":"", mask, userid, gid);

改为:

    snprintf(opts, sizeof(opts),
            "fsuid=%d,fsgid=%d,%smask=%d,userid=%d,gid=%d,reserved_mb=192",
            fsuid, fsgid, multi_user?"multiuser,":"", mask, userid, gid);


为什么是192呢,因为之前预留的也是192M,所以在这里内部存储也给预留192M




你可能感兴趣的:(android文件系统空间预留-往内置存储填充,导致手机重启,且一直停在开机界面)