はじめに
「adb shell からSDカードをアンマウントしたい」人ごめんなさい。
このエントリに解決方法は載ってません。ごめんなさい。
SDカードのアンマウントは、[Settings]→[SD card & phone storage]で開かれる『SD Card & phone storage settings』で行える。
(日本語の場合[設定]→[ストレージ]で『ストレージの設定』)
設定画面には以下が並ぶ。
これは AVD Android 2.3.3の場合だけど他のバージョンでも文言が違うだけで大体同じ。

『Unmount SD Card』をタップすれば、しばらくの後にアンマウントされる。

これが一般的なSDカードのアンマウント手順。
これをコマンドライン(adb shell)で行いたい。
adb shellからこんなかんじ。
1 2 | # umount /mnt/sdcard/.android_secure # umount /mnt/sdcard |
先に.android_secureをアンマウントすること。
というか、いきなり/mnt/sdcardをアンマウントしてもfailed。
これでマウントポイント(/mnt/sdcard)の中身は空になるので、アンマウントできたかのように見える。
『SD card & phone storage』を開く。

手動でアンマウントした場合と状態が異なっている。
『Total space』と『Available space』はUnavailableではなく 0byteになっているし、『Mount SD Card』となるべき項目は、『Unmount SD Card』のまま。
実際にストレージがどのような状態になっているのかAPIで調べる。
次のAPIはSDカードの状態を文字列で返す。
1 | String status = Environment.getExternalStorageState(); |
Environment | Android Developers
手動マウント時には、”mounted”つまりEnvironment.MEDIA_UNMOUNTEDとなるが、umountコマンドによる手段だと、”mounted”(Environment.MEDIA_MOUNTED)。
まだマウントされている状態なのかもしれない。
サイズ0のメディアをマウントしている状態のよう。
umountした後に何かしないといけないのかもしれないが。わからない。
おしえてエロい人。

