A montagem automática de drives USB em uma caixa linux systemd sem cabeçote?

3

As abordagens para dispositivos de montagem automática no Linux continuam mudando, e o googling retorna algumas soluções com vários graus de aplicabilidade para caixas modernas baseadas em systemd.

As seguintes abordagens parecem existir:

  1. modificando /etc/fstab para adicionar montagens por unidade pelo UUID.
  2. udev rules (aparentemente 'regras brutas' podem entrar em conflito com as políticas systemd existentes)
  3. udisks2 sendo executado como um serviço systemd ou via udiskie
  4. udevil
  5. usbmount
  6. automontagem fornecida pelos ambientes de desktop, ou seja, no XFCE via thunar + thunar-volman packages, ou nautilus automount no Gnome com o pacote gnome-volume-manager (aparentemente eles dependem de udisks ).
  7. autofs automovel do kernel
  8. systemd automounting, exemplo de uso: automount-usb

Como sempre acontece com o Linux, a escolha é um pouco avassaladora e não está claro qual é a abordagem recomendada atualmente. Além disso, parece que diferentes subsistemas de montagem automática podem entrar em conflito entre si, levando a situações em que uma partição é montada por uma ferramenta e, em questão de segundos, é desmontada automaticamente por outra ferramenta.

Para sistemas com ambiente de área de trabalho, é simples, pois a maioria deles é compatível com montagem USB automaticamente, portanto, nenhuma ação extra é necessária, além de ativar a opção de automontagem nas configurações.

Qual seria a abordagem atual para um sistema sem cabeça que opera principalmente em modo texto?

Atualizar

Depois de brincar com todas as opções, encontrei usbmount para funcionar depois que eu editei /lib/systemd/system/systemd-udevd.service e alterou MountFlags=slave para MountFlags=shared conforme descrito em este problema . Não há necessidade de adicionar manualmente quaisquer UUIDs ou rótulos a qualquer arquivo de configuração. A desvantagem é que ele cria os pontos de montagem em /media/usbN , o que não é perfeito, então eu mudei para automount-usb que foi surpreendentemente fácil de configurar (acabou de executar o script configure.sh ) e que cria pastas de montagem como /media/<device>_<disk_label> eg como /media/sda2_mylabel .

Links relevantes:

por ccpizza 04.11.2017 / 12:38

2 respostas

1

As entradas em /etc/fstab ainda devem ser aceitas em um sistema baseado em systemd.

Uma unidade .mount pode ser usada no lugar e deve ser considerada equivalente a uma entrada no fstab.

Uma unidade autônoma pode ser usada se a montagem não for necessária na inicialização ou permanentemente; O systemd irá desmontá-lo após um período ocioso dado no arquivo de unidade ter passado.

Veja as páginas systemd.mount(5) e systemd.automount(5) man para detalhes.

    
por 04.11.2017 / 12:49
1

it is not clear which is the current 'officially' supported approach.

Oficialmente apoiado por quem? Se, e. O GNOME inclui funcionalidade de automontagem baseada em udisks, você pode ter certeza que é oficialmente suportado pelo GNOME.

I am more interested in the second (i.e. whatever USB storage device), since for the first I can just add the entries to /etc/fstab.

Não há "maneira padrão" para fazer isso. Na melhor das hipóteses, a maioria dos sistemas existentes decidiu adicionar automação em cima de udisks2 . Por si próprio, o udisks não monta de forma alguma nada - mas é o "backend" usado por muitos ambientes de desktop gráficos (pelo menos o GNOME e o Xfce o usam; tenho apenas 80% de certeza sobre KDE e Enlightenment).

(Então sua opção 3 seria "udisks2 + automount by udiskie", e a opção 4 seria "udisks2 + automount pelo ambiente de desktop".)

Em relação às regras do udev: seja sobre montar sistemas de arquivos ou iniciar serviços, a resposta curta é "não faça" (por várias razões); mas a resposta longa é: "não faça isso diretamente, mas você pode pedir ao init para fazê-lo". Portanto, não seria horrível executar systemd-mount a partir de uma regra do udev, que passaria o pedido de montagem para o init da mesma forma que uma unidade .mount ...

No entanto, espere que isso acione um bug / wart / má-funcionalidade do systemd: como o udev relata que o dispositivo está pronto somente após processar as regras, você pode acabar com o init automaticamente desmontando o disco porque acha que o dispositivo ainda não está lá.

Em vez disso, o udevil funcionaria melhor, já que ele não executa nada por meio de regras, mas reage apenas a eventos "dispositivo pronto" emitidos pelo udev.

As entradas do fstab são orientadas para dispositivos estáticos. No entanto, eles podem ser maltratados por varas USB variadas usando /dev/disk/by-path/... , que corresponde ao caminho físico de um dispositivo (por exemplo, slot PCI 3, porta USB 1, partição 1 ...). Dessa forma, você pode escrever entrada fstab que corresponde a qualquer disco conectado à mesma porta USB.

O automounter autofs kernel é, da mesma forma que os udisks, apenas o backend no qual várias automontes podem ser implementadas pelo userspace. Uma vez montada uma autofs, todas as tentativas para acessá-lo são relatados para o daemon correspondente. As implementações mais comuns são o autofs tradicional (baseado em mapas) e, recentemente, systemd com as unidades .automount.

Assim, a lógica do dispositivo USB "dinâmico" ainda teria que ser implementada no espaço do usuário, e de qualquer maneira é mais trabalho do que apenas usar os udisks.

  • Com o systemd simples, sua única opção é construir sobre o hack "by-path" fstab acima. Depois de escrever uma entrada fstab para a porta USB desejada, você pode marcá-la com x-systemd.automount,x-systemd.idle-timeout=300 para usar o montador automático autofs. (Ou, claro, crie unidades independentes .mount + .automount para o mesmo resultado.)

    Se você quiser gerar dinamicamente montagens automáticas para todos os discos USB em todas as portas, o systemd não poderá fazer isso sem scripts de terceiros.

  • Eu não sei se autofsd pode fazer o que você quer, mas lembro que ele suporta alguns tipos de mapas dinâmicos (para diretórios de usuário). Talvez o uso do program map-type (e de um script que enumera todos os discos conectados) funcione.

por 04.11.2017 / 14:15