課題
ディスク容量の少ない Chromebook で Crouton を使っていると、外部のストレージにデータやコマンドを置きたいと思うようになります。
その際、下記の問題が出る場合があります。
- ChromeOS は、/media/removable にマウントするストレージに noexec オプションを付ける
- executable bit がついたバイナリ/スクリプトを実行できない
- スリープ時に /media/removable に接続されたディスクのアンマウントを試み、給電を中止する Chromebook がある
- アンマウント対象のファイルシステムを握っているプロセスがあると、アンマウントされないまま給電が止まる
後者は DELL Chromebook11 でのみ確認していますが、おそらく他機種でも該当するのではと思っています。
前者は単に実行できないだけなのですが、後者はファイルシステム破損に直結しますので看過できません。
解法
上記2点を解決するスクリプトは、下記のとおりです。
# !/bin/bash
dev=$(/sbin/blkid -L "Ext3")
echo $dev
path_raw=$(udevadm info --query=path $dev)
path_trunc=`echo "$path_raw" | perl -pe 's|(.*usb[0-9]\/(.*?\/)).*|\1|'`
path="/sys$path_trunc/power/persist"
echo 1 | sudo tee "$path"
sudo mount -oremount,exec $dev
"Ext3" は、スリープ時でも電源を落としたくないファイルシステムのディスクラベルを指定します。"UNTITLED" などお手持ちの環境に合わせて変更してください。
スクリプト内部で sudo を呼んでいるので、パスワードを問われます。
注意事項
私は Crouton に入ってから上記スクリプトを実行しています。ChromeOS/ChromiumOS 単体で動作するかの確認はしていません。