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