安卓应用查询硬盘可用空间与df查询不一致的研究结果

现象描述

基于安卓平台的机顶盒,在搭载一块大小为2.8T的硬盘时,df命令查看可用空间为164G,但采用安卓API查看可用空间仅为24G。

测试步骤

1.写一个测试程序,不断地向硬盘里写入东西,检测安卓应用读到的24G可用空间是否真实可靠。
2.在测试程序读到可用空间为10M时,再尝试写入一个100M的文件,安卓抛出写入异常。此时,df命令查看的可用空间为140G,而测试程序读到的可用空间为0。在测试程序读到的可用空间为0时,仅允许创建一个空文件,不允许写入内容。
3.以上测试步骤在FAT32和NTFS格式上的硬盘上未发现问题。

测试结论

查阅资料发现ext2、ext3、ext4格式的硬盘存在一个root用户保留区域,用于root用户维护系统或者记录系统关键日志的时候使用,大小默认为硬盘总大小的5%。而安卓软件查询可用空间调用函数是返回普通用户的可用空间,这就导致了软件查询可用空间与df结果不符的问题。
由于安卓软件的权限最高只能拉到SYSTEM,所以无法访问root保留空间。

解决办法

利用命令减少root保留区间,参考命令在最后。利用这个命令,将root保留区块减为0,测试软件读到的可用空间与df所查询到的一致。
综上,这个问题解决。

之前的保留区有 732463 块
lily@LLY:~ sudotune2fsl/dev/sda7|grepReservedblockcountReservedblockcount:732463+3Glily@LLY:  df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda7 57677500 47662588 7085060 88% /home
调整:
lily@LLY:~ sudotune2fsr25600/dev/sda7tune2fs1.41.9(22Aug2009)Settingreservedblockscountto25600lily@LLY:  df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda7 57677500 47662584 9912516 83% /home
确认调整成功
lily@LLY:~$ sudo tune2fs -l /dev/sda7 | grep “Reserved block count”
Reserved block count: 25600

参考链接

减少root保留区块命令参考链接:http://luy.li/2010/01/08/reserved_block/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值