为什么一些人连windows的原理和概念都不懂就生搬硬套手机平板的单可见分区方案,还认为这就是先进?
早期的安卓手机是有分区的,我曾经用过的联想a288t就是/data和内部存储是独立的分区。
因为谷歌为了让所有app都能读写内部存储空间,给内部存储空间格式化成了类似fat那种格式,那自然和/data就是不同的分区了。
这导致了一个十分严重的问题,就是/data满了之后就无法再安装app了,或者一些喜欢往/data/data写数据的app报存储空间不足;但是设置里又能看到巨量的剩余空间。
在windows/linux/freebsd这些操作系统上,这个问题不算是特别大的问题(因为windows的C盘的可用空间会随着使用时间逐渐减少,即使清理垃圾,之后的可用空间也会越来越少),但是在安卓上就不一样了,因为安卓并不能将软件安装到内部存储空间,后来谷歌被迫开放了将app安装到sd卡的权利。
后来谷歌用fuse去模拟fat的行为,才让/data/data和内部存储空间共享剩余空间,安装app的数量才不受限制,当然只有一个小问题,就是fuse是非常慢的。
然后谷歌收紧了存储权限,这时候是不是就能摆脱fuse了?😂没有,谷歌是在java层弄的限制,在java层去模拟ext的行为。
所以现在手机读写存储空间是这样的:底层ext4/f2fs,然用fuse在ext4/f2fs之上模拟ext,然后再用java在fuse在ext4/f2fs之上模拟的ext之上又模拟ext4/f2fs...
那么谷歌为什么要这么做呢?因为要谷歌要封杀sd卡。现在内部存储空间读写很快,负优化一下大不了退回到emmc水平,sd卡负优化一下就很难用了。另外谷歌在内部存储空间留了一个口子,就是 内部存储空间/Android/data,这个是ext4/f2fs的分区挂载上去的,app读写的时候是直接读写的,如果是走sd卡/Android/data的话,就会很慢。
另外一个封杀sd的负优化是在java层,虽然通过上面那层套娃模拟能极大地限制sd卡的速度,但是谷歌觉得还不够,又在java层负优化:在读取文件列表的时候故意拖慢速度,我几年前用红米note8pro的时候试过,app安装在内部存储空间,但是把下载数据放到sd卡,一些软件会在点击已下载按钮的时候卡个两三分钟,一些软件会在启动的时候卡个两三分钟,体验十分地糟糕,甚至网上有人只插sd卡,没有读写任何数据,手机都会变卡,逼迫各大手机平板厂商取消sd卡扩展槽。不过现在我用的联想y700 4代用着sd卡的体验没有以前红米那么糟糕(虽然还是挺糟糕的),我估计是谷歌看到三星放弃sd卡槽后,谷歌偷偷取消了一部分对sd卡的负优化。
最后我提一下,就是谷歌为了让你不接外部存储设备,还偷偷阉割了安全弹出。传统的安全弹出,是先卸载分区,然后通知usb存储设备。而安卓只卸载分区,并没有通知usb设备。这个可以测试一下的,就是用固态硬盘转usb的转换器,在windows/linux/freebsd上安全弹出成功后拔掉没事,在安卓上安全弹出就会导致S.M.A.R.T里的"不安全关机计数"+1。解决方法也有,就是在安卓里弹出后等待十分钟左右,等硬盘自动休眠后再拔出硬盘......
不是新出的东西就是先进的,安卓这套狗食般的设计,完全谈不上先进。