Mengapa SD-card dipasang ke “/ sdcard / external_sd” alih-alih “/ sdcard” (atau “/ mnt / sdcard”)?

18

Saya baru-baru ini meningkatkan telepon saya ke LG Motion 4G (Android 4 ICS). Saya melihat bahwa sdcard sudah terpasang di /sdcard/external_sd. Saya juga memperhatikan bahwa ini tampaknya sama dengan beberapa model baru lainnya. Aplikasi mengharapkan sdcard berada di /sdcard. Saya berasumsi bahwa produsen ingin memasukkan banyak penyimpanan internal, tetapi mengapa memasang penyimpanan internal pada /sdcard? Tidakkah ini bertentangan dengan beberapa bentuk standar spesifikasi Android?

Sepero
sumber
4
Mengenai "standar spesifikasi", ini seharusnya tidak menimbulkan masalah: Seperti yang dapat Anda baca di dokumentasi pengembang tentang Penyimpanan Eksternal , aplikasi harus menentukan lokasi / ketersediaan menggunakan panggilan API (di sini: getExternalStorageState () ), tidak menggunakan jalur kode keras. .
Izzy
Poin bagus Izzy, tetapi tampaknya beberapa produsen secara salah mengarahkan ulang aplikasi ke ruang internal melalui getExternalStorageDirectory (). stackoverflow.com/questions/11281010/…
Sepero
Ah, bagus juga - sebagai non-pengembang saya tidak menyadarinya. Tetapi saya melihat Flow memberikan penjelasan yang sangat bagus - lagi dengan poin yang saya tidak sadari ...
Izzy

Jawaban:

26

Alasannya adalah sejarah Android: Generasi pertama perangkat Android hanya memiliki sejumlah kecil penyimpanan internal (sekitar 100-400MiB) yang dipasang di bawah /data.

Selanjutnya, perangkat dengan, pada saat itu eksternal, SD-card keluar. Kartu SD dipasang di bawah /mnt/sdcard.

Setelah itu, perangkat dengan penyimpanan internal besar muncul di pasaran. Penyimpanan ini dibagi, karena /mnt/sdcardtelah menjadi tempat default untuk potongan data besar dari aplikasi, gambar, dan semacamnya. Jadi lingkungan Android harus memiliki /datadan /mnt/sdcarddirektori. Karena itu satu partisi untuk /data, yang lain untuk /mnt/sdcard. Ini adalah alasan mengapa ruang penyimpanan Anda bisa menjadi rendah ( /datapartisi) bahkan jika ada banyak ruang /mnt/sdcard.

Situasi ini diperbaiki dengan Android 3.0: /datadan /mnt/sdcardsekarang menunjuk ke partisi yang sama. Kerja bagus Google, itu bisa dilakukan versi yang lalu. Yang juga menjadi alasan mengapa app2sd tidak diperlukan lagi di Android 3.0 atau lebih tinggi: Anda hanya akan memindahkan data dalam volume yang sama.

Sekarang kita sampai pada jawaban jika pertanyaan Anda: Karena /mnt/sdcardsudah terpasang pada penyimpanan internal, kartu SD eksternal harus menggunakan titik pemasangan yang berbeda. Dan titik pemasangan ini tidak ditentukan oleh Google. Bisa jadi

  • /mnt/sdcard/ext_sd
  • /mnt/external
  • /mnt/extSdCard
  • /mnt/sdcard/external_sd
  • dll.

Panggilan API getExternalStorageDirectory()biasanya menunjuk ke direktori penyimpanan internal. Perilaku ini didokumentasikan. Ada proyek open source yang menyediakan alat untuk menemukan direktori SD-card eksternal dengan cara kanonik.

Mengalir
sumber
Apakah itu berarti tidak ada "cara transparan" bagi aplikasi untuk menentukan kartu SD? Tentu saja, ada isExternalStorageRemovable()untuk melihat apakah penyimpanan "eksternal" dapat dilepas, ditambah satu dapat menentukan titik mount (menggunakan mountperintah) dan memeriksa tanda mount dll. Tetapi jika saya tidak salah di sini, ini masih berarti setiap kebutuhan pengembang untuk mengetahui sendiri aplikasinya, dan tidak ada panggilan API sederhana untuk melakukannya untuknya?
Izzy
Itu benar. Ada perpustakaan yang saya tautkan yang mencoba menambahkan fitur itu, tetapi tidak ada panggilan API resmi untuk melakukannya.
Alir
Jika kedua penyimpanan eksternal dan /datapartisi digabungkan, bagaimana saya bisa memasang / melepas kartu SD saya dengan aman untuk dihubungkan, katakanlah, di PC saya? Tampak bagi saya bahwa memiliki partisi yang terpisah adalah logis dan saya tidak melihat mengapa semua itu harus terjadi.
jadkik94
Ini bukan penyimpanan eksternal, melainkan, "internal SD" dan /datapartisi yang digabung.
Aliran
This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Hanya FYI, itu BUKAN pada setidaknya satu ponsel yang menjalankan Android 4.0 (Pantech Burst), di mana /dataadalah partisi ext4 1GB dan /mnt/sdcardpartisi FAT32 12GB.
netvope
3

Memaksa SD eksternal menjauh dari /mnt/sdcardtidak memiliki kelebihan teknis, itu adalah cara Google membantu vendor perangkat keras untuk membuat titik diferensiasi untuk ponsel dengan memori internal yang lebih banyak.

Tidak ada alasan mengapa aplikasi harus menemukan cara untuk menemukan kartu eksternal ketika /mnt/sdcardjelas tempat kartu itu seharusnya dan cara Google yang tidak ditentukan untuk memuat kartu SD eksternal adalah plot yang kurang ramah konsumen untuk membuat kartu SD eksternal kurang berguna dalam perangkat Android yang lebih baru. Tidak ada alasan mengapa /datadan /mnt/sdcardharus digabung ke dalam partisi yang sama pada versi Android yang lebih baru kecuali bagi produsen untuk membedakan ponsel dengan memori internal yang lebih besar dari unit biaya lebih rendah dengan memori internal yang lebih sedikit. Bahkan jika penggabungan harus dilakukan, Google dapat dengan jelas mendefinisikan STANDARtitik pemasangan baru untuk kartu SD eksternal bukannya meninggalkannya sepenuhnya kabur. Ini sepenuhnya bekerja untuk mencegah "segmentasi" lebih lanjut dari sistem-ekologi Android dengan desain yang canggung untuk membantu diferensiasi vendor ponsel kelas atas terhadap unit berbiaya lebih rendah dengan memori built-in yang lebih sedikit.

Biner aplikasi Android berukuran kecil, ponsel dengan 1-2 Gigs memori internal seharusnya memiliki ruang lebih dari cukup untuk ratusan aplikasi, dan semua data besar dapat dengan aman terselip di kartu SD eksternal. Tetapi kemudian vendor menyadari bahwa mereka harus memiliki cara untuk membedakan produk akhir mereka yang lebih tinggi, dan mengklaim memori internal yang lebih tinggi menjadi bagian dari skema itu dan melumpuhkan kegunaan memori eksternal adalah bagian terintegrasi lainnya yang diperlukan skema ini agar ini berfungsi sepenuhnya sehingga API yang kurang membantu untuk menemukan kartu sd eksternal dan titik pemasangan yang tidak standar.

Jadi: Tidak, memasang kartu SD di tempat selain /mnt/sdcardtidak lain adalah strategi bisnis untuk menjual ponsel baru dengan harga lebih tinggi di bawah versi Android yang lebih baru, tidak lebih dari itu. Bayangkan saja, jika Nexus 4 8GB dan Nexus 16GB keduanya dapat menggunakan 64GB kartu sd eksternal untuk aplikasi dan media, apakah ada alasan bagi siapa pun untuk membeli versi 16 GB? Memori NAND 8 GB tambahan itu tidak berarti tidak bernilai perbedaan harga $ 50 jika kartu SD eksternal terlibat. Karena sebagian besar komponen dalam ponsel pintar harus hampir sama (RAM, prosesor, radio), satu-satunya area yang tersisa untuk margin laba lebih banyak adalah ruang memori internal, dan karenanya titik pemasangan memry eksternal yang aneh.

Juga apakah semua orang juga memperhatikan tidak adanya dukungan SD eksternal dari perangkat Android "Google" sekarang? Tren ini akan terus berkembang di perangkat Android "papan atas". Dukungan kartu SD eksternal adalah diferensiasi kunci untuk perangkat Android untuk mengambil alih dominasi iPhone di pasar ponsel. Sekarang dengan putusan Android tertinggi di permainan angka, ada sedikit kebutuhan untuk praktik pengisapan laba ini untuk dipertahankan lebih lama.

Saya tidak akan terkejut dengan Android 5.0, dukungan kartu SD eksternal akan menjadi sesuatu dari masa lalu. Karena jika sulit untuk aplikasi untuk menemukan kartu SD eksternal, maka sebagian besar program hanya akan menggunakan yang diketahui /datadan /mnt/sdcardlokasi, dengan sebagian besar aplikasi menggunakan lebih banyak dan lebih banyak data yang disimpan untuk operasinya, strategi peningkatan produk yang dinamis dibuat dari "udara tipis" "hanya dengan tidak memasang kartu SD eksternal di /mnt/sdcard.

Deecee
sumber
1
Sekarang, itulah yang saya sebut dinding teks . Tampaknya juga agak ranty. Harap tambahkan beberapa paragraf ke jawaban Anda. Saya juga tidak mengerti mengapa "tidak ada alasan untuk bergabung /datadan /mnt/sdcard", karena saya jelas melihat alasannya: Menghindari fragmentasi penyimpanan internal.
Alur
1
Itu pasti kata-kata kasar, Deecee, tapi terlepas dari itu, saya menghargai masukan Anda. Cheers
Sepero
Dan ada satu hal lagi: dengan perangkat yang menempatkan kartu SD xternal di dalam kartu internal (misalnya /sdcard/external_sdpada LG P880), mencadangkan "penyimpanan bersama" mencakup keduanya , dan membuat arsip besar. Tidak ada cara untuk mencadangkan SD internal hanya dengan pendekatan yang mudah. Itu tidak masuk akal, karena ada banyak cara yang lebih mudah untuk membuat cadangan kartu eksternal. Fakta yang membuat saya gila, karena saya memiliki perangkat yang disebutkan ...
Izzy
2

Anda harus mengetahui (jika di-root) Anda dapat masuk ke /system/etc/vold.fstab dan menukar mount poin untuk / sdcard dan /mnt/external_sd .... ini akan memungkinkan sdcard Anda berada di / sdcard seperti yang Anda harapkan dan "penyimpanan internal" yang tersisa akan dipasang di / mnt / external_sd atau jika Anda lebih suka / sdcard / external_sd /

Rudi Pittman
sumber
Ini berfungsi dengan beberapa model ponsel, tetapi tidak semua. Ini tidak berfungsi untuk LG Motion 4G, Android 4.0.4. Thx
Sepero