17 January 2015

(Android) mount -o rwmount,rw /system で強制再起動を防ぐ

Androidで/systemディレクトリを書き込み可能な状態にするため、次のコマンドで再マウントを行うと、強制リブート(再起動)されてしまう

# mount -o remount,rw /system /system

これは、/sbin/ric (Xperiaの場合) という実行ファイル(デーモン)が常駐して、/systemのマウント状態を監視して、再起動を掛けているとのことだ。

この仕組みを考えたプログラマは、ユーザのことを考えてくれたのか、ricのファイルを/systemではなく、/sbinに置いてくれている。

/sbinが属する / を書き込み可能状態で再マウントして、ric のファイルを削除すれば、問題は解決する。(ただし、システムを再起動すると /sbin/ric が再作成されるので、作業ごとに毎回やる必要がある)

ricを無効化するシェルスクリプト
#!/system/bin/sh
 
# check process ric, if not then exit
if [ -z "$(pgrep -f /sbin/ric)" ]
then
 echo process ric not exist, EXIT SCRIPT
 exit
fi
 
/system/bin/mount -o remount,rw /
[ -f /sbin/ric ] && /system/bin/mv /sbin/ric /sbin/ric.bak
/system/bin/mount -o remount,ro /
/system/bin/stop ric
/system/xbin/pkill -f /sbin/ric
 
echo "ric disabled, SCRIPT DONE."

これで ric デーモンが停止されるので、/system を書き込み可能モードで再マウントできる。