Adoptable Storage(SDカードの扱い方を指定)

投稿日:  更新日:

Adoptable Storage(API≧23、Android 6.0)が導入されて、SDカードの扱い方をユーザ側で指定できるようになりました。

「Adoptable Storage」について、まとめます。

※環境:Android Studio Narwhal | 2025.1.1 Patch 1

スポンサーリンク

Adoptable Storage

Adoptable StorageはAPI≧23で導入された仕組みで、外部メモリーを取り込み、内部メモリーの一部のように動作させる機能です。

SDカードの使用開始時に、ユーザがSDカードの扱い方を、次の2つから選択できます。

扱い方構成特徴
拡張ストレージ拡張ストレージ・ストレージの容量を拡張するイメージ
・取り外しを想定しない使い方

・フォーマットが発生
・暗号化される(FDE or FBE)
追加ストレージ
(デフォルト)
個別ストレージ・ストレージの数を追加するイメージ
・取り外しを想定する使い方
※デフォルト:Adaptable Storageの未使用時
FDE:フルディスク暗号化(Full-Disk Encryption)、API≦28
FBE:ファイルベースの暗号化( File-Based Encryption)、API≧29

SDカードスロットにSDカードが挿入されていると、ステータスバーにアイコンが表示されます。

Adaptable Storageアイコン

このアイコンを起点に、選択画面へ移動できます。

スポンサーリンク

拡張ストレージ

拡張ストレージは内部メモリーのストレージ容量を拡張するように、SDカードを扱います。

拡張ストレージのイメージ

SDカードには、アンドロイドの標準アプリ(カメラなど)と密接に関連したメディアデータ(画像、動画など)が保存されます。

SDカードが取り外されると、標準アプリが使えません。従って、SDカードの取り外しを想定しない使い方です。

扱い方の選択

選択画面で、図のような操作を行います。

API≦32(API 28で確認)API≧33(API 33で確認)
拡張のストレージの指定
拡張のストレージの指定

ディレクトリ構成

API≦32(API 28で確認)API≧33(API 33で確認)
  • dm-1 … 内部メモリー
  • dm-2 … 外部メモリー(SDカード)
# df -a ※“-a”で重複したマウント元も表示
Filesystem            1K-blocks    Used Available Use% Mounted on
/dev/root               2539468 1826036    713432  72% /
tmpfs                   1023364     468   1022896   1% /dev
tmpfs                   1023364       0   1023364   0% /mnt
/dev/block/vde1           93016   41272     51744  45% /vendor
/dev/block/dm-1         6094400  117740   5976660   2% /data
/dev/block/dm-2          474580     624    473956   1% /mnt/expand/xxx
/mnt/expand/xxx/media    474580     636    473944   1% /mnt/runtime/default/emulated
/mnt/expand/xxx/media    474580     636    473944   1% /storage/emulated
/mnt/expand/xxx/media    474580     636    473944   1% /mnt/runtime/read/emulated
/mnt/expand/xxx/media    474580     636    473944   1% /mnt/runtime/write/emulated

※エミュレータ(API28)の「adb shell」で確認
  • dm-34 … 内部メモリー
  • dm-9 … 外部メモリー(SDカード)
# df -a ※“-a”で重複したマウント元も表示
Filesystem        1K-blocks    Used Available Use% Mounted on
/dev/block/dm-5      836572  771008     65564  93% /
tmpfs               1006452    1260   1005192   1% /dev
devpts                    0       0         0   0% /dev/pts
proc                      0       0         0   0% /proc
sysfs                     0       0         0   0% /sys
selinuxfs                 0       0         0   0% /sys/fs/selinux
tmpfs               1006452       0   1006452   0% /mnt
...
tmpfs                     -       -         -    - /storage
/dev/block/dm-34    6082144  752616   5329528  13% /data
tmpfs                     -       -         -    - /linkerconfig
/dev/block/dm-34          -       -         -    - /data/user/0
...
/dev/block/dm-9      504812  116164    388648  24% /mnt/expand/2e7b2c2b-e6b9-4c5d-893e-d32119b535c0
/dev/block/dm-9           -       -         -    - /data_mirror/data_ce/2e7b2c2b-e6b9-4c5d-893e-d32119b535c0
/dev/block/dm-9           -       -         -    - /data_mirror/data_de/2e7b2c2b-e6b9-4c5d-893e-d32119b535c0
/dev/block/dm-9           -       -         -    - /data_mirror/misc_ce/2e7b2c2b-e6b9-4c5d-893e-d32119b535c0
/dev/block/dm-9           -       -         -    - /data_mirror/misc_de/2e7b2c2b-e6b9-4c5d-893e-d32119b535c0
/dev/fuse            504812  116164    388648  24% /mnt/installer/0/emulated
/dev/fuse                 -       -         -    - /mnt/androidwritable/0/emulated
/dev/fuse                 -       -         -    - /mnt/user/0/emulated
/dev/fuse                 -       -         -    - /storage/emulated
...

※エミュレータ(API33)の「adb shell」で確認

「storage」はOS(Android)のメモリー(RAM)上に作られたファイルシステムで、「/storage」にマウントされています。その下に、FUSEファイルシステムのemulatedがマウントされています。

FUSEはユーザモードで動作するファイルシステムです。メディアファイルに厳格なアクセス制御(誰に許可するか!)を行っています。

FUSEファイルシステムの配下になるのが、dm-9(SDカード上のファイルシステム)であると思われます。

スポンサーリンク

個別ストレージ

個別ストレージはストレージの数を追加するように、SDカードを扱います。デフォルトの動作です。

個別ストレージのイメージ

SDカードには、様々な種類のデータが保存されます。

他のデバイス(携帯端末やパソコンなど)とデータの交換を行いたい場合は、SDカードを差し替えて行えます。従って、SDカードの取り外しを想定した使い方です。

扱い方の選択

選択画面で、図のような操作を行います。

API≦32(API 28で確認)API≧33(API 33で確認)
個別のストレージの指定
個別のストレージの指定

ディレクトリ構成

API≦32(API 28で確認)API≧33(API 33で確認)
  • dm-1 … 内部メモリー
  • /dev/block/vold/public:253,80 … 外部メモリー(SDカード)
# df -a ※“-a”で重複したマウント元も表示
Filesystem                    1K-blocks    Used Available Use% Mounted on
/dev/root                       2539468 1826036    713432  72% /
tmpfs                           1023364     464   1022900   1% /dev
tmpfs                           1023364       0   1023364   0% /mnt
/dev/block/vde1                   93016   41272     51744  45% /vendor
/dev/block/dm-1                 6094400  106256   5988144   2% /data
/data/media                     6094400  111724   5982676   2% /mnt/runtime/default/emulated
/data/media                     6094400  111724   5982676   2% /storage/emulated
/data/media                     6094400  111724   5982676   2% /mnt/runtime/read/emulated
/data/media                     6094400  111724   5982676   2% /mnt/runtime/write/emulated
/dev/block/vold/public:253,80    522228      40    522188   1% /mnt/media_rw/0000-0000
/mnt/media_rw/0000-0000          522228      40    522188   1% /mnt/runtime/default/0000-0000
/mnt/media_rw/0000-0000          522228      40    522188   1% /storage/0000-0000
/mnt/media_rw/0000-0000          522228      40    522188   1% /mnt/runtime/read/0000-0000
/mnt/media_rw/0000-0000          522228      40    522188   1% /mnt/runtime/write/0000-0000

※エミュレータ(API28)の「adb shell」で確認
  • dm-34 … 内部メモリー
  • /dev/block/vold/public:253,81 … 外部メモリー(SDカード)
# df -a ※“-a”で重複したマウント元も表示
Filesystem                    1K-blocks    Used Available Use% Mounted on
/dev/block/dm-5                  836572  771008     65564  93% /
tmpfs                           1006452    1256   1005196   1% /dev
devpts                                0       0         0   0% /dev/pts
proc                                  0       0         0   0% /proc
sysfs                                 0       0         0   0% /sys
selinuxfs                             0       0         0   0% /sys/fs/selinux
tmpfs                           1006452       0   1006452   0% /mnt
...
tmpfs                                 -       -         -    - /storage
/dev/block/dm-34                6082144  897776   5184368  15% /data
tmpfs                                 -       -         -    - /linkerconfig
/dev/block/dm-34                      -       -         -    - /data/user/0
...
/dev/fuse                       6082144  897776   5184368  15% /mnt/installer/0/emulated
/dev/fuse                             -       -         -    - /mnt/androidwritable/0/emulated
/dev/fuse                             -       -         -    - /mnt/user/0/emulated
/dev/fuse                             -       -         -    - /storage/emulated
...
/dev/block/vold/public:253,81    523072     448    522624   1% /mnt/media_rw/3551-0E11
/dev/fuse                        523072     448    522624   1% /mnt/installer/0/3551-0E11
/dev/fuse                             -       -         -    - /mnt/androidwritable/0/3551-0E11
/dev/fuse                             -       -         -    - /mnt/user/0/3551-0E11
/dev/fuse                             -       -         -    - /storage/3551-0E11
/dev/block/vold/public:253,81         -       -         -    - /mnt/pass_through/0/3551-0E11

※エミュレータ(API33)の「adb shell」で確認

「storage」はOS(Android)のメモリー(RAM)上に作られたファイルシステムで、「/storage」にマウントされています。その下に、FUSEファイルシステムのemulatedがマウントされています。

FUSEはユーザモードで動作するファイルシステムです。メディアファイルに厳格なアクセス制御(誰に許可するか!)を行っています。

FUSEファイルシステムの配下になるのが、/data/media(内部メモリーの一部)であると思われます。

スポンサーリンク

関連記事:

ストレージのリソースは、内部メモリー、外部メモリー、クラウドの3つがあります。 外部メモリーは、主にSDカードです。 このSDカードはAndroid端末の世代が進むにつれて、扱いを変えてきました。 リソースとSDカードを主眼に置いたストレージの変遷について、まとめます。 ※環境:Android Studio Narwhal | 2025.1.1 Patch 1 ...
ストレージはデータの用途別に記憶領域が分けられます。 保存先を守らないと、セキュリティリスクが発生したり、他のアプリと協調した動作が出来なくなったり、します。 ですので、適切な場所へデータを保存しましょう。 今回は「用途別記憶領域とボリューム」について、まとめます。 ※環境:Android Studio Narwhal | 2025.1.1 Patch 1 ...
ストレージへアクセスする方法は、「扱うデータの種類」「アクセス先」「セキュリティの確保」などの要件により、最適なアクセス方法が存在するので、使い分けが必要です。 今回は「アクセスする方法」について、まとめます。 ※環境:Android Studio Narwhal | 2025.1.1 Patch 1 ...
「内部ストレージ」にアクセスする方法について、まとめます。 「内部ストレージ」は、セキュリティが高いうえに、端末の内部メモリーに構築されるので、必ず存在します。 使いたい時に安心して使え、もっとも使い勝手のよいストレージと言えます。 アプリのデータを保存したいならば、保存先として真っ先に考えるストレージです。 ※環境:Android Studio Narwhal | 2025.1.1 Patch 1 ...
スポンサーリンク