The reason is the history of Android: The first generation of Android devices only had a small amount of internal storage (around 100-400MiB) which was mounted under `/data`. Next, devices with a, at that time external, SD-card came out. The SD card was mounted under `/mnt/sdcard`. After that, devices with large internal storage came on the market. This storage was portioned, because `/mnt/sdcard` had become the default place for big data chunks from apps, pictures and such. So the Android environment had to have a `/data` and `/mnt/sdcard` directory. Therefore one partition was for `/data`, the other for `/mnt/sdcard`. This is the reason why you storage space could become low (the `/data` partition) even if there is plenty of space on `/mnt/sdcard`. This situation was improved with Android 3.0: `/data` and `/mnt/sdcard` are now pointing to the same partition. <sup>Good job Google, that could have been done versions ago.</sup> Which is also the reason why app2sd is no more needed on Android 3.0 or higher: You would only move the data within the same volume. Now we come to the answer if your question: Since `/mnt/sdcard` is already mounted on the internal storage, an external SD-card has to use a different mount point. And this mount point is not specified by Google. It could be - `/mnt/sdcard/ext_sd` - `/mnt/external` - `/mnt/extSdCard` - `/mnt/sdcard/external_sd` - etc. The API call [`getExternalStorageDirectory()`][1] usually points to the internal storage directory. This behavior is documented. There are [open source projects that provide tools][2] to find the external SD-card directory in a canonical way. [1]: http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory%28%29 [2]: https://github.com/jow-ct/Environment2