PDA

Ver la Versión Completa : automontar usb con udev



dpatino
21-abr-2014, 17:14
Hola a todos,

No estoy seguro de si este Tema va en este sub-foro, si no es así avisadme para intentar cambiarlo.

La cuestión es que estoy intentando hacer que mi sistema sin entorno gráfico, automonte los usbs en cuanto los conecte al equipo y para ello he creado una nueva regla en rules /etc/udev/rules.d/10-media-by-label-automount.rules con el siguiente contenido:


#
#
# /etc/udev/rules.d/10-media-by-label-automount.rules

# Empezar con sdb para ignorar los discos del sistema
KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_automount_end"

# Obtener filesystem info
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Obtener label si existe sino poner identificador
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

# Crear la carpeta en /media
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}"

# Montar la unidad
ACTION=="add", RUN+="/bin/mount /dev/%k /media/%E{dir_name}"

# Limpiar todo despues de extraer
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"

# Salir
LABEL="media_by_label_automount_end"

Pero no consigo que funcione, con esta nueva regla me crea una carpeta en /media/ con la label del usb pero luego no me lo monta bien y no entiendo por qué, el contenido de la carpeta /media/ cuando conecto el USB es:


vfltst01:~ # ls -lah /media/
total 28K
drwxr-xr-x 3 root root 20K abr 21 17:10 .
drwxr-xr-x 27 root root 4,0K abr 21 14:26 ..
drwxrwxrwx 1 root root 4,0K abr 21 12:51 TEST_USB
vfltst01:~ # ls -lah /media/TEST_USB
ls: cannot access /media/TEST_USB: El otro extremo de la conexión no está conectado

A alquien se le ocurre alguna idea de por qué no está funcionando correctamente?

Muchas gracias.
Un saludo,

DiabloRojo
21-abr-2014, 19:20
El mensaje es muy genérico, a lo mejor usando dmesg | tail cuando insertas el usb dará mas información. Creo que el problema mas frecuente es que no sabe que tipo de partición es vfat, ntfs, ext4, etc... para montarlo.

Por cierto, si usas la versión 13.1 el automontaje del sistema se hace en /var/run/media/nombre_de_usuario te lo digo porque ha cambiado con respecto a las anteriores versiones.

Lee esto: https://code.google.com/p/yad/wiki/USBFlash

dpatino
22-abr-2014, 10:16
Gracias por el apunte DiabloRojo.

Soy consciente del cambio de directorio por defecto al automontar dispositivos externos, pero en mi caso no se automonta nada porque no tengo entorno gráfico así que en principio me da igual montarlos dispostivos nuevos en /media o en /var/run/media, por ello estoy intentando preparar yo el script para automatizarlo.

Sigo teniendo el mismo problema incluso usando el código del link que me facilitas, el cual basicamente hace lo mismo que el mio pero más profesional :).

Pego lo que me sale al intentar acceder al dispositivo, por si aportase alguna pista, lo que mas me extraña son tantos interrogantes en el usb, y que el cdrom lo "monta bien" pero al acceder aparece como vacío:


vfltst01:~ # ls -lah /media/
ls: cannot access /media/TEST_USB: El otro extremo de la conexión no está conectado
total 28K
drwxr-xr-x 4 root root 4,0K abr 22 10:05 .
drwxr-xr-x 3 root root 20K abr 22 10:05 ..
drwxr-xr-x 2 root root 4,0K abr 22 10:05 openSUSE-12.3-DVD-i5860110
d????????? ? ? ? ? ? TEST_USB
vfltst01:~ # ls -lah /media/TEST_USB
ls: cannot access /media/TEST_USB: El otro extremo de la conexión no está conectado
vfltst01:~ # ls -lah /media/openSUSE-12.3-DVD-i5860110/
total 8,0K
drwxr-xr-x 2 root root 4,0K abr 22 10:05 .
drwxr-xr-x 4 root root 4,0K abr 22 10:05 ..
vfltst01:~ #

DiabloRojo
22-abr-2014, 11:02
Esos mensajes son casi idénticos a tu 1er. mensaje. No dice nada ejecutando dmesg | tail después de insertarlo.

Y que nos dice el comando mount a ejecutarlo y cual es el contenido de los archivos /etc/fstab y /etc/mtab despues de insertarlo. Prueba otro pendrive USB.

dpatino
22-abr-2014, 13:10
También pensé lo del USB y ya he probado con 3 con el mismo resultado :(
Esta es la info que me pides, a ver si arroja algo de luz sobre este asunto que me tiene desesperado, he comentado todas las opciones del mount para que se lance con las mismas que cuando lo hago yo a mano, por descartar permisos/opciones (mount /dev/sdb1 /var/run/media/TEST_USB):


vfltst01:~ # dmesg | tail
[ 2071.131833] usb 2-1.7: new high-speed USB device number 5 using ehci-pci
[ 2071.230999] usb 2-1.7: New USB device found, idVendor=058f, idProduct=6387
[ 2071.231004] usb 2-1.7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2071.231007] usb 2-1.7: SerialNumber: 12072770021193
[ 2071.231356] usb-storage 2-1.7:1.0: USB Mass Storage device detected
[ 2071.231404] scsi8 : usb-storage 2-1.7:1.0
[ 2072.229888] scsi 8:0:0:0: Direct-Access 8.07 PQ: 0 ANSI: 4
[ 2072.230116] sd 8:0:0:0: Attached scsi generic sg2 type 0
[ 2072.232322] sd 8:0:0:0: [sdb] 15257600 512-byte logical blocks: (7.81 GB/7.27 GiB)
[ 2072.233361] sd 8:0:0:0: [sdb] Write Protect is off
[ 2072.233367] sd 8:0:0:0: [sdb] Mode Sense: 23 00 00 00
[ 2072.234449] sd 8:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 2072.249287] sdb: sdb1
[ 2072.255979] sd 8:0:0:0: [sdb] Attached SCSI removable disk
vfltst01:~ # cat /etc/fstab
/dev/disk/by-id/ata-ST3250312AS_9VYGT813-part4 swap swap defaults 0 0
/dev/disk/by-id/ata-ST3250312AS_9VYGT813-part1 / ext4 acl,user_xattr 1 1
/dev/disk/by-id/ata-ST3250312AS_9VYGT813-part2 /home ext4 acl,user_xattr 1 2
/dev/disk/by-id/ata-ST3250312AS_9VYGT813-part3 /var ext4 acl,user_xattr 1 2
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
vfltst01:~ # cat /etc/mtab
rootfs / rootfs rw 0 0
devtmpfs /dev devtmpfs rw,relatime,size=953048k,nr_inodes=206077,mode=755 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
tmpfs /run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
/dev/sda1 / ext4 rw,relatime,data=ordered 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=28,pgrp=1,timeout=300,minproto=5,ma xproto=5,direct 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,relatime 0 0
mqueue /dev/mqueue mqueue rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
/dev/sda3 /var ext4 rw,relatime,data=ordered 0 0
/dev/sda2 /home ext4 rw,relatime,data=ordered 0 0
tmpfs /var/run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
tmpfs /var/lock tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
/dev/sdb1 /var/run/media/TEST_USB fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,allo w_other,blksize=4096 0 0
/dev/sdb1 /run/media/TEST_USB fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,allo w_other,blksize=4096 0 0
vfltst01:~ # ls -lah /var/run/media/
ls: cannot access /var/run/media/TEST_USB: El otro extremo de la conexión no está conectado
total 0
drwxr-xr-x 3 root root 60 abr 22 12:52 .
drwxr-xr-x 15 root root 440 abr 22 11:58 ..
d????????? ? ? ? ? ? TEST_USB
vfltst01:~ #


Si lo hago yo a mano con (mount /dev/sdb1 /var/run/media/TEST_USB) sí que monta bien el usb. Por otro lado, fstab, mtab son iguales al caso que da error (comprobado con un diff), la salida de dmesg | tail también:


vfltst01:~ # ls -lah /var/run/media/
total 4,0K
drwxr-xr-x 3 root root 60 abr 22 11:14 .
drwxr-xr-x 15 root root 440 abr 22 10:37 ..
drwxrwxrwx 1 root root 4,0K abr 21 12:51 TEST_USB
vfltst01:~ # ls -lah /var/run/media/TEST_USB/
total 10K
drwxrwxrwx 1 root root 4,0K abr 21 12:51 .
drwxr-xr-x 3 root root 60 abr 22 11:14 ..
-rwxrwxrwx 2 root root 547 jul 9 2013 Dudas starter.txt
drwxrwxrwx 1 root root 0 abr 21 12:51 firefox26_suse11sp1_rpmXXXX
-rwxrwxrwx 2 root root 46 dic 9 16:33 Notas Incidentes.txt
-rwxrwxrwx 1 root root 60 ago 14 2013 Repo-PSA.txt
drwxrwxrwx 1 root root 0 abr 21 12:51 System Volume Information
-rwxrwxrwx 2 root root 1,5K jun 26 2013 ThinClient Options.txt
vfltst01:~ #


Lo que sí me he dado cuenta es que cuando se conecta el usb si hago una vigilancia sobre /var/run/media con un watch al principio aparece la carpeta TEST_USB con los permisos bien y al segundo se cambia a los interrogantes:


vfltst01:~ # ls -lah /var/run/media/
total 4,0K
drwxr-xr-x 3 root root 60 abr 22 12:55 .
drwxr-xr-x 15 root root 440 abr 22 11:58 ..
drwxrwxrwx 1 root root 4,0K abr 21 12:51 TEST_USB
vfltst01:~ # ls -lah /var/run/media/
ls: cannot access /var/run/media/TEST_USB: El otro extremo de la conexión no está conectado
total 0
drwxr-xr-x 3 root root 60 abr 22 12:55 .
drwxr-xr-x 15 root root 440 abr 22 11:58 ..
d????????? ? ? ? ? ? TEST_USB


Será algún error debido a udev?

Muchas gracias.
Un saludo,

DiabloRojo
22-abr-2014, 13:42
Hola dpatino.

Yo veo tres fallos, creo que es debido a udev o vete tu a saber.

El 1º es este:

sd 8:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUAPor Internet existe información pero no me aclaro cual es la solucion.

El 2º error, era el que ya sospechaba y te dije en mi anterior mensaje no sabe que partición montar:

/dev/sdb1 /var/run/media/TEST_USB fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,allo w_other,blksize=4096 0 0Si te fijas bien pone un driver genérico fuseblk (http://en.wikipedia.org/wiki/Filesystem_in_Userspace) en vez de vfat, ntfs-3g, ext4, etc... Eso no quiere decir que este mal pero es mejor que existiera un driver mas concreto. Ademas, solo lo puede leer el superusuario root, lo digo por el user_id y group_id que esta a 0. Y que es ¿allo y w_other? que están definidos.

3º el otro error esta en udev, cuando se hace el mount /dev/sda1 .... siempre habrá que poner el tipo, es la opcion type o '-t vfat' pero antes tienes que saber cual es.

ACTION=="add", RUN+="/bin/mount /dev/%k /media/%E{dir_name}"PD: En el enlace anterior que te di de un script, fíjate que según si es vfat o ntfs adiciona unos parámetros en el montaje. Y no descarte que este defectuoso tu pendrive USB, prueba con otro pendrive USB.

Añadido: te adjunto como esta en el archivo /etc/mtab el automontaje de un pendrive que insertado:

/dev/sdf1 /run/media/leches/SANITAS vfat rw,nosuid,nodev,relatime,uid=1000,gid=100,fmask=00 22,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remou nt-ro 0 0
/dev/sdf1 /var/run/media/leches/SANITAS vfat rw,nosuid,nodev,relatime,uid=1000,gid=100,fmask=00 22,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remou nt-ro 0 0

dpatino
22-abr-2014, 15:59
Ya he probado con 3 pendrives usb con el mismo resultado.

La opción de montaje "allo w_other" es un fallo mio al copiar, sería allow_other que la debe poner por defecto, porque yo no la pongo, ya que la regla de udev del link que me compartiste solo añade: "relatime,users,umask=0,utf8".

Acabo de probar a poner por linea de comandos:

mount -t ntfs -o "relatime,users,umask=0,utf8" /dev/sdb1 /var/run/media/TEST_USB
y también:

mount -t ntfs-3g -o "relatime,users,umask=0,utf8" /dev/sdb1 /var/run/media/TEST_USB
y no hace caso, ya que en /etc/mtab sigue poniendo:

/dev/sdb1 /var/run/media/TEST_USB fuseblk rw,nosuid,nodev,noexec,relatime,user_id=0,group_id =0,default_permissions,allow_other,blksize=4096 0 0
/dev/sdb1 /run/media/TEST_USB fuseblk rw,nosuid,nodev,noexec,relatime,user_id=0,group_id =0,default_permissions,allow_other,blksize=4096 0 0

Con respecto a tu punto 3º, he cambiado lo siguiente de la regla de udev para que añada el type al mount, pero el problema es el mismo:

ACTION=="add", RUN+="/bin/mkdir -p '%E{dir_name}'", RUN+="/bin/mount -t %E{ID_FS_TYPE} -o %E{mount_options} /dev/%k '%E{dir_name}'"


Será un error del paquete ntfs o del udev y por eso el sistema usa siempre fuseblk? O es algo que tengo que cambiar en el sistema? Aunque a mano lo monta bien y puedo acceder a el; pero desde udev no va.

Por otro lado ese error que me comentas en tu punto 1º también me sale cuando monta bien el usb y con lo que he leido por internet no entiendo ni la solucion ni el alcanza ni la importancia del mismo.

Saludos,

DiabloRojo
22-abr-2014, 18:59
¿Has probado usar el script de USBFlash, ver enlace anterior?, ¿da el mismo problema?.

fuseblk (http://en.wikipedia.org/wiki/Filesystem_in_Userspace) es un driver generico que a su vez llama a otro mas especifico, no deberia dar problemas usarlo. :adios:

dpatino
23-abr-2014, 13:04
Hola DiabloRojo,

Sí, he probado el script USBFlash y da el mismo problema.

También "googlenado" me he encontrado este otro método... similar pero usando scripts externos: https://github.com/fatso83/Code-Snippets/tree/master/system-utils/ubuntu/automount

y también me da el mismo problema.
Es muy raro...:(

Alguna idea?

Muchas gracias.
Un saludo,

DiabloRojo
24-abr-2014, 11:13
Notificarlo a Bugzilla de openSUSE. :adios:

dpatino
24-abr-2014, 12:38
Muchas gracias por todo.

Lo acabo de notificar a bugzilla, cuando me respondan actualizaré este tema.

Un saludo,

DiabloRojo
24-abr-2014, 17:03
¡Suerte! :dedosarri

dpatino
29-abr-2014, 14:42
Buenas,

Ya me han contestado desde bugzilla y aparentemente hay un problema con udev en systemd (https://bugzilla.novell.com/show_bug.cgi?id=874988), el cual mata el proceso ntfs-3g después de que se monta la unidad. Por lo que no es posible usar el comando "mount" en una regla udev para sistema de ficheros ntfs. De tal manera recomiendan usar udisks o udisks2.

Yo solo conocía udev para detectar el hotplug de dispositivos. Así que cómo se puede hacer para tener un demonio (o algo similar a udev) que detecte los plug in /out y los automonte/desmonte usando udisks2 (udisksctl)?

Muchas gracias.
Un saludo,

DiabloRojo
29-abr-2014, 17:29
Yo solo conocía udev para detectar el hotplug de dispositivos. Así que cómo se puede hacer para tener un demonio (o algo similar a udev) que detecte los plug in /out y los automonte/desmonte usando udisks2 (udisksctl)?No conozco udisks2, etc... pero todo es cuestión de aprender, si tienes tiempo hazlo. :adios: