原文链接:http://android-revolution-hd.blogspot.com/2013/03/virtual-sd-card-on-android.html(需要访问)
Since Android Honeycomb, Google changed the way to manage internal memory on Android devices. Before Honeycomb,
every user had one separate partitionon his device called
userdata(/data), where he could install applications and where all user settings were stored (home screens, applications data, contacts, and all the rest you loose after doing so called "full wipe" on your device). Apart of
userdatapartition, all Android devices had microSD card slot to save pictures, movies, backups etc..
Now it looks completely different, but let's start from the beginning. There are several approaches to this subject, I'll present here all those I am aware of.
- userdatapartition + microSD card
This is the mentioned above pre-Honeycomb approach. There is
userdatapartition, where you can install all your applications and you also have a possibility to insert microSD card. Nothing more to explain. Only devices running Android Gingerbread and older versions have such configuration, so it's getting less and less popular.
- userdatapartition +virtualSD card onuserdatapartition
This is the new approach presented for the first time in Honeycomb. Instead of having /data partition together with expandable microSD card slot of any capacity, Google decided for something different. Instead, /data partition became very large (16/32/64 GB) and inside you can find /data/
mediafolder that contains all the files you can see as your SD card content. How does it work? Without too much technical explanations, there is so called
fuse toolwhich emulates media folder inside
userdatapartition
as a separate storage device. As a result, after connecting smartphone to the PC
you can browse the content of /data/media location, so if it was a microSD card. The biggest downside of such approach is a high risk of loosing all your virtual SD card content in case of any serious /data partition failure. Also, such partition can't be formatted with
mkfs.ext4without loosing content of virtual SD card, because you can't format device partition just partially. You can use
e2fscktool to check for potential errors, but sometimes partition format is the only way out. How does "full wipe" work then? Well, it's a little bit complicated. First of all,
you can't format mounted (in use) partition. You need to unmount it first. Once unmounted
userdatapartition, you can't flash any ZIP file from inside recovery, because ZIPs files are stored on virtual SD card (/data/media) and remember that
userdatapartition is currently unmounted, because we want to format it. There is a workaround for it - you can run
mkfs.ext4from inside /cache partition or you can use command prompt. Now, what if you need to remove the whole content of your
userdatapartition, but you want to keep virtual SD card content at the same time? There is a workaround for this as well, but instead of formatting entire partition, you need to remove all files excluding /data/media location. Example:
#!/tmp/bash
# Remove content of /data partition excluding data/media files
cd /data
FILES=(*)
for i in *; do
if [ "$i" != "media" ]
then rm -R "$i"
fi
done
This way you can sort of wipeuserdata, but it doesn't format the partition, so you can't fix broken file-system with it.
Why this point is the longest one? Because it took me quite a few words to explain the relation between virtual SD card and
media
folder on
userdata
partition (/data/media). So basically, what you read here applies to every configuration with virtual SD card emulated on
userdata
partition.
- userdatapartition +virtualSD card on aseparatepartition
This approach is not very popular, and it's a shame because it seems to be
much more practicalrather than the previous one. Instead of emulating SD card from
userdatapartition, there is a
separate, large partition withvFATfile-system. That means you can format your
userdatapartition anytime you want without loosing content of your virtual SD card, or from inside custom ROM, because
userdatacan be freely unmounted. The only device I've seen so far with this approach was HTC One X.
- userdatapartition +virtualSD card onuserdatapartition + microSD card
This seems to be the most desirable solution for many Android users. It works similar to approach described in the second point, so everything I wrote about /data/media is valid here as well. However, every user have the
ability to insert extra microSD card inside his device, so he can easily backup virtual SD card to microSD card or format
userdatapartition without loosing all pictures etc. (if previously stored on microSD card). This is the most common configuration for Samsung devices.
But having removable microSD card is not only an advantage. First of all, any kind of microSD card (even SDHC) will be
always slowerthan internal eMMC memory. It depends on many factors like card speed (class 2, 4, 6, 8 or even 10), on-board controller, I/O scheduler and more. Secondly, microSD card
damage risk is higherthen damage risk of internal eMMC memory. Out of question is the benefit to expand the memory with 64 GB microSD card, but it's definitely the minority of power users, who are buying large capacity cards.
For the vast majority of users, internal memory with 32 GB capacity is more then enough to store theirfavoritemusic or pictures.
- userdatapartition +virtualSD card on aseparatepartition + microSD card
This approach is theoretically possible, but personally I've never seen device with such combination. For me,
this is the best combination. You have possibility to
use external microSD cardand
virtual SD card is not a part ofuserdatapartition, but it has it's own, separate
vFatpartition.Such configuration gives you control over all your data and possibility to manage it however you want.
Do you have any questions or want to share some opinion? Please leave a comment below! Also, if you like this article, please use media sharing buttons (Twitter, G+, Facebook) down this post!