山田 徹
ホーム

読み込み中です。

読み込み中です。

はじめに

 GooglePlay上にはAndroid上でLinuxを立ち上げるアプリが多数ある。 例えば、TermuxやUserLAndなどだ。 Linuxで遊ぶ程度なら問題ないが、Android上で立ち上げているのでアプリケーションなどで大量のファイルを管理したり処理したりすると、容量や内蔵メモリの寿命が気になる。 大抵のアプリケーションは内蔵メモリを使用するので、寿命や容量のことを考えると外部ストレージ(MicroSD)を使用したいところである。 ここでは、TermuxやUserLAndなどでSDカードにアクセスする方法を紹介する。

fat32の制限

 sdカードに保存できるファイルの種類は、4GB制限サイズ以下であり、実行権限がついていないものとなる。 つまり、実行権限がついたファイルやfat32の制限サイズより大きいファイルは保存することができない。 それらのファイルは内蔵メモリに保存するしかない。

方法

 まず、sdカードのマウントされている場所を調べる。TermuxやUserLAndで

df -h

 のようにdfコマンドで調べることができる。 機種によって違いはあるが、私の環境では/storage/A1B2-C3D4にマウントされていた。 ls /storageで調べたり、dfコマンドでsdカードのサイズなどからマウントポイントを推測する。 マウントポイントを見つけたら、早速ファイルを生成してみよう。

$ cd /storage/A1B2-C3D4  #マウントポイントは例
$ mkdir hoge
mkdir: can't create directory 'hoge': Permission denied  #ディレクトリ作成 不可
$ echo "HelloWorld" > hoge.txt
bash: hoge.txt: Permission denied  #書き込み 不可
$ cat test.txt  #予めファイルマネージャで作成したファイル
Hello World.  #読み込みは可能
$ 

 どうなるだろうか。多分大半の人がディレクトリやファイルの作成に失敗すると思う。
ちなみに、fireタブレットでは作成できた。一部できる機種もあるようだが、私の環境(Android 7.0)では作成できなかった。
 microSDではRead onlyになっている。したがって、読み込みはできるが、書き込むことはできない。

書き込むには

 microSDに自由に書き込むことはできないが、一部書き込みが可能なフォルダがある。 それはmicroSDにあるAndroidフォルダのアプリフォルダである。 microSDのAndroidフォルダのアプリケーションID(パッケージ名)の名前のフォルダ内ではアクセスが可能である。 今回はファイル保存のため、Android/media/アプリケーションIDにアクセスする。 TermuxのアプリケーションIDは"com.termux"、UserLAndのアプリケーションIDは"teck.ula"である。 今回はアクセスにTermuxを使うため、Android/media/com.termuxフォルダを作成する。 TermuxやUserLAndで生成はできない(Permission denied)ので、生成のときだけESファイルマネージャーやYahoo!ファイルマネージャなどを使ってフォルダを作成する。

$ cd /storage/A1B2-C3D4 #マウントポイントは例
$ ls
Android  LOST.DIR
$ cd Android  #Androidフォルダに移動
$ ls
data  media obb
$ cd media  #mediaフォルダに移動 無かったらESファイルマネージャなどで作成しておく
$ ls
com.termux  #ESファイルマネージャなどで作成しておく
$ mkdir hoge
$ ls
hoge  #フォルダの作成ができた
$ echo "HelloWorld" > hoge.txt
$ cat hoge.txt
HelloWorld  #ファイルの作成ができた
$ ls -all
total 128
drwxr-x---    3 user     everybod     32768 Jun  1 00:00 .
drwxr-x---    4 root     everybod     32768 Jun  1 00:00 ..
drwxr-x---    2 user     everybod     32768 Jun  1 00:05 hoge
-rwxr-x---    1 user     everybod        11 Jun  1 00:07 hoge.txt
$ chmod 777 hoge.txt  #実行権限を付与する
$ ls -all  #付与できたかな?
total 128
drwxr-x---    3 user     everybod     32768 Jun  1 00:00 .
drwxr-x---    4 root     everybod     32768 Jun  1 00:00 ..
drwxr-x---    2 user     everybod     32768 Jun  1 00:05 hoge
-rwxr-x---    1 user     everybod        11 Jun  1 00:07 hoge.txt  #変化なし
$

 以上のようにすればSDカードにファイルやディレクトリの作成ができる。 しかし、chmod 777を実行してもエラーは発生しないが、実行権限は付与されない。 したがって、実行可能ファイルは作成不可能である。

さいごに

 以上の方法を使用すれば本体内蔵のメモリに影響なく計算結果を保存したりデータを解析したりすることができる。 まあ、スマホでSDカードを使用してまで負荷のある計算を行うぐらいだったらラズベリーパイなどでHDDに記録したほうが安全なような気がするが...。 スマホで計算は排熱などの問題があるが、Termuxなどで写真などをtarでバックアップなどを行う場合に重宝される方法なのではないだろうか。 AndroidでLinuxライフを楽しんでほしい。

 Termux開発者様やUserLAnd開発者様に感謝。

雑感

 内蔵メモリもNAND型のフラッシュメモリなのでは? しかし、「内蔵メモリを酷使しすぎて書き込めなくなった」って人を見たことないなぁ。 要らなくなったスマホで内蔵メモリに書き込み続けてどうなるか検証してみようかなぁ...。

 あ、そうだ。今日は令和元年、元日?ですね。令和の時代もよろしくお願いします。