如何计算可用的设备存储空间?
How to calculate available device storage?
我正在使用 OSMDroid 并试图计算出我在设备上有多少 space 用于离线磁贴存储。
该设备是 Samsung SM-T530NU。它显示以下信息:
Storage
Total space
Total device capacity
16.000GB
Owner
System memory
The minimum amount of storage space required to run the system.
4.05GB
Used space
The amount of storage space currently being used.
7.86GB
Cached data
0.93GB
Miscellaneous files
The amount of memory used to store miscellaneous files.
1.81GB
Other users
John Doe
121MB
Available space
The amount of storage space currently available
1.35GB
所以如果我计算未使用的总量:
16GB - (7.86GB + 0.93GB + 1.81GB + .121GB) =
16GB - 10.721 =
5.279GB
然而可用 space 被列为 1.35GB。
其他 3.929GB 在哪里?
你可以试试这个代码可能对你有帮助!!
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount();
long megAvailable = bytesAvailable / 1048576;
System.out.println("Megs :"+megAvailable);
存储设备制造商使用十进制系统(以 10 为底)测量容量,因此 1 GB 正好等于 1,000,000,000 字节。
存储容量是以B(字节)为前缀来表示具体数量的,即K(千字节)、M(兆字节)、G(千兆字节)、T(太字节)等。由于所有计算机都是基于二进制系统,这些前缀表示基数 2 的数量。每个级别都是 2 的 10 次方或 1,024 的增量。
常用前缀如下:
- 千字节 (KB) = 1,024 字节
- 兆字节 (MB) = 1,024 千字节或 1,048,576 字节
- 千兆字节 (GB) = 1,024 兆字节或 1,073,741,824 字节
- 太字节 (TB) = 1,024 千兆字节或 1,099,511,627,776 字节
您设备中的存储容量是使用此十进制系统测量的。
基于此,对于驱动器制造商声称的每千兆字节,他们多报了 73,741,824 字节的磁盘量 space
或大约 70.3 MB 的磁盘 space.
因此,如果制造商宣传 80 GB(800 亿字节)硬盘驱动器,则实际磁盘 space 约为 space 的 74.5 GB,比他们宣传的大约少 7%。
Total space
Total device capacity
16.000GB -> 16,000,000,000/1024/1024 = approximately 15,259MB
Owner
System memory
The minimum amount of storage space required to run the system.
4.05GB -> 4,050,000,000/1024/1024 = approximately 3,862MB
Used space
The amount of storage space currently being used.
7.86GB -> 7,860,000,000/1024/1024 = approximately 7,496MB
Cached data
0.93GB -> 930,000,000/1024/1024 = approximately 887MB
Miscellaneous files
The amount of memory used to store miscellaneous files.
1.81GB -> 1,810,000,000/1024/1024 = approximately 1,726MB
Other users
John Doe
121MB -> 121,000,000/1024/1024 = approximately 115,4MB
Available space
The amount of storage space currently available
1.35GB -> 1,350,000,000/1024/1024 = approximately 1,287MB
所以如果我计算未使用的总量:
15,259MB - (3,862MB + 7,496MB + 887MB + 1,726MB + 115,4MB) = 大约 1,173MB
现在剩余的值可能听起来差别不大,但仍然存在近似误差。
我的建议是看一下分区
$ adb shell cat /proc/partitions
major minor #blocks name
253 0 486272 zram0
179 0 15388672 mmcblk0
179 1 65536 mmcblk0p1
179 2 512 mmcblk0p2
179 3 1024 mmcblk0p3
179 4 512 mmcblk0p4
179 5 2048 mmcblk0p5
179 6 512 mmcblk0p6
179 7 1024 mmcblk0p7
179 8 512 mmcblk0p8
179 9 2048 mmcblk0p9
179 10 4096 mmcblk0p10
179 11 4096 mmcblk0p11
179 12 512 mmcblk0p12
179 13 512 mmcblk0p13
179 14 4096 mmcblk0p14
179 15 512 mmcblk0p15
179 16 512 mmcblk0p16
179 17 512 mmcblk0p17
179 18 512 mmcblk0p18
179 19 512 mmcblk0p19
179 20 512 mmcblk0p20
179 21 1024 mmcblk0p21
179 22 512 mmcblk0p22
179 23 6656 mmcblk0p23
179 24 6144 mmcblk0p24
179 25 512 mmcblk0p25
179 26 512 mmcblk0p26
179 27 1536 mmcblk0p27
179 28 1536 mmcblk0p28
179 29 6144 mmcblk0p29
179 30 6144 mmcblk0p30
179 31 10240 mmcblk0p31
259 0 8192 mmcblk0p32
259 1 24576 mmcblk0p33
259 2 24576 mmcblk0p34
259 3 16384 mmcblk0p35
259 4 16384 mmcblk0p36
259 5 16384 mmcblk0p37
259 6 57344 mmcblk0p38
259 7 32768 mmcblk0p39
259 8 3801088 mmcblk0p40
259 9 512000 mmcblk0p41
259 10 921600 mmcblk0p42
259 11 9814016 mmcblk0p43
259 12 4079 mmcblk0p44
179 32 4096 mmcblk0rpmb
eMMC(mmcblk0) 大小为 15388672(1K 块)或大约 15,028MB 或 14.67GB
$ adb shell "ls -la /dev/block/bootdevice/by-name/"
total 0
drwxr-xr-x 2 root root 920 2015-12-31 22:31 .
drwxr-xr-x 4 root root 1000 2015-12-31 22:31 ..
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 DDR -> /dev/block/mmcblk0p13
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 OP -> /dev/block/mmcblk0p42
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 aboot -> /dev/block/mmcblk0p5
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 abootbak -> /dev/block/mmcblk0p9
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 boot -> /dev/block/mmcblk0p35
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 cache -> /dev/block/mmcblk0p41
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 config -> /dev/block/mmcblk0p22
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 devinfo -> /dev/block/mmcblk0p21
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 drm -> /dev/block/mmcblk0p29
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 eksst -> /dev/block/mmcblk0p19
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 encrypt -> /dev/block/mmcblk0p18
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 factory -> /dev/block/mmcblk0p38
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 fota -> /dev/block/mmcblk0p24
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 fsc -> /dev/block/mmcblk0p15
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 fsg -> /dev/block/mmcblk0p14
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 grow -> /dev/block/mmcblk0p44
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 keystore -> /dev/block/mmcblk0p17
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 laf -> /dev/block/mmcblk0p33
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 lafbak -> /dev/block/mmcblk0p34
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 misc -> /dev/block/mmcblk0p31
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 modem -> /dev/block/mmcblk0p1
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 modemst1 -> /dev/block/mmcblk0p10
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 modemst2 -> /dev/block/mmcblk0p11
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 mpt -> /dev/block/mmcblk0p39
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 persist -> /dev/block/mmcblk0p32
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 raw_resources -> /dev/block/mmcblk0p27
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 raw_resourcesbak -> /dev/block/mmcblk0p28
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 rct -> /dev/block/mmcblk0p25
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 recovery -> /dev/block/mmcblk0p36
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 recoverybak -> /dev/block/mmcblk0p37
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 rpm -> /dev/block/mmcblk0p4
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 rpmbak -> /dev/block/mmcblk0p8
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 sbl1 -> /dev/block/mmcblk0p2
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 sbl1bak -> /dev/block/mmcblk0p6
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 sec -> /dev/block/mmcblk0p16
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 sns -> /dev/block/mmcblk0p30
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 spare1 -> /dev/block/mmcblk0p23
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 spare2 -> /dev/block/mmcblk0p26
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 spare3 -> /dev/block/mmcblk0p20
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 ssd -> /dev/block/mmcblk0p12
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 system -> /dev/block/mmcblk0p40
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 tz -> /dev/block/mmcblk0p3
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 tzbak -> /dev/block/mmcblk0p7
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 userdata -> /dev/block/mmcblk0p43
但请记住,14.67Gb 是磁盘大小而不是文件系统容量
命令 df 代表 "disk filesystem"。使用 -h 选项 (df -h) 它以 "human readable" 形式
显示磁盘 space
$ adb shell df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 950M 1.1M 949M 1% /dev
tmpfs 950M 0 950M 0% /mnt
/dev/block/bootdevice/by-name/system 3.5G 3.3G 141M 97% /system
/dev/block/bootdevice/by-name/cache 484M 576K 474M 1% /cache
/dev/block/bootdevice/by-name/userdata 9.1G 570M 8.5G 7% /data
/dev/block/bootdevice/by-name/persist 3.8M 152K 3.5M 5% /persist
/dev/block/bootdevice/by-name/modem 64M 55M 9.4M 86% /firmware
/dev/block/bootdevice/by-name/sns 1.8M 44K 1.7M 3% /sns
/dev/block/bootdevice/by-name/drm 1.8M 356K 1.4M 20% /persist-lg
/dev/block/bootdevice/by-name/mpt 27M 4.2M 23M 17% /mpt
/dev/block/bootdevice/by-name/OP 872M 488M 368M 58% /OP
tmpfs 950M 0 950M 0% /storage
/dev/fuse 9.1G 570M 8.5G 7% /storage/emulated
设备有 8.5G 用户数据可用 space 如上例所示
请注意,用户数据分区大小为 9814016(mmcblk0p43),文件系统大小为 9610592(9.1G)
参考文献:
我正在使用 OSMDroid 并试图计算出我在设备上有多少 space 用于离线磁贴存储。 该设备是 Samsung SM-T530NU。它显示以下信息:
Storage
Total space
Total device capacity
16.000GB
Owner
System memory
The minimum amount of storage space required to run the system.
4.05GB
Used space
The amount of storage space currently being used.
7.86GB
Cached data
0.93GB
Miscellaneous files
The amount of memory used to store miscellaneous files.
1.81GB
Other users
John Doe
121MB
Available space
The amount of storage space currently available
1.35GB
所以如果我计算未使用的总量:
16GB - (7.86GB + 0.93GB + 1.81GB + .121GB) = 16GB - 10.721 = 5.279GB
然而可用 space 被列为 1.35GB。 其他 3.929GB 在哪里?
你可以试试这个代码可能对你有帮助!!
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount();
long megAvailable = bytesAvailable / 1048576;
System.out.println("Megs :"+megAvailable);
存储设备制造商使用十进制系统(以 10 为底)测量容量,因此 1 GB 正好等于 1,000,000,000 字节。
存储容量是以B(字节)为前缀来表示具体数量的,即K(千字节)、M(兆字节)、G(千兆字节)、T(太字节)等。由于所有计算机都是基于二进制系统,这些前缀表示基数 2 的数量。每个级别都是 2 的 10 次方或 1,024 的增量。
常用前缀如下:
- 千字节 (KB) = 1,024 字节
- 兆字节 (MB) = 1,024 千字节或 1,048,576 字节
- 千兆字节 (GB) = 1,024 兆字节或 1,073,741,824 字节
- 太字节 (TB) = 1,024 千兆字节或 1,099,511,627,776 字节
您设备中的存储容量是使用此十进制系统测量的。 基于此,对于驱动器制造商声称的每千兆字节,他们多报了 73,741,824 字节的磁盘量 space 或大约 70.3 MB 的磁盘 space.
因此,如果制造商宣传 80 GB(800 亿字节)硬盘驱动器,则实际磁盘 space 约为 space 的 74.5 GB,比他们宣传的大约少 7%。
Total space
Total device capacity
16.000GB -> 16,000,000,000/1024/1024 = approximately 15,259MB
Owner
System memory
The minimum amount of storage space required to run the system.
4.05GB -> 4,050,000,000/1024/1024 = approximately 3,862MB
Used space
The amount of storage space currently being used.
7.86GB -> 7,860,000,000/1024/1024 = approximately 7,496MB
Cached data
0.93GB -> 930,000,000/1024/1024 = approximately 887MB
Miscellaneous files
The amount of memory used to store miscellaneous files.
1.81GB -> 1,810,000,000/1024/1024 = approximately 1,726MB
Other users
John Doe
121MB -> 121,000,000/1024/1024 = approximately 115,4MB
Available space
The amount of storage space currently available
1.35GB -> 1,350,000,000/1024/1024 = approximately 1,287MB
所以如果我计算未使用的总量: 15,259MB - (3,862MB + 7,496MB + 887MB + 1,726MB + 115,4MB) = 大约 1,173MB
现在剩余的值可能听起来差别不大,但仍然存在近似误差。
我的建议是看一下分区
$ adb shell cat /proc/partitions
major minor #blocks name
253 0 486272 zram0
179 0 15388672 mmcblk0
179 1 65536 mmcblk0p1
179 2 512 mmcblk0p2
179 3 1024 mmcblk0p3
179 4 512 mmcblk0p4
179 5 2048 mmcblk0p5
179 6 512 mmcblk0p6
179 7 1024 mmcblk0p7
179 8 512 mmcblk0p8
179 9 2048 mmcblk0p9
179 10 4096 mmcblk0p10
179 11 4096 mmcblk0p11
179 12 512 mmcblk0p12
179 13 512 mmcblk0p13
179 14 4096 mmcblk0p14
179 15 512 mmcblk0p15
179 16 512 mmcblk0p16
179 17 512 mmcblk0p17
179 18 512 mmcblk0p18
179 19 512 mmcblk0p19
179 20 512 mmcblk0p20
179 21 1024 mmcblk0p21
179 22 512 mmcblk0p22
179 23 6656 mmcblk0p23
179 24 6144 mmcblk0p24
179 25 512 mmcblk0p25
179 26 512 mmcblk0p26
179 27 1536 mmcblk0p27
179 28 1536 mmcblk0p28
179 29 6144 mmcblk0p29
179 30 6144 mmcblk0p30
179 31 10240 mmcblk0p31
259 0 8192 mmcblk0p32
259 1 24576 mmcblk0p33
259 2 24576 mmcblk0p34
259 3 16384 mmcblk0p35
259 4 16384 mmcblk0p36
259 5 16384 mmcblk0p37
259 6 57344 mmcblk0p38
259 7 32768 mmcblk0p39
259 8 3801088 mmcblk0p40
259 9 512000 mmcblk0p41
259 10 921600 mmcblk0p42
259 11 9814016 mmcblk0p43
259 12 4079 mmcblk0p44
179 32 4096 mmcblk0rpmb
eMMC(mmcblk0) 大小为 15388672(1K 块)或大约 15,028MB 或 14.67GB
$ adb shell "ls -la /dev/block/bootdevice/by-name/"
total 0
drwxr-xr-x 2 root root 920 2015-12-31 22:31 .
drwxr-xr-x 4 root root 1000 2015-12-31 22:31 ..
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 DDR -> /dev/block/mmcblk0p13
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 OP -> /dev/block/mmcblk0p42
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 aboot -> /dev/block/mmcblk0p5
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 abootbak -> /dev/block/mmcblk0p9
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 boot -> /dev/block/mmcblk0p35
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 cache -> /dev/block/mmcblk0p41
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 config -> /dev/block/mmcblk0p22
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 devinfo -> /dev/block/mmcblk0p21
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 drm -> /dev/block/mmcblk0p29
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 eksst -> /dev/block/mmcblk0p19
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 encrypt -> /dev/block/mmcblk0p18
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 factory -> /dev/block/mmcblk0p38
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 fota -> /dev/block/mmcblk0p24
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 fsc -> /dev/block/mmcblk0p15
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 fsg -> /dev/block/mmcblk0p14
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 grow -> /dev/block/mmcblk0p44
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 keystore -> /dev/block/mmcblk0p17
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 laf -> /dev/block/mmcblk0p33
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 lafbak -> /dev/block/mmcblk0p34
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 misc -> /dev/block/mmcblk0p31
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 modem -> /dev/block/mmcblk0p1
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 modemst1 -> /dev/block/mmcblk0p10
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 modemst2 -> /dev/block/mmcblk0p11
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 mpt -> /dev/block/mmcblk0p39
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 persist -> /dev/block/mmcblk0p32
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 raw_resources -> /dev/block/mmcblk0p27
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 raw_resourcesbak -> /dev/block/mmcblk0p28
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 rct -> /dev/block/mmcblk0p25
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 recovery -> /dev/block/mmcblk0p36
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 recoverybak -> /dev/block/mmcblk0p37
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 rpm -> /dev/block/mmcblk0p4
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 rpmbak -> /dev/block/mmcblk0p8
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 sbl1 -> /dev/block/mmcblk0p2
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 sbl1bak -> /dev/block/mmcblk0p6
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 sec -> /dev/block/mmcblk0p16
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 sns -> /dev/block/mmcblk0p30
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 spare1 -> /dev/block/mmcblk0p23
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 spare2 -> /dev/block/mmcblk0p26
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 spare3 -> /dev/block/mmcblk0p20
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 ssd -> /dev/block/mmcblk0p12
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 system -> /dev/block/mmcblk0p40
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 tz -> /dev/block/mmcblk0p3
lrwxrwxrwx 1 root root 20 2015-12-31 22:31 tzbak -> /dev/block/mmcblk0p7
lrwxrwxrwx 1 root root 21 2015-12-31 22:31 userdata -> /dev/block/mmcblk0p43
但请记住,14.67Gb 是磁盘大小而不是文件系统容量
命令 df 代表 "disk filesystem"。使用 -h 选项 (df -h) 它以 "human readable" 形式
显示磁盘 space$ adb shell df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 950M 1.1M 949M 1% /dev
tmpfs 950M 0 950M 0% /mnt
/dev/block/bootdevice/by-name/system 3.5G 3.3G 141M 97% /system
/dev/block/bootdevice/by-name/cache 484M 576K 474M 1% /cache
/dev/block/bootdevice/by-name/userdata 9.1G 570M 8.5G 7% /data
/dev/block/bootdevice/by-name/persist 3.8M 152K 3.5M 5% /persist
/dev/block/bootdevice/by-name/modem 64M 55M 9.4M 86% /firmware
/dev/block/bootdevice/by-name/sns 1.8M 44K 1.7M 3% /sns
/dev/block/bootdevice/by-name/drm 1.8M 356K 1.4M 20% /persist-lg
/dev/block/bootdevice/by-name/mpt 27M 4.2M 23M 17% /mpt
/dev/block/bootdevice/by-name/OP 872M 488M 368M 58% /OP
tmpfs 950M 0 950M 0% /storage
/dev/fuse 9.1G 570M 8.5G 7% /storage/emulated
设备有 8.5G 用户数据可用 space 如上例所示 请注意,用户数据分区大小为 9814016(mmcblk0p43),文件系统大小为 9610592(9.1G)
参考文献: