
Quero ir além deste excelentesoluçãopor @AB que permite montar automaticamente um determinado FS ext3 removível usando uma udev
regra. Especificamente, gostaria de especificar váriosopções de montagem: " nodev,noexec,x-gvfs-show
", preferencialmente dentro da udev
regra específica utilizada para montá-lo, pois trata-se de um meio físico muito 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 opções de montagem, tentei expandir a udev
regra 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'"
onde /usr/local/sbin/mount_by.sh
inclui:
#!/bin/sh
/bin/mount "/dev/disk/by-uuid/$2" "/mnt/$1" -o "$3"
O acima é interrompido silenciosamente, 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.
O que está errado ?
O que tentei fazer:
Os muitos posts que vi tratando de dificuldades de especificação de opções de montagem ao usar udev
(por exemplo1,2,...) permanecem sem resposta.
Umtrata da opção GVFS x-gvfs-show
usada em conjunto com udev
regras, quando o volume montado deve aparecer Devices
na GUI do Nautilus e o usuário não root deve ser capaz de desmontá-lo. Para pelo menos cobrir esse último aspecto, voltei a NÃO especificar a opção de montagem em minhas regras do udev, mas adicionei uma /etc/fstab
entrada, um hack bastante feio, dado o fato de que mantenho uma udev
regra de funcionamento 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... ou seja, as opções nodev,noexec
parecem ser alegremente ignoradas.
Não é de surpreender que também receba a mensagem de erro na tela:
Não foi possível montar MYLABEL. O dispositivo /dev/mmcblk0p1 já está montado em `/mnt/MYLABEL'.
Alguém pensou?
RECOMPENSAPor favor, tente fornecer uma resposta canônica que possa servir a este OP e a todas as pessoas interessadas em especificar opções de montagem por meio de uma udev
regra. Se não for possível, explique o porquê e forneça uma solução alternativa viável. Saúde.
Responder1
O roteiro
#!/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 esta (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.
O ruim, definitivamente no meu sistema, x-gvfs-show
não funciona na lista de opções para-o
Responder2
Você não deveria usar uma regra do udev para fazer isso. Por um lado, está em conflito com os udisks: ambos estão tentando montar a unidade em lugares diferentes, e ninguém sabe qual deles vence. Além disso, quando terminar de usar a unidade, você poderá clicar com o botão direito nela na 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 em um local personalizado, você só precisa adicionar uma entrada em /etc/fstab para ele e certificar-se de incluir a opção "usuário", que permite que usuários não root montem-no automaticamente com udisks e, posteriormente, eles poderão desmontá-lo.
Responder3
Para completar a resposta de AB e para registro:
Opções de montagem pode ser especificado dentro das regras do udev ... sob certas condições. Ao executar os testes, percebi que algumas opções são:
- aceito e aplicado:
ro
,rw
,nodev
,noexec
- aceito e ignorado:
comment=x-gvfs-show
, - não aceito, pois viola a regra do udev:
mode=0XYZ
,x-gvfs-show
Neste último caso, quebrar a udev
regra significa udisk
montar automaticamente a mídia com opções padrão.
A udev
tag MODE="0550"
, você poderia pensar equivalente a invocar osomente leitura( ro
) opção de montagem, é ignorada. Observe que especificar ro
or rw
não aparece no Nautilus como seria de esperar. Estranhamente, as permissões exibidas pelo Nautilus permanecem inalteradas, enquanto a tentativa de escrever if ro
is set resultará em uma mensagem de aviso e na negação da permissão de gravação. Erro ?
Por último, mas não menos importante,nãoorganize uma /etc/fstab
entrada ao mesmo tempo em que especifica uma udev
regra de montagem para um determinado dispositivo. Isso resultará em um conflito e uma mensagem de erro, pois udisk
competirá com sua udev
regra para montar o dispositivo. Nenhuma surpresa nisso. O dispositivo ainda estará montado (no meu caso, pela udev
regra - por favor, não pergunte por quê...) e poderá até ser acessado.
HTH um pouco.