mount options para o udev-rule mounted ext3 fs on14.04.3

6

Eu quero ir além dessa excelente solução por @ A.B. que permite montar automaticamente um determinado FS ext3 removível usando uma regra udev . Especificamente, gostaria de especificar várias opções de montagem : " nodev,noexec,x-gvfs-show ", de preferência dentro da regra específica udev usada para montá-lo, já que ele lida com uma meio físico específico.

Sem nenhuma opção especificada, o volume é montado assim:

$ cat /proc/mounts | grep -e MYLABEL
/dev/mmcblk0p1 /mnt/MYLABEL ext3 rw,relatime,data=ordered 0 0

Para especificar as opções de montagem, tentei expandir a regra udev da solução anterior para:

KERNEL=="mmc*", ENV{ID_FS_UUID}=="______", RUN+="/usr/local/sbin/mount_by.sh '%E{ID_FS_LABEL}' '%E{ID_FS_UUID}' 'nodev,noexec,x-gvfs-show'"

em que /usr/local/sbin/mount_by.sh inclui:

#!/bin/sh
/bin/mount "/dev/disk/by-uuid/$2" "/mnt/$1" -o "$3"

As opções acima são silenciosas, pois as opções de montagem definidas pela raiz parecem ser rejeitadas e o volume (um cartão SD) é montado silenciosamente em / media / MYUSER / MYLABEL.

Qual é o problema?

O que tentei fazer:

Os muitos posts que eu tenho visto lidando com dificuldades de especificação de mount-option (s) ao usar udev (por exemplo 1 , 2 , ...) permanecem sem resposta.

Um lida com a opção x-gvfs-show do GVFS usada em conjunto com as regras udev , quando o volume montado deve aparecer em Devices na GUI do Nautilus e o usuário não raiz deve poder desmontá-lo. Para pelo menos ter esse último aspecto coberto, reverti para NÃO especificar a opção mount nas minhas regras do udev, mas adicionei uma /etc/fstab entry, um hack bastante feio, dado que eu mantenho uma regra udev para o mesmo volume uuid em paralelo . Ainda assim, acrescentei:

UUID=_________ /mnt/MYLABEL ext3 nodev,noexec,x-gvfs-show 0 2

O FS está montado mas, embora apareça como pretendido no Nautilus, cat /proc/mounts | grep -e MYLABEL produz o mesmo resultado de antes ... isto é, as opções nodev,noexec parecem ser ignoradas de maneira clara.

Não é muito surpreendente que eu também receba a mensagem de erro na tela:

Unable to mount MYLABEL. Device /dev/mmcblk0p1 is already mounted at '/mnt/MYLABEL'.

Alguém pensou em alguém?

BOUNTY Por favor, tente fornecer uma resposta canônica que possa servir a este OP e a todas as pessoas interessadas em especificar as opções de montagem através de uma regra udev . Se não for possível, explique por que e forneça uma solução viável. Felicidades.

    
por Cbhihe 10.10.2015 / 19:14

3 respostas

2

O script

#!/bin/sh
export mount_point="/mnt/$1"
existing_device=$(awk '$2 == ENVIRON["mount_point"] {print $1; exit}' < /proc/mounts)
if [ -n "$existing_device" ]; then
  exit 1
fi
mkdir -p "$mount_point"
sleep 1 # Perhaps not necessary, but in the test with the OP it was necessary
mount "/dev/disk/by-uuid/$2" "$mount_point" -o "$3"
exit 0

deve funcionar perfeitamente com uma regra do udev como essa (você precisa substituir o UUID)

KERNEL=="mmc*", ENV{ID_FS_UUID}=="13ededb9-41e9-4674-b9dc-40ce178af91d", RUN+="/usr/local/bin/mount_by '%E{ID_PART_ENTRY_NAME}' '%E{ID_FS_UUID}' nodev,noexec"

Como as regras do udev são executadas como root , o -o será usado.

A coisa ruim, definitivamente no meu sistema, x-gvfs-show não funciona na lista de opções para -o

    
por A.B. 26.10.2015 / 18:33
2

Você não deveria estar usando uma regra do udev para fazer isso. Por um lado, está em conflito com os udisks: ambos estão tentando montar o disco em lugares diferentes, e qual deles ganha é o palpite de ninguém. Além disso, quando tiver terminado a unidade, você poderá clicar com o botão direito do mouse sobre ela no gui e ejetá-la, mas não poderá fazer isso se a regra do udev a montar.

Se você quiser montá-lo com opções personalizadas ou um local personalizado, basta adicionar uma entrada em / etc / fstab para ele e incluir a opção "user", que permite que usuários não-root montem automaticamente com os udisks, e depois podem desmontá-lo.

    
por psusi 26.10.2015 / 18:55
1

Para concluir a resposta do A.B. e para o registro:

Opções de montagem podem ser especificadas dentro das regras do udev ... sob certas condições. Enquanto fazia os testes, notei que algumas opções são:

  • aceita e aplicada: ro , rw , nodev , noexec
  • aceito e ignorado: comment=x-gvfs-show ,
  • não aceito, pois eles violam a regra do udev: mode=0XYZ , x-gvfs-show

No último caso, quebrar a regra udev significa que udisk monta automaticamente a mídia com as opções padrão.

O udev tag MODE="0550" , você poderia pensar equivalente a invocar a opção de montagem somente leitura ( ro ), será ignorado. Observe que especificar ro ou rw não é mostrado no Nautilus como seria de esperar. Estranhamente, as permissões exibidas pelo Nautilus permanecem inalteradas, enquanto tentar gravar se ro estiver definido resultará em uma mensagem de aviso e negação de permissão de gravação. Bug?

Por último, mas não menos importante, não organize uma entrada /etc/fstab ao mesmo tempo em que especifica uma regra de udev de um determinado dispositivo. Isso resultará em um conflito e em uma mensagem de erro, pois udisk competirá com a regra udev para montar o dispositivo. Nenhuma surpresa nisso. O dispositivo ainda será montado (no meu caso, pela regra udev - por favor, não pergunte por que ...) e pode até ser acessado.

HTH um pouco.

    
por Cbhihe 26.10.2015 / 15:46