Montagem de discos USB automaticamente (como funciona)

12

Background: Estou tentando montar um disco USB como somente leitura, mas minha instalação do ubuntu está montando rw quando eu conecto o disco.

Posso desmontar o disco manualmente e remontá-lo manualmente como somente leitura com os comandos umount e mount, mas isso não é divertido. Alguém poderia me dar uma explicação rápida sobre como exatamente as montagens USB são feitas automaticamente em um sistema Linux típico (o histórico do udev? É bom também) e talvez como eu possa ajustar esse processo para que eu leia o disco ro?

Obrigado.

Edit: Estou usando o gnome, se isso ajuda em tudo.
Edit2: Na minha pressa, esqueci de fornecer um pouco mais de informação. É assim que o disco se parece com a saída de 'mount'.

/dev/sdb1 on /media/LaCie type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

Edit3: Isso também pode ser relevante à sua maneira. Na saída de montagem, também tenho o seguinte:

gvfs-fuse-daemon on /home/fletcher/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=fletcher)  

Eu pensei que isso poderia estar relacionado à montagem fuseblk acima, mas o que eu descobri foi isso.

Gvfs é o sistema de arquivos virtual do Gnome. É um sistema de arquivos virtual construído sobre os vfs do kernel já existentes. O gvfs usa a biblioteca GIO (que é uma API VFS) para acessar arquivos, dispositivos, locais de rede remota etc. Nesse caso acima ('gvfs-fuse-daemon'), o gvfs está usando o FUSE para montar arquivos / locais / dispositivos. Isso é basicamente o que acontece quando você monta uma conexão de rede remota no Nautilus. Ele usará o FUSE para montar o local (dentro?) Do diretório .gvfs e depois se comunicará com a camada do sistema de arquivos virtual do gnome para se comunicar com a nova montagem.

Basicamente, essa estrutura permite ao usuário montar dinamicamente novos locais e interagir com eles através do nautilus.

Apenas para referência: o FUSE é um sistema de arquivos do espaço do usuário, ou seja, ele permite que o usuário execute o mount mesmo quando esse usuário não é root)

Então, onde isso me deixa? Bem, o disco LaCie está sendo montado com o tipo fuseblk. Este é apenas um dispositivo de bloco montado com fusível. Portanto, alguns daemon detectaram automaticamente a unidade quando ela foi conectada e foram adiante e executaram o fusível para montar meu dispositivo de bloco. Então, que daemon é esse e como ele é configurado (acho que é uma coisa interna do gnomo) é a questão mais importante. Uma questão secundária é como o sistema detectou automaticamente um disco USB recém-inserido, mas acho que isso é um nível secundário e muito mais baixo aqui (leia-se: udev?).

Ligações:

fthinker
fonte
existe uma entrada fstab para o sistema de arquivos / media / LaCie e / ou o dispositivo / dev / sdb1? O / dev / sdb1 está rotulado de qualquer maneira (rótulo e2 / dev / sdb1)?
Tok
Não, não há entrada fstab. Creio que está etiquetado à medida que é montado em / media / LaCie. Eu precisaria instalar o ntfslabel para descobrir, mas estou prestes a sair do trabalho. Também aparece no meu desktop como LaCie.
fthinker

Respostas:

3

Eu tentei fazer isso no meu computador e é trabalho :)

Primeiro, recebo um nome para o meu dispositivo:

ls -l /proc/disk/by-id/

No meu caso, é / proc / disk / by-id / usb-09a6_8001

Eu adicionei esta linha no / etc / fstab:

/dev/disk/by-id/usb-09a6_8001   /media/macle ext2 ro,users 0 2

E está funcionando, quando conecto minha usbkey, ele é montado no ro e pertence ao meu usuário.

profy
fonte
Obrigado profy :) Mas o principal impulso da minha pergunta é aliviar a extrema frustração que sinto toda vez que sou forçado a entender como os dispositivos automount e usb funcionam. Estou aqui para decifrar a mágica que está por trás desses sistemas complexos. Além disso, o uso de dispositivos USB e fstab é um pouco complicado, porque nem sempre é garantido que eles sejam conectados na inicialização!
fthinker
1
Não sei como isso funciona, mas tenho certeza de que novos dispositivos são detectados pelas regras do udev, consulte /etc/udev/rules.d/ e /lib/udev/rules.d/.
profy
2

Como disse Ulrich Dangel, os udiscos devem ser a referência hoje em dia. Ainda estou para ver como ele é notificado (udev-> dbus-> udisks?), Mas manualmente ele pode ser usado para montar um dispositivo com as opções necessárias.

O Udisks conversa com o polkit para ver o que um usuário pode fazer com os volumes. Eu estou supondo aqui, mas se pudéssemos encontrar um lugar para definir propriedades para um disco / dispositivo nomeado, ele deveria funcionar.

Usando o udisksctl, seu usuário deve poder montar o dispositivo com as opções necessárias, algo como isto:

udisksctl mount -b / dev / sdxy -o ro / mountpoint

No entanto, não sei onde colocar as opções.

ATUALIZAÇÃO: Seguindo as sugestões de Ulrich, fui ao utilitário de disco do Gnome e consegui o que você precisa, mas não tenho certeza se é a solução mais elegante ou não. Estou usando o Kororaa 17 (baseado no Fedora 17) com Cinnamon + Gnome3, fui para o utilitário "Disks" e modifiquei as opções de montagem para o meu drive USB, adicionei "ro" e salvei.

Ele adiciona uma entrada ao fstab (é aí que eu não a vejo como uma solução elegante, acho que deve permanecer como uma configuração do usuário que não seja o sistema inteiro), conecto a unidade e ela é montada automaticamente no ponto de montagem selecionado com opções Salvei no utilitário de discos do Gnome.

triplicar
fonte
O que você quer dizer com isso para ver como é notificado? Que passo está faltando?
Ulrich Dangel
E não é udev→dbus→udiskmasudev/uevent→udisk→dbus
Ulrich Dangel
Eu quis dizer que não tinha muita certeza e queria verificar, mas agora vejo que não estava 100% errado.
Triplicou
[strike] Por favor, mostre a linha que foi adicionada ao fstab. Gostaria de confirmar o que acho que é. [/ Strike] Então a linha fstab corresponde à da resposta de @ profy? ou seja, com a roopção
Invert1 de
-1

No tópico de como o kernel detecta o hardware, aqui está um artigo muito interessante sobre o que acontece .

Em suma:

  • o kernel verifica constantemente os barramentos do seu PC e mapeia os dispositivos para o sistema de arquivos virtual, normalmente em /sys/.
  • o kernel envia uma mensagem de que novo hardware está disponível para o udev, que:
    • processar regras do udev no dispositivo
    • ligar o dispositivo em /dev/
    • carregar drivers de dispositivo
    • notificar o espaço do usuário do dispositivo via dbus

Nesse ponto, o dispositivo está pronto para ser usado pelo espaço do usuário. Gvfs e FUSE são sistemas de arquivos do espaço do usuário.

invertido
fonte
Não, udevnormalmente não notifica aplicativos por meio de aplicativos dbusde terceiros. Se você usar qdbus --system, não verá nenhum nome do udev. Normalmente applicaitons apenas subscreve themself para ueventsou enviar suas próprias regras
Ulrich Dangel
Obrigado por apontar isso para @ulrich. Meu resumo fornece um esboço muito básico, excluindo muitas etapas intermediárias. Consulte o artigo vinculado para obter detalhes mais detalhados.
Invert
2
o artigo também é falso como normalmente não há votação envolvidos para monitorar os ônibus
Ulrich Dangel