Search code examples
androidstorageosmdroid

How to calculate available device storage?


I'm using OSMDroid and trying to figure how much space I have on a device for offline tile storage. The device is a Samsung SM-T530NU. It shows the following information:

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

So if I calculate the total amount not used:

16GB - (7.86GB + 0.93GB + 1.81GB + .121GB) = 16GB - 10.721 = 5.279GB

Yet the available space is listed as 1.35GB. Where is the other 3.929GB?


Solution

  • Storage device manufacturers measure capacity using the decimal system (base 10), so 1 gigabyte (GB) is calculated as exactly 1,000,000,000 bytes.

    Storage capacity is measured by a prefix to the B (byte) to represent a specific amount, ie K (Kilobyte), M (Megabyte), G (Gigabyte), T (Terabyte) etc. Since all computers are based on the binary system, these prefixes represent base 2 amounts. Each level is an increment of 2 to the 10th power or 1,024.

    The common prefixes are as follows:

    • Kilobyte (KB) = 1,024 Bytes
    • MegaByte (MB) = 1,024 Kilobytes or 1,048,576 Bytes
    • Gigabyte (GB) = 1,024 Megabytes or 1,073,741,824 Bytes
    • Terabyte (TB) = 1,024 Gigabytes or 1,099,511,627,776 Bytes

    The capacity of storage in your device is measure using this decimal system. Based on this, for each Gigabyte that a drive manufacturer claims, they are over reporting the amount of disk space by 73,741,824 Bytes or roughly 70.3 MB of disk space.

    So, if a manufacturer advertises an 80 GB (80 billion bytes) hard drive, the actual disk space is around 74.5 GB of space, roughly 7% less than what they advertise.

    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
    

    So if I calculate the total amount not used: 15,259MB - (3,862MB + 7,496MB + 887MB + 1,726MB + 115,4MB) = approximately 1,173MB

    Now the remaining value might not sound like a huge difference, but still has an approximation error.

    My suggestion is to take a look at partitioning

    $ 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
    

    The eMMC(mmcblk0) size is 15388672(1K-blocks) or approximately 15,028MB or 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
    

    But remember that is 14.67Gb is the disk size and not the file system capacity

    The command df stands for "disk filesystem". With the -h option (df -h) it shows the disk space in "human readable" form

    $ 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
    

    The device has 8.5G userdata available space as shown in the example above Please note that userdata partition size is 9814016(mmcblk0p43) and the file system size is 9610592(9.1G)

    references: