ラズパイ起動後にUSBストレージを挿入したら自動で検知して、マウントする


ヘッドレスなラズパイで、デバイスを抜き差しする時にマウントを自動で行ってみます。

まぁ、使うシチュエーションは限定的だと思いますが….。

データを「小分け」にして持つという発想です。

こんなイメージですかねぇ。

 


マウントとアンマウント用のシェルスクリプト作成

と、その前にマウントするデバイス名を固定しておきます。

通常デバイス名は/dev/sdaとか/dev/sdbと表示されますが、これは起動時に入れ替わる可能性があります。

USBメモリーのようなブロックデバイス名はいつもいっしょというわけではないので、マウントコマンド作成時には考慮します。

ほぼ変動しないUUIDを使います。

UUID(Universally Unique Identifier)確認

デバイスチェックします。

sudo fdisk -l

以下のコマンドでUUIDを確認します。

ls -l /dev/disk/by-uuid/
OR
sudo blkid /dev/sda1

こんな感じです。これは一例ですが、CAB2-5726というのが/dev/sdaのUUIDです。

ここで確認されたUUIDはデバイス名が/dev/sdaであろうと/dev/sdbになろうと同じです。

 

マウント用シェルスクリプトの例

UUIDを使ってマウントします。

CAB2-5726は例です。

uidやgidの値はidコマンドで確認してください。

/var/lib/mod_tile/ajtがマウントポイントだとします。

【mount_usb.sh】

 

パーミッション設定
sudo chmod 777 mount_usb.sh

 

アンマウント用シェルスクリプトの例

【umount_usb.sh】

 

パーミッション設定
sudo chmod 777 umount_usb.sh

 

注:

マウント先のデバイスがexFatでフォーマットされている場合

現在Ubuntuはこのフォーマットをデフォルトでサポートしていません。

以下をインストールしておきます。

 

 


USBストレージの挿入を待ち受けます

Pythonで書くなら、例えばこんな感じのコードです。デバイス管理ツールのudevを使います。

sudo apt-get install python-pyudev

cd ~/

sudo nano usb_monitor.py

【usb_monitor.py】

 

パーミッション設定
sudo chmod 777 /home/tileserver/usb_monitor.py

 


rc.localで起動時に待ち受け用Pythonを起動

sudo nano /etc/rc.local

 

パーミッション設定
sudo chmod 777 /etc/rc.local

 

USBストレージが挿したままなら抜いてから….

おまじない

sudo chmod -R a+x /var/lib/mod_tile

ラズパイを再起動


こういうのが必要になる具体例

OSMタイルサーバーにしたラズパイをWi-Fiのアクセスポイントにしてみる

で、MicroSDを最小構成の16GB版にした場合

で、例えば旅行に行く際にアドホックに地図を使うという前提で

USBメモリーAには東京のタイルデータ、USBメモリーBには大阪のタイルデータ、USBメモリーCには京都のタイルデータを入れとけば旅先でそれぞれの地図が使えます。

そうでなければ、スマホでGoogle Mapsを使うほうが便利です。

 

なんでこんなことをするかというと、例えば、Google Mapsを見て「この地図、見ずらい!もっと見やすい自分だけの地図が欲しい!」という欲望をOpenStreetMapで実現するためですね、まぁそれ以外にもいろいろありますけど(^^)。

シングルボードコンピューターにOpenStreetMapのタイルサーバーを立ててみる

JOSMによる地図データ編集は準備中(変更点の差分をローカルのDBに戻すのは、ちと厄介そうなのでしばしお待ちください)

 


現状アドホックに起動したヘッドレスラズパイをシャットダウンする方法は

端末からSSH接続してシャットダウンコマンドを実行するしかないですが……

 

USBストレージを抜くときにdevice.actionのunbindイベントが検出された際にアンマウントを実行していますが、このタイミングでシャットダウンを実行する手もあります。その際はdevice.get()でID_MODEL_IDやID_SERIAL_IDなどを見て特定のUSBデバイスの場合は…という識別が必要になると思います。

 


USBストレージ接続しても無事起動する場合にUSBストレージを自動マウントしてみる

起動時にマウントする場合、/etc/fstabに以下を記述

UUID=[UUID] [マウント先のディレクトリ] [フォーマット(vfat、ext4等)] defaults,nobootwait 0 0

nobootwaitでポートにストレージが無い場合に途中で起動がストップするのを回避します。

ただし、起動時マウントに失敗する場合もあります。なぜかvfatを認識してくれない。その場合はマニュアルでマウントしてください。

 


 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*