Montar automaticamente vários sistemas de arquivos stick USB no Jessie Lite

18

Quero poder montar automaticamente pen drives USB fat32 e ntfs formatados em tempo real, como hot-plugging sem reiniciar o meu Raspberry Pi 2. Tenho o ntfs-3g instalado no jessie-lite .

Colocar o UUID fstabnão é uma opção, porque eu precisaria encontrar o UUID de todos os dispositivos. Quero poder conectar diferentes dispositivos USB com diferentes formatos de arquivo e montá-los automaticamente. Isso é possível?

Além disso, eu quase consegui trabalhar com o usbmountprograma. Eu pude acessar minha unidade por um segundo antes de receber o erro transport endpoint is not connected. Reinstalei o programa, mas nunca cheguei a esse ponto novamente, nem mesmo com o erro.

F. Untermoser
fonte

Respostas:

15

Depois de muita pesquisa, eu poderia corrigir o meu problema com o usbmount:

Adicionando NTFS ao usbmount

  1. Instale a montagem usb com sudo apt-get install usbmount.
  2. Instale o pacote de driver NTFS ntfs-3g com sudo apt-get install ntfs-3g.

  3. Configure usbmount para montar sistemas de arquivos especificados, abrindo o arquivo usbmount com sudo nano /etc/usbmount/usbmount.conf.

Aqui há uma linha chamada FILESYSTEMS="". Somente os sistemas de arquivos especificados nesta linha são montados via usbmount, portanto, alteramos para:FILESYSTEMS="vfat ntfs fuseblk ext2 ext3 ext4 hfsplus"

Se você deseja que o usbmount monte sistemas de arquivos NTFS, adicione ntfs e fuseblk à linha. Às vezes, os dispositivos NTFS são listados como fusblk pelo pacote ntfs-3g; portanto, esses dois são iguais. Eu realmente não sei porque.

Além disso, se você não adicionar fuseblk na configuração, os Dispositivos NTFS desconectados não serão desmontados automaticamente. Eles permanecerão montados e manterão a pasta na qual estão montados até que o dispositivo seja manualmente desmontado unmount /dev/sda1 -> onde sda1 poderia ser outra variável .

A próxima linha importante é FS_MOUNTOPTIONS="". Aqui você especifica quais sistemas de arquivos devem ser montados e como eles devem ser montados.

Nós mudamos para: FS_MOUNTOPTIONS="-fstype=ntfs-3g,nls=utf8,umask=007,gid=46 -fstype=fuseblk,nls=utf8,umask=007,gid=46 -fstype=vfat,gid=1000,uid=1000,umask=007"

Com isso, os sistemas de arquivos vfat (fat32) ntfs-3g (NTFS) e fuseblk (NTFS novamente) são montados. Eu acho que a maioria dos parâmetros pode permanecer a mesma. Novamente aqui, basta adicionar ntfs-3g ( adicionar ntfs-3g e não ntfs ) e fuseblk para poder montar todos os arquivos NTFS. Para mais sistemas de arquivos, adicione mais linhas começando com -fstype=.

Mantenha o NTFS montado até que o dispositivo esteja desconectado

Aqui está uma solução para o problema, quando a unidade NTFS montada estiver acessível apenas por alguns segundos. Essa correção vem de Christian Weinberger .

  1. Crie o arquivo usbmount.rules em /etc/udev/rules.d/ com sudo nano /etc/udev/rules.d/usbmount.rules.

Este é o conteúdo:

KERNEL=="sd*", DRIVERS=="sbp2",         ACTION=="add",  PROGRAM="/bin/systemd-escape -p [email protected] $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p [email protected] $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="ub*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p [email protected] $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
KERNEL=="ub*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
  1. Crie o arquivo usbmount @ .service em / etc / systemd / system / com sudo nano /etc/systemd/system/[email protected].

Este é o conteúdo:

[Unit]
BindTo=%i.device
After=%i.device

[Service]
Type=oneshot
TimeoutStartSec=0
Environment=DEVNAME=%I
ExecStart=/usr/share/usbmount/usbmount add
RemainAfterExit=yes

Agora reinicie e verifique cat /etc/mtabem qual pasta os dispositivos USB estão montados. Por padrão, eles são montados em / media / usbstick0 .

Fonte:

Christian Fix

Por que fusblk?

F. Untermoser
fonte
Esta solução precisa de mais algumas etapas, veja minha resposta.
AbiusX
2

A resposta do Untermoser está correta, mas quebrará algumas das funcionalidades da montagem por usb.

Como ele está usando unidades Systemd para gerar processos para montar (para habilitar o NTFS), a variável de ambiente $DEVPATHnão é mais enviada ao usbmount addcomando, resultando na falha na criação do link simbólico.

Para corrigir isso, execute o seguinte:

sed -i '/# Determine vendor/,/if/ s/\(.*vendor=\)/if [ -z "$DEVPATH" ]; then DEVPATH="$(udevadm info --query=path --name=\/$DEVNAME)"; fi\n\1/g' /usr/share/usbmount/usbmount

O comando acima recria $DEVPATHse não estiver disponível.

Há também outro bug no usbmount, com relação a usbmount remove. Ele faz um loop sobre os pontos de montagem e o que é definido em usmount config é desmontado. No entanto, se uma correspondência for encontrada, mas não estiver nessa lista, remova as quebras e não faça nada. Isso é particularmente crucial se você criar vários pontos de montagem para um USB, porque o usbmount vê o primeiro e não faz nada.

Para corrigir, é necessária a seguinte alteração:

sed -i '/umount.d ||/,/break/ s/break.*//; /umount.d ||/,/done/ s/:/:\n\t\tbreak 2/' /usr/share/usbmount/usbmount

Isso moverá a interrupção dentro do loop interno (onde o sucesso é garantido e ocorrerá 2 etapas).

AbiusX
fonte
1

Para aqueles que estão tentando fazer o mesmo com o Stretch (Lite) mais recente e descobrem que as respostas da Untermoser e da AlbiusX não desmontam unidades vfat, você precisará seguir estas etapas extras, além das respostas fornecidas. :

Execute o seguinte comando no terminal:

sudo mkdir -p /etc/systemd/system/systemd-udevd.service.d/

Isso criará as pastas necessárias necessárias. Em seguida, crie um arquivo conf aqui, por exemplo:

sudo nano /etc/systemd/system/systemd-udevd.service.d/shared-mount-ns.conf

Dentro deste arquivo, adicione as seguintes linhas:

[Service] MountFlags=shared

Isso mudará o comportamento padrão do systemd-udevd dos espaços de nomes privados do sistema de arquivos para usar os compartilhados, o que é equivalente ao comportamento do udev em jessie.

(Fornecido em /unix/330094/udev-rule-to-mount-disk-does-not-work/330156#330156 )

Nacsiar
fonte
Então esse era o problema o tempo todo - eu estava procurando documentos desatualizados. Estou executando Linux raspberrypi 4.14.79-v7+no Pi, para referência
ctietze