/storage/emulated/0/
প্রকৃতপক্ষে নয় বরং /data/media/0/
একটি অনুকরণীয় / ভার্চুয়াল ফাইল সিস্টেমের মাধ্যমে উদ্ভাসিত হয়।
এটি আমার পূর্ববর্তী উত্তরের রেফারেন্স সহ এখানে , তবে আরও প্রাসঙ্গিক বিশদ সহ।
অ্যান্ড্রয়েড স্টোরেজ:
উপর অ্যান্ড্রয়েড 5 :
/sdcard >S> /storage/emulated/legacy >S> /mnt/shell/emulated/0
/mnt/shell/emulated >E> /data/media
উপর অ্যান্ড্রয়েড 6+ :
# for (Java) Android apps (running inside zygote virtual machine)
# "/storage to VIEW" bind mount is inside a separate mount namespace for every app
/sdcard >S> /storage/self/primary
/storage/self >B> /mnt/user/USER-ID
/mnt/user/USER-ID/primary >S> /storage/emulated/USER-ID
/storage/emulated >B> /mnt/runtime/VIEW/emulated
/mnt/runtime/VIEW/emulated >E> /data/media
# for services/daemons/processes in root/global namespace (VIEW = default)
/sdcard >S> /storage/self/primary
/storage >B> /mnt/runtime/default
/mnt/runtime/default/self/primary >S> /mnt/user/USER-ID/primary
/mnt/user/USER-ID/primary >S> /storage/emulated/USER-ID
/storage/emulated >B> /mnt/runtime/default/emulated
/mnt/runtime/default/emulated >E> /data/media
* >S>
সিমবলিক লিঙ্ক জন্য, >E>
emulated এবং >B>
জন্য বেঁধে মাউন্ট
* USER-ID
ক্ষেত্রে বর্তমান ব্যবহারকারীর Multiple Users
বা Work Profile
, সাধারণত 0
অর্থাত ডিভাইসে মালিকের
* VIEW
এক read
বা (permission.READ_EXTERNAL_STORAGE সঙ্গে অ্যাপসের জন্য) write
(permission.WRITE_EXTERNAL_STORAGE) অথবা default
(রুট চলমান প্রসেসের জন্য / গ্লোবাল মাউন্ট নেমস্পেস অর্থাত্ জাইগোটের বাইরের অংশে)
* পূর্ববর্তী অ্যান্ড্রয়েড সংস্করণগুলিতে সামান্য পার্থক্য ছিল তবে প্রয়োগের পরে থেকেই এমুলেশন ধারণাটি একই ছিল।
* অ্যান্ড্রয়েডের মাউন্ট নেমস্পেস বাস্তবায়নের বিষয়ে আরও কিছু বিশদের জন্য এই উত্তরটি দেখুন ।
সংক্ষিপ্ত, ইন /sdcard
এবং /storage/emulated/0
যা একটি চর্বি / VFAT / FAT32 ফাইল সিস্টেম প্রতিনিধিত্ব - - বিন্দু প্রতি /data/media/0
(অথবা /mnt/expand/[UUID]/media/0
ক্ষেত্রে গ্রহণযোগ্য সংগ্রহস্থল মাধ্যমে) FUSE
বা sdcardfs
এমুলেশন।
অ্যান্ড্রয়েড নির্দিষ্ট না হলেও সাধারণত লিনাক্স সম্পর্কিত, সিমিলিংক এবং বাইন্ড মাউন্ট (দেখুন "একটি বাইন্ড মাউন্ট তৈরি করা") এই প্রশ্নের ক্ষেত্রের বাইরে, কারণ প্রশ্নটি মূলত ইমুলেশন অংশ সম্পর্কে।
এমুলেশন:
অনুকরণ এখানে কেন? এমুলেটেড ফাইল সিস্টেম হ'ল আসল ফাইল সিস্টেমের ( ext4
বা f2fs
) একটি বিমূর্ত স্তর যা মূলত দুটি উদ্দেশ্যে পরিবেশন করে:
- পিসিগুলিতে অ্যান্ড্রয়েড ডিভাইসের ইউএসবি সংযোগ ফিরিয়ে আনুন (এমটিপি এর মাধ্যমে প্রয়োগ করা হয়েছে এখন এক দিন)
- ব্যবহারকারীর ব্যক্তিগত মিডিয়া এবং এসডি কার্ডের অন্যান্য অ্যাপ্লিকেশনগুলির ডেটাতে অ্যাপ্লিকেশন / প্রক্রিয়াগুলির অননুমোদিত অ্যাক্সেসকে সীমাবদ্ধ করুন।
বিশদগুলির জন্য অ্যান্ড্রয়েডের স্টোরেজ জার্নি পড়ুন , সারাংশটি হ'ল:
প্রাথমিক অ্যান্ড্রয়েড ডিভাইসগুলি অভ্যন্তরীণ স্টোরেজে সংক্ষিপ্ত ছিল এবং (শারীরিকভাবে) বাহ্যিক এসডি কার্ডের উপর নির্ভর করেছিল যা বেশিরভাগ পিসির সাথে সামঞ্জস্যতা নিশ্চিত করতে ফাইল সিস্টেমের ফ্যাট পরিবার ব্যবহার করে (পিসি বিশ্বের মাইক্রোসফ্টের আধিপত্য বোঝায়)।
অভ্যন্তরীণ স্টোরেজ আকারে বেড়ে গেলে, একই ফাইল সিস্টেমটি অভ্যন্তরীণ (এখনও "বাহ্যিক" নামে পরিচিত) এসডি কার্ডে স্থানান্তরিত হয়।
তবে এফএটি / ভিএফএটি বাস্তবায়নে দুটি প্রধান সমস্যা ছিল যা গুগল ধীরে ধীরে সমাধান করেছে:
- এই দিনগুলিতে আমরা যেমন একটি ইউএসবি ড্রাইভ সংযোগ করি ঠিক তেমনই অ্যান্ড্রয়েড ডিভাইসগুলি পিসিগুলির সাথে সরাসরি ( ইউএসবি মাস স্টোরেজ ) সংযুক্ত ছিল। ইউএমএস ব্লক স্তরে ডিভাইসটি উন্মোচিত করে এবং অ্যান্ড্রয়েড ফ্রেমওয়ার্ক (আন-মাউন্টস) থেকে এসডি কার্ডটি সংযোগ বিচ্ছিন্ন করে, ফলে পুরো ডেটা অ্যাপ্লিকেশনগুলিতে অনুপলব্ধ হয়ে যায় এবং সম্ভবত অনেকগুলি কার্যকারিতা ভঙ্গ করে।
- ফ্যাট (হচ্ছে উইন্ডোজ 'উন্নয়ন দিন প্রিয়) ইউনিক্স অনুমতি (মোড, ইউআইডি, gid এবং অনুরূপভাবে জোরদার করার জন্য ডিজাইন করা হয়নি symlinks , এবং
ioctls
মত FS_IOC_FIEMAP
)। সুতরাং, এসডি কার্ডের সমস্ত ডেটা সমস্ত অ্যাপ্লিকেশনের জন্য উপলব্ধ ছিল (যেহেতু প্রতিটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি ইউএনআইএক্স / লিনাক্স ব্যবহারকারী এবং কোনও ইউআইডি রয়েছে) কোনও বিধিনিষেধ ছাড়াই গুরুতর গোপনীয়তা এবং সুরক্ষা উদ্বেগ উত্থাপন করে।
এই দুটি বিষয়ই অনুকরণের মাধ্যমে সম্বোধন করা হয়েছিল:
- প্রকৃত এসডি কার্ড
/data
স্টোরেজটি পার্টিশনে স্থানান্তরিত হয়েছিল (বা কিছু ডিভাইসে পূর্বে স্বতন্ত্র / এসডিকার্ড পার্টিশন) যা ext4
ফাইল সিস্টেম (ধীরে ধীরে প্রতিস্থাপন করা হয় f2fs
) ধারণ করে , ইউনিক্স অনুমতিগুলি সম্পূর্ণরূপে প্রয়োগ করে।
- ইউএমএস ব্যবহার করে তৈরি করা এই নকশাটি অসম্ভব, কারণ
/data
আরও দুটি কারণে পুরো পার্টিশনটি পিসির কাছে প্রকাশ করা যায়নি: (1)
এতে অনেকগুলি সেটিংস এবং অ্যাপ্লিকেশনগুলির ডেটা রয়েছে যা অন্যান্য অ্যাপ্লিকেশন এবং সেইসাথে মানব ব্যবহারকারীদের থেকে সুরক্ষিত থাকতে পারে। (2)
লিনাক্স ফাইল সিস্টেমগুলি উইন্ডোজ দ্বারা সমর্থিত নয়।
সুতরাং ইউএমএস মিডিয়া স্থানান্তর প্রোটোকল দ্বারা প্রতিস্থাপিত হয়েছিল যা পিটিপি-র একটি ক্লায়েন্ট-সার্ভার টাইপ এক্সটেনশন - এটি ইতিমধ্যে প্রতিষ্ঠিত একটি প্রোটোকল। এমটিপি ব্লক ডিভাইস প্রকাশ করে না তবে সফ্টওয়্যার স্ট্যাকের মাধ্যমে কাজ করে। এমটিপি হোস্ট অ্যান্ড্রয়েডে কোনও অ্যাপ্লিকেশন ( android.process.media
) সম্পূর্ণ অ্যান্ড্রয়েড ফ্রেমওয়ার্কে স্যান্ডবক্সযুক্ত হিসাবে চালিত হয় , কোনও বাড়ানো কাজ করতে সক্ষম নয়।
এখন অ্যাপসগুলি (এবং এমটিপি, যা এটিও একটি অ্যাপ্লিকেশন) /data/media
একই সময়ে উভয় উদ্দেশ্য অর্জনের জন্য নীচে অনুমতি চেক প্রয়োগ করা এবং উপরের পৃষ্ঠের এফএটি ফাইল সিস্টেমের মতো দেখতে উভয় উদ্দেশ্য অর্জনের পরিবর্তে এমুলেটেড স্টোরেজের সাথে যোগাযোগ করে।
গুগল FUSE এর কমতিগুলি কাটিয়ে উঠতে এখন sdcardfs এর মাধ্যমে অনুকরণ বাস্তবায়ন করছে ; একটি বড় হ'ল ইনপুট / আউটপুট ওভারহেড অর্থাত্ পঠন / লেখার গতি উন্নত করা।
বাহ্যিক স্টোরেজ অনুমতি:
ধারণা সরকারী এবং বাহ্যিক সঞ্চয় প্রাইভেট ফাইল : একটি উদাহরণ ব্যবহার প্রদর্শিত করা যাবে
Termux অ্যাপ্লিকেশন ইনস্টল করুন।
ডিরেক্টরি তৈরি করুন /sdcard/Android/data/com.termux/test_dir
এবং /sdcard/test_dir
।
ফাইল তৈরি করুন /sdcard/Android/data/com.termux/test_file
এবং /sdcard/Android/data/com.termux/test_file
।
নিম্নলিখিত আদেশগুলি কার্যকর করুন:
* আপনার হোয়াটসঅ্যাপ ইনস্টল করা উচিত বা অন্য কোনও অ্যাপের ব্যক্তিগত ফোল্ডারটি নির্বাচন করা উচিত।
এখন জোর করে Termux অ্যাপ্লিকেশন বন্ধ করুন এবং স্টোরেজ অনুমতি প্রদান করুন । কমান্ডগুলি আবার কার্যকর করুন:
একই ফাইল এবং ডিরেক্টরিগুলির অনুমতিগুলির পার্থক্যটি দেখুন। দেশীয় লিনাক্স ফাইল সিস্টেমে অনুকরণ ব্যতীত এটি সহজেই সম্ভব হবে না বলে মনে হয় যখন একসাথে শত শত অ্যাপ (ব্যবহারকারী) ডিল করার জন্য রয়েছে। এটি সেই ফাইলসিস্টেম এমুলেশন যা একই ফাইলকে একই সময়ে তিনটি পৃথক অনুমতি সহ প্রকৃত ফাইল সিস্টেমে মূল অনুমতিগুলির চেয়ে পৃথক করে উন্মুক্ত করতে দেয়:
# touch /data/media/0/test_file
# stat -c '%a %u %g %n' /data/media/0/test_file
644 1023 1023 /data/media/0/test_file
# stat -c '%a %u %g %n' /mnt/runtime/*/emulated/0/test_file
660 0 1015 /mnt/runtime/default/emulated/0/test_file
640 0 9997 /mnt/runtime/read/emulated/0/test_file
660 0 9997 /mnt/runtime/write/emulated/0/test_file
এছাড়াও দেখুন "u # _Eebodybody" ইউআইডি কী?
সম্পর্কিত: