Houve alguns problemas que tive que corrigir. Em primeiro lugar, for block in $(...)
resultou em 4 linhas de dados, não no único. A linha também era extremamente mesquinha sobre como eu adicionei a variável, e pularia se não fosse perfeita. Ao obter o BLK e o UUID, é importante observar que '
do apóstrofo não lê variáveis.
#!/bin/sh
echo "New Drive Detected" >> /plex/log.txt
echo "\tLABEL: ${ID_SERIAL_SHORT}" >> /plex/log.txt
echo "\tNAME: ${DEVNAME}" >> /plex/log.txt
#fixed to collect output line, instead of arguments
for block in "$( blkid -t TYPE=ntfs | grep ${DEVNAME} )";
do
echo "\tPartition Found: $block" >> /plex/log.txt
BLK=$(echo "$block" | sed -rn 's/^(\/dev\/sd[a-z][0-9]):.*\bUUID\b[=]["]([^"]*)["].*$//p')
UUID=$(echo "$block" | sed -rn 's/^(\/dev\/sd[a-z][0-9]):.*\bUUID\b[=]["]([^"]*)["].*$//p')
echo "\tMounting Point: $BLK > /media/$UUID" >> /plex/log.txt
mkdir -p "/media/$UUID"
#repair in case of exclusivity
#ntfsfix "$BLK"
mount -t ntfs-3g -U "$UUID" "/media/$UUID"
if [ -d "/media/$UUID/movies" ]; then
echo "\tMovie Directory Found" >> /plex/log.txt
mkdir -p "/plex/movies"
ln -s "/media/$UUID/movies" "/plex/movies/$UUID"
fi
if [ -d "/media/$UUID/tvseries" ]; then
echo "\tTV Directory Found" >> /plex/log.txt
mkdir -p "/plex/tvseries"
ln -s "/media/$UUID/tvseries" "/plex/tvseries/$UUID"
fi
if [ -d "/media/$UUID/anime" ]; then
echo "\tAnime Directory Found" >> /plex/log.txt
mkdir -p "/plex/anime"
ln -s "/media/$UUID/anime" "/plex/anime/$UUID"
fi
if [ -d "/media/$UUID/music" ]; then
echo "\tMusic Directory Found" >> /plex/log.txt
mkdir -p "/plex/music"
ln -s "/media/$UUID/music" "/plex/music/$UUID"
fi
if [ -d "/media/$UUID/audiobooks" ]; then
echo "\tAudio Book Directory Found" >> /plex/log.txt
mkdir -p "/plex/audiobooks"
ln -s "/media/$UUID/audiobooks" "/plex/audiobooks/$UUID"
fi
done
Esse script funciona desde que a unidade não tenha o sinalizador "protegido pelo Windows", corrigido por NTFSFIX "$BLK"
, mas não importa o quanto eu tente, não consigo corrigi-lo de forma síncrona com a atividade do script ( novo problema eu vou ter que pesquisar). Eu confirmei que é executado, mas a montagem subseqüente parece ser executada antes de terminar. Eu suponho isso porque eu tenho que primeiro desmontar a unidade, em seguida, execute o NTFSFIX e monte novamente a unidade. Eu também encontrei um problema menor com a unidade não desmontar automaticamente, e iria remontar com uma nova letra de unidade a cada vez subseqüente. Isso foi resolvido por outro script com outro argumento UDEV:
UDEV: /etc/udev/rules.d/sata-rackmount.rules
ACTION=="add", KERNEL=="sd?", RUN+="/plex/new_drive.sh"
ACTION=="remove", KERNEL=="sd??", RUN+="/plex/rem_drive.sh"
/plex/rem_drive.sh
#!/bin/sh
echo "Drive Lost" >> /plex/log.txt
echo "\tLABEL: ${ID_SERIAL_SHORT}" >> /plex/log.txt
echo "\tNAME: ${DEVNAME}" >> /plex/log.txt
echo "\tDismounting..." >> /plex/log.txt
umount "${DEVNAME}"
echo "\tDone!" >> /plex/log.txt