ทำไม SD-card ถูกเมาท์เป็น“ / sdcard / external_sd” แทนที่จะเป็น“ / sdcard” (หรือ“ / mnt / sdcard”)


18

ฉันเพิ่งอัพเกรดโทรศัพท์เป็น LG Motion 4G (Android 4 ICS) ผมเห็นว่า sdcard /sdcard/external_sdจะติดตั้งอยู่ที่ ฉันยังสังเกตเห็นว่าสิ่งนี้ดูเหมือนจะเหมือนกันกับรุ่นที่ใหม่กว่าบางรุ่น ปพลิเคชันคาดว่า sdcard /sdcardให้อยู่ใน ผมถือว่าผู้ผลิตต้องการให้มีจำนวนมากของการจัดเก็บภายใน แต่ทำไมติดจัดเก็บข้อมูลภายในที่/sdcard? สิ่งนี้จะไม่ขัดกับมาตรฐานสเปคของ Android ไหม


4
สำหรับ "ข้อมูลจำเพาะมาตรฐาน" สิ่งนี้จะไม่มีปัญหาใด ๆ : ในขณะที่คุณสามารถอ่านในเอกสารประกอบของนักพัฒนาบนExternal Storageแอปควรกำหนดตำแหน่ง / ความพร้อมใช้งานโดยใช้การเรียก API (ที่นี่: getExternalStorageState () ) .
Izzy

จุดที่ดีอิซซี แต่เห็นได้ชัดว่าผู้ผลิตบางรายกำลังเปลี่ยนเส้นทางแอปไปยังพื้นที่ภายในอย่างผิดพลาดผ่าน getExternalStorageDirectory () stackoverflow.com/questions/11281010/…
Sepero

อาจุดดีเช่นกัน - ในฐานะที่ไม่ใช่นักพัฒนาฉันไม่ทราบว่า แต่ฉันเห็นว่าโฟลว์ให้คำอธิบายที่ดีมาก - อีกครั้งด้วยคะแนนที่ฉันไม่ทราบ ...
Izzy

คำตอบ:


26

เหตุผลก็คือประวัติศาสตร์ของหุ่นยนต์: รุ่นแรกของอุปกรณ์ Android มีเพียงจำนวนเล็กน้อยที่เก็บข้อมูลภายใน (ประมาณ 100-400MiB) /dataซึ่งได้รับการติดตั้งอยู่ภายใต้

ถัดไปอุปกรณ์ที่มี a- การ์ดภายนอกออกมาในเวลานั้น การ์ด SD /mnt/sdcardถูกติดตั้งอยู่ภายใต้

หลังจากนั้นอุปกรณ์ที่มีที่จัดเก็บข้อมูลภายในขนาดใหญ่ก็ออกสู่ตลาด ที่เก็บข้อมูลนี้ถูกแบ่งส่วนเนื่องจาก/mnt/sdcardเป็นสถานที่เริ่มต้นสำหรับชิ้นข้อมูลขนาดใหญ่จากแอพรูปภาพและสิ่งต่างๆ ดังนั้นสภาพแวดล้อม Android ต้องมี/dataและ/mnt/sdcardไดเรกทอรี ดังนั้นหนึ่งพาร์ทิชันเป็นสำหรับคนอื่น/data/mnt/sdcardนี่คือเหตุผลว่าทำไมคุณพื้นที่จัดเก็บอาจจะกลายเป็นต่ำ (the /dataพาร์ทิชัน) /mnt/sdcardแม้ว่าจะมีความอุดมสมบูรณ์ของพื้นที่บน

สถานการณ์นี้ได้รับการปรับปรุงด้วย Android 3.0: /dataและ/mnt/sdcardตอนนี้ชี้ไปที่พาร์ติชันเดียวกัน เก่งมาก Google ทำได้ดีมากแล้ว ซึ่งเป็นสาเหตุที่ทำให้ไม่จำเป็นต้องใช้ app2sd ใน Android 3.0 หรือสูงกว่า: คุณจะย้ายข้อมูลภายในปริมาณเดียวกันเท่านั้น

ตอนนี้เรามาถึงคำตอบหากคำถามของคุณ: เนื่องจาก/mnt/sdcardติดตั้งบนที่เก็บข้อมูลภายในแล้วการ์ด SD ภายนอกจึงต้องใช้จุดเชื่อมต่ออื่น และจุดเชื่อมต่อนี้ไม่ได้ระบุโดย Google มันอาจจะเป็น

  • /mnt/sdcard/ext_sd
  • /mnt/external
  • /mnt/extSdCard
  • /mnt/sdcard/external_sd
  • เป็นต้น

การเรียก API getExternalStorageDirectory()มักจะชี้ไปที่ไดเรกทอรีที่เก็บข้อมูลภายใน พฤติกรรมนี้ได้รับการบันทึกไว้ มีโครงการโอเพ่นซอร์สที่ให้เครื่องมือในการค้นหาไดเรกทอรี SD-card ภายนอกด้วยวิธีมาตรฐาน


หมายความว่าไม่มี "วิธีที่โปร่งใส" สำหรับแอปที่จะระบุการ์ด SD แน่นอนว่าisExternalStorageRemovable()ต้องดูว่าที่เก็บข้อมูล "ภายนอก" นั้นสามารถถอดออกได้หรือไม่และอีกอันสามารถกำหนดจุดเชื่อมต่อ (ใช้mountคำสั่ง) และตรวจสอบสถานะการเมานต์เป็นต้น แต่ถ้าฉันไม่ทำผิดที่นี่ เพื่อค้นหาแอปของเขาเองและไม่มีการเรียก API แบบง่าย ๆ ให้ทำเพื่อเขา
Izzy

ถูกต้อง. มีห้องสมุดที่ฉันเชื่อมโยงที่พยายามเพิ่มคุณสมบัตินั้น แต่ไม่มีการเรียก API อย่างเป็นทางการให้ทำ
Flow

หากมีการรวมที่จัดเก็บข้อมูลภายนอกและ/dataพาร์ติชันไว้ฉันจะติดตั้ง / ยกเลิกการต่อเชื่อมการ์ด SD ของฉันอย่างปลอดภัยได้อย่างไรพูดในพีซีของฉัน ดูเหมือนว่าฉันมีพาร์ติชันแยกต่างหากเป็นตรรกะและฉันไม่เห็นสาเหตุที่เกิดขึ้นทั้งหมด
jadkik94

มันไม่ได้จัดเก็บข้อมูลภายนอกก็เรียกว่า "ภายใน SD" และ/dataพาร์ติชันที่ได้รับของที่ผสาน
Flow

This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. เพียงแค่ FYI นั่นไม่เป็นความจริงบนโทรศัพท์อย่างน้อยหนึ่งเครื่องที่ใช้ Android 4.0 (Pantech Burst) ซึ่ง/dataเป็นพาร์ติชั่น 1GB ext4 และ/mnt/sdcardเป็นพาร์ติชั่น 12GB FAT32
netvope

3

บังคับภายนอก SD ติดห่างจาก/mnt/sdcardไม่มีบุญทางเทคนิคก็เป็นวิธีการที่ช่วยให้ฮาร์ดแวร์ของ Google ผู้ขายเพื่อสร้างจุดแตกต่างสำหรับโทรศัพท์ที่มีหน่วยความจำภายในมากขึ้น

ไม่มีเหตุผลว่าทำไมแอปพลิเคชันต้องค้นหาวิธีการค้นหาการ์ดภายนอกเมื่อ/mnt/sdcardเห็นได้ชัดว่าสถานที่ที่ sdcard ควรได้รับและวิธีที่ไม่ได้กำหนดของ Google ในการโหลดการ์ด SD ภายนอกเป็นอีกแผนการที่ไม่เป็นมิตรต่อผู้บริโภค อุปกรณ์ Android ที่ใหม่กว่า ไม่มีเหตุผลว่าทำไม/dataและ/mnt/sdcardต้องรวมเข้ากับพาร์ติชันเดียวกันบน Android รุ่นใหม่กว่ายกเว้นผู้ผลิตเพื่อแยกโทรศัพท์ที่มีหน่วยความจำภายในขนาดใหญ่จากหน่วยต้นทุนที่ต่ำกว่าและหน่วยความจำภายในที่น้อยลง แม้ว่าการผสานจะเสร็จสิ้น Google ก็สามารถกำหนดมาตรฐานได้อย่างชัดเจนจุดยึดใหม่สำหรับการ์ด SD ภายนอกแทนที่จะปล่อยให้มันคลุมเครือ นี่เป็นการทำงานอย่างสมบูรณ์เพื่อป้องกันการ "แบ่งส่วน" ของระบบนิเวศ Android ด้วยการออกแบบที่งุ่มง่ามเพื่อช่วยผู้ขายในการสร้างความแตกต่างของโทรศัพท์ระดับสูงกับหน่วยต้นทุนที่ต่ำกว่าพร้อมหน่วยความจำในตัวที่น้อยลง

ไบนารีแอพ Android มีขนาดเล็กโทรศัพท์ที่มีหน่วยความจำภายใน 1-2 กิ๊กควรมีพื้นที่เหลือเฟือสำหรับแอพนับร้อยและข้อมูลขนาดใหญ่ทั้งหมดสามารถซ่อนอยู่ใน SD การ์ดภายนอกได้อย่างปลอดภัย แต่จากนั้นผู้ขายก็ตระหนักว่าพวกเขาจะต้องมีวิธีที่จะแยกความแตกต่างของผลิตภัณฑ์ที่สูงกว่าของพวกเขาและอ้างว่าหน่วยความจำภายในที่สูงขึ้นกลายเป็นส่วนหนึ่งของโครงการและหมดอำนาจประโยชน์ของหน่วยความจำภายนอก API ที่มีประโยชน์น้อยกว่าในการค้นหาการ์ด sd ภายนอกและจุดยึดที่ไม่ได้มาตรฐาน

ดังนั้น: ไม่การติดตั้งการ์ด SD ในสถานที่อื่นนอกจาก/mnt/sdcardไม่มีอะไรเลยนอกจากกลยุทธ์ทางธุรกิจสำหรับการขายโทรศัพท์มือถือราคาสูงขึ้นใหม่ภายใต้ Android เวอร์ชันใหม่กว่าไม่มีอะไรมากไปกว่านั้น ลองจินตนาการดูว่าถ้า Nexus 4 8GB และ Nexus 16GB ทั้งคู่สามารถใช้การ์ดหน่วยความจำภายนอก 64GB สำหรับแอปพลิเคชั่นและสื่อได้มีเหตุผลที่ทุกคนจะซื้อรุ่น 16 GB หรือไม่? หน่วยความจำ NAND ที่เพิ่มขึ้น 8 GB นั้นไม่คุ้มกับความแตกต่างของราคา $ 50 หากใช้การ์ด SD ภายนอก เนื่องจากส่วนประกอบส่วนใหญ่ในสมาร์ทโฟนนั้นค่อนข้างจะต้องเหมือนกัน (RAM, โปรเซสเซอร์, วิทยุ) พื้นที่เดียวที่เหลือสำหรับอัตรากำไรมากขึ้นคือพื้นที่หน่วยความจำภายในและด้วยเหตุนี้จุดติดตั้ง memry ภายนอกที่แปลกประหลาด

ทุกคนยังสังเกตเห็นว่าไม่มีการสนับสนุน SD ภายนอกจากการเพาะปลูกปัจจุบันของอุปกรณ์ Android ยี่ห้อ "Google" หรือไม่? แนวโน้มนี้จะขยายตัวต่อไปในอุปกรณ์ Android "ระดับสูงสุด" การสนับสนุนการ์ด SD ภายนอกเป็นความแตกต่างที่สำคัญสำหรับอุปกรณ์ Android เพื่อแซงหน้า iPhone ในตลาดมือถือ ขณะนี้ด้วยการพิจารณาคดีของ Android ในเกมตัวเลขมีความต้องการเพียงเล็กน้อยสำหรับการฝึกฝนการทำกำไรเพื่อรักษาไว้ให้นานขึ้น

ฉันจะไม่แปลกใจกับ Android 5.0 การสนับสนุนการ์ด SD ภายนอกจะกลายเป็นอดีตไปแล้ว เพราะถ้าเป็นการยากที่จะหาแอพ SD การ์ดภายนอกโปรแกรมส่วนใหญ่จะใช้ชื่อที่รู้จัก/dataและ/mnt/sdcardสถานที่โดยที่แอพส่วนใหญ่ใช้ข้อมูลที่เก็บไว้มากขึ้นสำหรับการทำงานของมัน "ก็ไม่ติดการ์ด SD /mnt/sdcardภายนอก


1
ตอนนี้ที่เป็นสิ่งที่ผมเรียกผนังของข้อความ ดูเหมือนว่ายังค่อนข้างขาดเสถียรภาพ โปรดเพิ่มย่อหน้าลงในคำตอบของคุณ นอกจากนี้ฉันไม่เข้าใจว่าทำไม "ไม่มีเหตุผลที่จะผสาน/dataและ /mnt/sdcard" เนื่องจากฉันเห็นเหตุผลชัดเจนว่า: หลีกเลี่ยงการแยกส่วนของที่เก็บข้อมูลภายใน
Flow

1
นั่นเป็นคำพูดจาโผงผาง Deecee แต่ไม่ว่าอะไรก็ตาม ไชโย
Sepero

และมีสิ่งหนึ่งที่เพิ่มเติมไปอีกแล้ว: อุปกรณ์ที่วางการ์ด SD แบบ xternal ไว้ภายในการ์ดหน่วยความจำภายใน (เช่น/sdcard/external_sdบน LG P880) การสำรอง "พื้นที่เก็บข้อมูลที่ใช้ร่วมกัน" รวมถึงทั้งสองอย่างและสร้างที่เก็บถาวรขนาดใหญ่ ไม่มีวิธีในการสำรองข้อมูล SD ภายในด้วยวิธีง่าย ๆ ซึ่งไม่สมเหตุสมผลเนื่องจากมีวิธีที่ง่ายกว่าในการสำรองข้อมูลการ์ดภายนอก ความจริงที่ทำให้ฉันบ้าที่ฉันมีอุปกรณ์ดังกล่าว ...
อิซซี่

2

คุณควรระวัง (ถ้ารูท) คุณสามารถเข้าไปที่ /system/etc/vold.fstab และสลับจุดเมานท์สำหรับ / sdcard และ /mnt/external_sdpi สิ่งนี้จะช่วยให้ sdcard ของคุณอยู่ใน / sdcard ตามที่คุณคาดหวัง และส่วนที่เหลือ "ที่เก็บข้อมูลภายใน" จะถูกติดตั้งบน / mnt / external_sd หรือหากคุณต้องการ / sdcard / external_sd /


ใช้งานได้กับโทรศัพท์บางรุ่น แต่ไม่ทั้งหมด มันใช้งานไม่ได้กับ LG Motion 4G, Android 4.0.4 ของฉัน ขอบคุณ
Sepero
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.