Tentei criar algumas regras do udev para montar e desmontar minhas unidades flash USB; as regras para o momento são muito simples:
ACTION=="add",KERNEL=="sd[b-z]",RUN+="/root/scripts/plug_flash_drive.sh %k"
ACTION=="remove",KERNEL=="sd[b-z]",RUN+="/root/scripts/unplug_flash_drive.sh %k"
O plug_flash_drive.sh também é muito simples:
device_name=$1
mount_options="umask=000,utf8"
if [ ! -e "/media/$device_name" ]; then
mkdir "/media/$device_name"
fi
sleep 1
/usr/bin/mount "/dev/$device_name" "/media/$device_name" -o "$mount_options"
unplug_flash_drive.sh:
device_name=$1
umount "/dev/$device_name"
rmdir "/media/$device_name"
Fiz alguns testes para garantir que:
- Quando conectado, minha unidade flash é detectada; um arquivo é criado em / dev
- O plug_flash_drive.sh é chamado pelo udev
- a parte mkdir do script funciona
- no entanto, parece que a parte "mount" do script não é executada, portanto minha unidade não está montada
- quando eu chamo meus scripts na linha de comando, eles funcionam perfeitamente
Alguém sabe por que mount não é executado quando chamado pelo udev?
EDIT 28/08/14: Adicionei "grep -q / proc / mounts && echo success || falha de eco" no final do meu script para verificar no meu log de depuração se o dispositivo está realmente montado antes do final do script. Parece que o dispositivo está montado nesse ponto, mesmo quando o script é chamado pelo udev. Portanto, o verdadeiro problema agora é "meu dispositivo de bloco parece desmontado após o término do script de montagem quando chamado pelo udev": s
set -xv
e exec >> "$HOME"/mount.log 2>&1
inserindo os .sh
arquivos?
mkdir "$mount_dir"
, masrmdir "/media/$device_name"
? Onde está$mount_dir
definido?