Reconocimiento de un dispositivo USB por el sistema.

Anuncio
Reconocimiento de un dispositivo USB por el sistema.
Muchas veces tenemos un grave problema en Linux: Acabamos de conectar un disco
externo USB (o un pen drive) y no sabemos cómo ha llamado el sistema a este
dispositivo y tenemos que emplear cierto tiempo en poder montarle.
Hoy en día, en el entorno gráfico, todas las distribuciones ya hacen accesibles
los dispositivos USB de forma sencilla, de tal forma que tras conectar el
dispositivo sólo hay que pinchar sobre un icono que nos aparece en el
escritorio, o en una menú emergente, y tendremos acceso al dispositivo.
Pero, ¿y si queremos que se monte siempre en un directorio que nosotros hemos
creado a tal efecto? ¿Y si cuándo se monte queremos que se ejecute algún script
que hemos creado, por ejemplo un backup?
¿Qué hacemos entonces?
En un primer paso lo que hacemos es conectar el disco o pen-drive.
En este momento tenemos que localizar el nombre que le acaba de dar el kernel.
Para ello podemos teclear
tail /var/log/messages
o
dmesg
donde obtendremos que por ejemplo nuestro pen drive acaba de ser reconocido por
el kernel y se le ha asignado el nombre sdb.
En este momento buscamos la información del dispositivo, utilizando para ello el
comando udevinfo:
udevinfo -a -p /sys/block/sdb
sustituiremos sdb por lo que nos haya salido.
La información que obtenemos es muy amplia, nos debemos centrar en las líneas
que “caracterizan” el dispositivo, como por ejemplo:
ATTRS{rev}=="V44O"
ATTRS{model}=="5DLAT80
ATTRS{vendor}=="HDT72252"
"
Es decir, este disco duro es el modelo 5DLAT80, del vendor HDT72252 con la rev
V440. Con esta información ya podemos hacer muchas cosas. Ya sabemos que cada
vez que nuestro kernel localice un dispositivo cuyo vendor es "HDT72252", el
modelo es "5DLAT80
" y la revisión es "V44O", se está tratando de “este”
disco duro que acabamos de instalar (u otro igual).
Ahora lo que podemos hacer es indicar al sistema operativo qué hacer en el caso
en el que reconozca a este dispositivo de nuevo, para ello editamos el fichero
/etc/udev/rules.d/usb.rules
NO hace falta que se llame así, tal cual, lo que es obligatorio es que esté en
el directorio /etc/udev/rules.d y que el nombre acabe en .rules (ojo con el
punto, es necesario.
y escribimos algo así como:
KERNEL=="sd*", SYSFS{vendor}=="HDT72252",SYMLINK+="datos%n"
Es fácil entenderlo:
El Kernel sabemos que le va a llamar sd-algo (de ahí que escribimos el
asterisco), y con esto indicamos “fíjate cuando el kernel descubra un sd-algo”.
A continuación le decimos que si el “vendor” (que ha salido del comando
udevinfo, NO de la caja del disco, cuidado con esto), es HDT72252 (ojo con los
espacios y todo esto, es mejor copiar desde las doble comillas hasta las doble
comillas de la entrada del comando udevinfo y así no habrá equivocación)
entonces llame a este dispositivo /dev/datos pero además queremos que las
particiones se respeten, es decir, si hay tres particiones queremos que se
cree /dev/datos1, /dev/datos2 y /dev/datos3 por eso escribimos SYMLINK+="datos
%n" para que cree los tres enlaces simbólicos correspondientes (crea tres y no
sólo uno porque hemos especificado %n, que crea tantos enlaces simbólicos como
particiones vea, y en el orden que las ve).
Si tuviéramos más discos con el mismo “vendor”, entonces podríamos añadir el
modelo y la revisión con el fin de acotar qué nombre se da a cada dispositivo.
Entonces ahora ya podemos escribir en nuestro fstab algo así como:
/dev/datos1
/dev/datos2
/dev/datos3
/backup/1
/backup/2
/datos
ext3
ext3
ext3
defaults
defaults
defaults
0
0
0
0
0
0
y ahora ya cada vez que pinchemos ese disco se montará correctamente, sin más,
en el directorio que hemos indicado. En nuestro caso tenemos un disco duro usb
externo con tres particiones formateadas como ext3, si tuviéramos menos o más
particiones, y formateadas con otros sistemas, deberíamos cambiar con arreglo a
nuestro caso el fichero fstab.
Cada cosa que especifiquemos en la línea se tiene que cumplir. Si hay una sóla
de las entradas que no se cumple, entonces no crea el enlace simbólico.
¿Y si queremos ejecutar algo cada vez que se conecte el dispositivo? Si queremos
ejecutar
por
ejemplo
nuestro
programa
script,
que
está
en
el
directorio /directorio, lo que debemos hacer es continuar la línea escrita en el
fichero .rules que hemos creado, con la sintaxis:RUN+="/directorio/script", es
decir, en nuestro ejemplo quedaría:
KERNEL=="sd*",
SYSFS{vendor}=="HDT72252",SYMLINK+="datos%n",
+="/directorio/script"
RUN
de tal forma que cada vez que conectáramos nuestro disco duro, el sistema
operativo le asignaría el nombre /dev/datos, identificando con un número a cada
una de las particiones, y además ejecutaría /directorio/script
Descargar