Aqui está como eu fiz recentemente, e estou muito feliz com essa abordagem agora.
Isso é para o Ubuntu 12.04 + Gentoo, mas acho que qualquer distro, que permita instalar o udev e o autofs, deve funcionar.
Pré-requisitos: Você precisa ter instalado o udev + autofs.
Etapa 1)
Crie o seguinte arquivo "/etc/udev/rules.d/90-usbsd-auto.rules" (é claro que você pode usar qualquer nome contanto que ele termine com ".rules"). :
# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9]
# for automounter support
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", \
SYMLINK+="usbdisks/%k", MODE:="0660", \
RUN+="/bin/rm /media/usb/%k", \
RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"
# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", \
SYMLINK+="usbdisks/%k", MODE:="0660"
# When device is removed, also remove /media/usb/<...>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", \
RUN+="/bin/rm /media/usb/%k"
O que isso faz: Ele cria dois links simbólicos, um para a partição do dispositivo de armazenamento USB em "/ dev / usbdisks / < ... >".
O segundo link simbólico será vinculado a partir de "/media/usb/<...>" para "/media/autousb/<...>" isso é feito para o suporte do automounter (consulte a etapa 2).
Para garantir que o udev leia essas regras, use
sudo udevadm control --reload-rules
Nota: Mesmo nome para o mesmo pendrive: Possível, mas talvez perigoso: você pode usar, por exemplo, "$ env {ID_FS_LABEL_ENC}", em vez de "% k" nas regras UDEV acima. Isso usará o rótulo de volume para criar /media/usb/<...gg ;, mas o que acontece se você conectar dois pen drives e ambos usarem o mesmo rótulo de volume ...
Com este arquivo de regras do udev, tudo é configurado para automontar a partição do dispositivo de armazenamento USB. Note que, neste momento, o dispositivo NÃO será montado automaticamente (intencionalmente). Ela será montada automaticamente assim que você a usar com
Etapa 2)
Configure o autofs para automount /media/autousb/<...> :
Eu adicionei a seguinte linha ao meu arquivo "/etc/auto.master" (para o Ubuntu 12.04):
/media/autousb /etc/auto.usb --timeout=60
Isso significa que o AutoFS desmontará o dispositivo após 60 segundos de inatividade. Você pode querer usar menos ou mais, dependendo do seu gosto.
Para o Gentoo você tem que modificar o "/etc/autofs/auto.master" então faz sentido usar
/media/autousb /etc/autofs/auto.usb --timeout=60
Agora criei "auto.usb" com o seguinte conteúdo:
#!/bin/bash
key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
exit 0
fi
exit 1
Este auto.usb precisa ser executável, para que o autofs use isso como um script (bash). Então, por exemplo
sudo chmod 0755 /etc/auto.usb
O que isso faz: Esse script dirá ao AutoFS (/ usr / sbin / automount) como montar a partição do dispositivo de armazenamento usb.
O script primeiro usará "/ sbin / blkid" para descobrir que tipo de sistema de arquivos está na partição.
O script fornecerá as opções corretas de montagem, dependendo da partição do dispositivo.
Nota: incluí código de amostra para sistemas de arquivos "vfat" (provavelmente mais comuns para sticks USB), "ntfs" e "ext4". É claro que é muito fácil estender isso para suportar mais sistemas de arquivos.
Etapa 3)
Opcional ...
Para "ejetar" == desmontar seu stick (s) USB (ou partições no seu pendrive), crie um script em / sbin / usbeject:
#!/bin/bash
# make sure everything is written to USB disk(s)
sync
# sending SIUGSR1 to automount will unmount the media
killall -s SIGUSR1 /usr/sbin/automount
Com esse script, você pode usar "sudo usbeject" para desmontar todas as partições de dispositivos USB montados (informando o automount para desmontá-las).
É claro que você pode simplesmente ter certeza de que a partição não é usada em nenhum lugar; O automounter desmontará a partição após o tempo limite de 60 segundos ...
O verdadeiro truque aqui é usar links simbólicos de "/ media / usb" para "/ media / autousb":
- Os links simbólicos "/ media / usb" serão criados pelo udev, oferecendo ao usuário uma visão geral simples de quais partições de dispositivos de armazenamento usb estão lá
- O AutoFS, em seguida, monta automaticamente a partição sob demanda, se você a usar via / media / usb
- Com o arquivo "auto.usb" com script, você pode suportar qualquer tipo de sistema de arquivos e, além disso, também é capaz de suportar qualquer tipo de esquema de nomenclatura.
- Essa abordagem suporta pen drives USB com várias partições, mesmo se essas partições usarem diferentes tipos de sistemas de arquivos.