[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:55980] Re: シェルスクリプトについての質問です



質問投稿者の大坪です。
遅い返事で申し訳ありません。
Masakazu Takahashi 様、出沢様、さとうふみやす様、田中様、回答有り難うございます。

> 「cryptsetup luksOpen /dev/sdc1 sdc1」は、LUKS 形式の /dev/sdc1 に対し
> て復号・暗号化して読み書きする論理デバイス /dev/mapper/sdc1 を作る処理
> です。これ自体には、/dev/mapper/sdc1 を /media/* にマウントする機能は
> ありません。
> 
> 自動マウントされるようでしたら、/dev/mapper/sdc1 が作られた後から、別系
> 統の何かがそれを検知してマウントしているのではないかと思います。
> 
> そのため、cryptsetup luksOpen コマンドの終了タイミングとマウントのタイ
> ミングがずれるのではないでしょうか。
> 
> (2) も、その自動マウントする仕組みによって変わると思います。

(1) 前の処理 (/sbin/cryptsetup luksOpen /dev/sdc1 sdc1) が
完全に終わる前に次の処理 (----decide /media/disk-number----) が始まったという私の考えは
誤りです ( -_-)。

(2) 外付けハードディスクのホットプラグデバイス接続は、udev、hald等が行っているのでしょうか ?
(Linuxにおけるudev、hald、lsusbなど http://open-groove.net/linux/linux-udev-hald-lsusb/)
これらからの情報をどのように捉えて外付けデバイスの登録が行われたことを知り、
次の処理を開始すればよいのでしょう ?
trapコマンドを利用してhaldからのsignal等を捉えることができるのでしょうか ?

(3) inotifywaitを使う方法では、
/sbin/cryptsetup luksOpen /dev/sdc1 sdc1

while inotifywait -e create /media/; do
#----decide /media/disk-number----
if [ -e /media/disk/fileExists ]; then
	disk="disk"
elif [ -e /media/disk-1/fileExists ]; then
	disk="disk-1"
elif [ -e /media/disk-2/fileExists ]; then
	disk="disk-2"
elif [ -e /media/disk-3/fileExists ]; then
	disk="disk-3"
elif [ -e /media/disk-4/fileExists ]; then
	disk="disk-4"
else 
	echo "Error !: Can't decide the /media/disk-number."
fi
echo $disk
#----decide /media/disk-number 終り----
done
とすると、/sbin/cryptsetup luksOpen /dev/sdc1 sdc1と
while inotifywait -e create /media/;との間で、既にhalが動作してしまった場合には
キャッチできないように思います。

(3) それにしても、シェルスクリプトで外部コマンドを使うときは注意が必要のようです。
# /sbin/cryptsetup luksOpen /dev/sdc1 sdc1
をシェルで単独コマンドとして実行した時は、/media/内に
新たな disk-number が形成されているので、これをこのまま使えばよいと早合点しました。