Montando discos USB automaticamente (como funciona)

12

Antecedentes: Eu estou tentando montar um disco usb como somente leitura, mas minha instalação do ubuntu está montando rw quando eu conecto o disco.

Eu 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 de como exatamente as montagens usb são feitas automaticamente em um sistema linux típico (o histórico do udev também é legal) e talvez como eu posso ajustar esse processo para me permitir ler o disco?

Obrigado.

Edit: Eu estou usando o gnome, se isso ajuda em tudo.
Edit2: Na minha pressa eu esqueci de fornecer um pouco mais de informação. É assim que o disco se parece com a saída do '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 ter sido relacionado à montagem do 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 o kernel vfs já existente. gvfs usa a biblioteca GIO (que é uma API VFS) para acessar arquivos, dispositivos, locais de rede remota, etc. Neste caso acima ('gvfs-fuse-daemon') o gvfs está usando o FUSE para montar arquivos / locais / dispositivos. Isso é essencialmente 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, em seguida, ele se comunicará com a camada do sistema de arquivos virtual do gnome para se comunicar com a nova montagem.

Basicamente, essa estrutura permite que o usuário monte dinamicamente novos locais e interaja com eles por meio do nautilus.

Apenas para referência: O FUSE é um sistema de arquivos userspace, também conhecido por permitir que o usuário execute a montagem mesmo quando esse usuário não é root

Então onde é que isso me deixa? Bem, o disco LaCie está sendo montado com o tipo fuseblk. Este é apenas um dispositivo de bloco montado com fusível. Então, algum daemon auto-detectou a unidade quando ela foi conectada e, em seguida, foi em frente e executou o fusível para montar o meu dispositivo de bloco. Então, o que é o daemon e como ele é configurado? acho que é alguma coisa interna do gnome) é a questão mais importante. Uma questão secundária é como o sistema detectou automaticamente um disco usb recém-inserido, mas acho que é um pouco de lado e um nível muito mais baixo aqui (leia-se: udev?).

Links:

por fthinker 25.02.2011 / 17:23

4 respostas

3

Eu tentei fazer isso no meu computador e funciona:)

Primeiro, obtenho 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 em / etc / fstab:

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

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

    
por 25.02.2011 / 22:25
2

Atualmente, as soluções padrão são, até onde eu sei, udisk um daemon que fornece um dbus api , bem como um interface de linha de comando . Também há vários wrappers e montadores automáticos disponíveis

Normalmente, você não configura o udisk como ele faz o que é dito, então você precisa procurar no Gnome. Talvez o Gnome Disk Utility permita modificar / alterar os próprios flags de montagem.

    
por 29.07.2012 / 02:02
2

Como Ulrich Dangel disse, os udisks deveriam 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 que você precisa.

O Udisks conversa com o polkit para ver o que um usuário pode fazer com 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 de que você precisa, algo assim:

udisksctl mount -b / dev / sdxy -o ro / ponto de montagem

Ainda não sei onde colocar as opções.

UPDATE: Seguindo as sugestões de Ulrich, eu fui ao utilitário de disco 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 o Cinnamon + Gnome3, fui ao 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 (é onde eu não a vejo como uma solução elegante, acho que deve permanecer como uma configuração do usuário e não do sistema), eu conecto a unidade e ela é montada automaticamente na montagem selecionada ponto com as opções que salvei no utilitário de discos do Gnome.

    
por 29.07.2012 / 17:18
-1

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

Em resumo:

  • o kernel varre constantemente seus barramentos de PC e mapeia dispositivos para o sistema de arquivos virtual, normalmente sob /sys/ .
  • o kernel envia uma mensagem informando que o novo hardware está disponível para o udev, que:
    • processe as regras do udev no dispositivo
    • crie um link simbólico para o dispositivo em /dev/
    • carregar drivers de dispositivo
    • notifica o espaço do usuário do dispositivo via dbus

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

    
por 31.07.2012 / 15:56