autofs
O autofs
é um serviço de montagem automática de sistemas de arquivo locais ou remotos que já vem habilitado por padrão em algumas distro GNU/Linux, como SuSE e Kurumin.
O Slackware possui autofs
, mas não vem habilitado por padrão. Vou demonstrar como habilitar esse serviço.
Observação: todos os procedimentos devem ser executados como superusuário (root).
Inicialização
Os scripts de inicialização no Slackware ficam em
/etc/rc.d/
, mas não há um script pronto para o autofs
.Salve o seguinte código como
/etc/rc.d/rc.autofs
e torne o arquivo executável:#!/bin/bash
DAEMON=/usr/sbin/automount
DELAY=5
localoptions=
getmounts() {
#
# Check for local maps to be loaded
#
#
if [[ -f /etc/auto.master ]]
then
sed -re 's/^#.*$//g; /^\s*$/d' /etc/auto.master | while read dir map options
do
if [[ ! -z "$dir" && ! -z "$map" && x`echo "$map" | cut -c1` != 'x-' ]]
then
map=`echo "/etc/$map" | sed -e 's:^/etc//:/:'`
options=`echo "$options" | sed -e 's/\(^\|[ \t]\)-/\1/g'`
if [[ -x $map ]]
then
echo "$DAEMON -t $DELAY $dir program $map $options $localoptions"
elif [[ -f $map ]]
then
echo "$DAEMON -t $DELAY $dir file $map $options $localoptions"
else
echo "$DAEMON -t $DELAY $dir `basename $map` $options $localoptions"
fi
fi
done
fi
#
# Check for YellowPage maps to be loaded
#
if [[ -e /usr/bin/ypcat && `ypcat -k auto.master 2>/dev/null | wc -l` > 0 ]]
then
ypcat -k auto.master | while read dir map options
do
if [[ ! -z "$dir" && ! -z "$map" && x`echo "$map" | cut -c1` != 'x-' ]]
then
map=`echo "$map" | sed -re 's/^auto_/auto./'`
if echo $options | grep -- '-t' >/dev/null 2>&1
then
mountoptions="--timeout $(echo $options | sed 's/^.*-t\(imeout\)*[ \t]*\([0-9][0-9]*\).*$/\2/g')"
fi
options=`echo "$options" | sed -re 's/--*t(imeout)*[ \t]*[0-9][0-9]*//g; s/^(\s*)-/\1/g'`
echo "$DAEMON $dir yp $map $options $localoptions"
fi
done
fi
}
#
# Status lister.
#
status_autofs() {
echo "Configured Mount Points:"
echo "------------------------"
getmounts
echo
echo "Active Mount Points:"
echo "--------------------"
mount | grep '^automount'
#ps ax | egrep "[0-9]:[0-9]{2} $DAEMON " | while read pid tt stat time command
#do
# echo $command
#done
echo
}
start_autofs() {
# Check if the automounter is already running?
if [[ ! -f /var/lock/subsys/autofs ]]
then
echo 'Starting automounter: '
getmounts | sh
touch /var/lock/subsys/autofs
fi
}
stop_autofs() {
echo 'Stopping automounter: '
kill -TERM $(/sbin/pidof /usr/sbin/automount)
rm -f /var/lock/subsys/autofs
}
reload_autofs() {
if [[ ! -f /var/lock/subsys/autofs ]]
then
echo "Automounter not running"
exit 1
fi
echo "Checking for changes to /etc/auto.master ...."
TMP1=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >&2; exit 1; }
TMP2=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >&2; exit 1; }
getmounts > $TMP1
ps ax | egrep "[0-9]:[0-9]{2} $DAEMON " | while read pid tt stat time command
do
echo "$command" >> $TMP2
if ! grep -q "^$command" $TMP1
then
kill -USR2 $pid
echo "Stop $command"
fi
done
cat $TMP1 | while read x
do
if ! grep -q "^$x" $TMP2
then
$x
echo "Start $x"
fi
done
rm -f $TMP1 $TMP2
}
case "$1" in
start)
start_autofs
;;
stop)
stop_autofs
;;
restart)
stop_autofs
sleep 2
start_autofs
;;
reload)
reload_autofs
;;
force_start)
stop_autofs &>/dev/null
sleep 2
start_autofs
;;
status)
status_autofs
;;
*)
echo "Usage: /etc/rc.d/rc.autofs {start|stop|restart|reload|status}"
exit 1
;;
esac
Execute então o seguinte comando:
echo '[ -x /etc/rc.d/rc.autofs ] && /etc/rc.d/rc.autofs force_start' >> /etc/rc.d/rc.local
Configurações
O principal arquivo de configuração do
autofs
é /etc/auto.master
.Cada linha do arquivo indica um diretório para os pontos de montagem. A primeira coluna é o nome do diretório – que não precisa existir no sistema de arquivos, pois será gerenciado dinamicamente pelo
autofs
– a segunda coluna é o caminho para o arquivo de configuração específico apra gerenciar as montagens nesse diretório e a terceira coluna são as opções.Por exemplo:
/auto /etc/auto.misc --timeout=30
Vai criar o diretório
/auto/
e usar o arquivo /etc/auto.misc
para as configurações, com um timeout de trinta (30) segundos.Digamos que queremos usar o diretório
/auto/
para montar disquete, CD-ROM e USB, e queremos que o autofs
gerencie o /home/
para montar os homedirs remotos via NFS. Usaremos /etc/auto.misc
para o /auto/
e o /etc/auto.home
para configurar o NFS:/auto /etc/auto.misc --timeout=30
/home /etc/auto.home --timeout=30
Configuração dos pontos de montagem de recursos locais
Os pontos de montagem locais estarão em
/auto/
e serão gerenciados pelo arquivo /etc/auto.misc
.Cada linha é um ponto de montagem. A primeira coluna é o nome do ponto de montagem dentro de
/auto/
, a segunda coluna são as opções e a terceira é o dispositivo a ser montado.As opções são as mesmas do comando
mount
. A única exceção é a opção -fstype
, para indicar o sistema de arquivo.Por exemplo, pra montar o disquete em
/auto/floppy/
identificando o sistema de arquivo automaticamente, de modo síncrono, com máscara 0000
e modo 0777
:floppy -fstype=auto,rw,sync,umask=0,mode=0777 :/dev/fd0
Vamos ao arquivo completo: CDROM, disquete e USB (meu USB é reconhecido como
/dev/sda
):cd -fstype=iso9660,exec,ro :/dev/cdrom
floppy -fstype=auto,rw,sync,umask=0,mode=0777 :/dev/fd0
usb -fstype=auto,rw,sync,umask=0,mode=0777 :/dev/sda
Configurações dos pontos de montagem de recursos remotos
Ainda é possível montar diretório remotos via NFS, bastando informar o IP ou nome da máquina antes do nome do dispositivo.
Por exemplo:
remote -fstype=nfs,rw,async,soft,timeo=60,rsize=8192,wsize=8192 192.168.0.2:/shared
Vai montar o diretório exportado
/shared/
de 192.168.0.2 em /auto/remote/
. A opção timeo
tem prioridade sobre a opção timeout
de /etc/auto.master
, alterando seu valor apenas para o ponto de montagem em questão.Para recursos remotos é aconselhável usar blocos maiores que 4KB. No exemplo o bloco é de 8KB.
Mas há uma configuração mais interessante. Digamos que a máquina 192.168.0.2 seja um servidor de usuários e está exportando os homedirs via NFS.
É possível montar somente um ou alguns homedirs de cada vez, não o
/home/
todo. Por exemplo, se o usuário blackstar
logou, pra que montar também o homedir do usuário slack
? Podemos montar apenas o homedir do usuário logado.E o melhor de tudo: o
autofs
faz isso automaticamente!Para tanto o conteúdo de
/etc/auto.home
será:* -fstype=nfs,rw,async,soft,timeo=60,rsize=8192,wsize=8192 192.168.0.2:/home/&
O
/home/&
indica que não será montado o /home/
todo, mas apenas os subdiretórios solicitados. O campo *
na primeira coluna indica que será usado o nome representado por &
.Assim, como
/etc/auto.home
está gerenciando o diretório /home/
, quando o usuário blackstar
se conectar, seu diretório será montado como /home/blackstar/
, vindo de 192.168.0.2, mas não existirá o diretório /home/slack/
– a menos que o usuário slack
conecte.Iniciando o serviço
Basta agora iniciar o serviço:
/etc/rc.d/rc.autofs start
Se tudo correu bem, você poderá ver os pontos de montagem com o comando:
/etc/rc.d/rc.autofs status
Insira um disquete na unidade
/dev/fd0
(A:
) e acesse seu conteúdo sem precisar montá-lo:ls /auto/floppy/
Só um conselho: retire do
fstab
os pontos de montagem usados pelo autofs
. Pode até deixar o fstab
gerenciar os mesmos recursos – eles apenas serão montados também nos pontos de montagem do fstab
–, mas normalmente não faz muito sentido.[]'s
Cacilhas La Batalema