Introducción a la administración de dispositivos en sistemas Linux modernos

¡Hola!

Esta va ser una entrada muy corta, es algo que ví por ahí que me pareció interesante compartir ya que sé que a muchos nos ha causado inquietud o problemas alguna vez…

¿Cómo funciona la administración de dispositivos en un sistema Linux?, ¿Cómo se autodetectan las unidades? ¿Cómo hacen los explodaroes de archivos para detectar los USB, SD, etc.? Bueno, por aquí comienza la cosa…

Las distribuciones modernas de Linux son capaces de identificar un componente de hardware que está conectado a un sistema ya en funcionamiento. Hay muchas distribuciones fáciles de usar como Ubuntu,  que ejecutan automáticamente aplicaciones específicas como Rhythmbox cuando un dispositivo portátil como un iPod está conectado al sistema.

El Hotplugging (que es la palabra utilizada para describir el proceso de insertar dispositivos en un sistema en ejecución) se logra en una distribución de Linux mediante una combinación de tres componentes: Udev, HAL y Dbus.

Udev proporciona un directorio de dispositivos dinámicos que contiene sólo los nodos de los dispositivos conectados al sistema. Crea o elimina los archivos de nodo del dispositivo en el directorio /dev a medida que se conectan o se extraen.

Dbus es como un bus de sistema que se utiliza para la comunicación entre procesos.

El HAL obtiene información del servicio Udev, cuando un dispositivo se conecta al sistema y crea una representación XML de ese dispositivo. A continuación, notifica la aplicación de escritorio correspondiente como Nautilus a través del Dbus y Nautilus abrirá los archivos del dispositivo montado.

El artículo de Linux.com al que estoy haciendo referencia, se centra sólo en Udev, que hace la identificación básica del dispositivo. Así que describo algo del tema para ustedes.

¿Qué es Udev?
Udev es el administrador de dispositivos para el kernel Linux 2.6 que crea/elimina de forma dinámica los nodos del dispositivo en el directorio /dev. Es el sucesor de devfs y hotplug. Se ejecuta en el espacio de usuario y el usuario puede cambiar los nombres de dispositivo utilizando las reglas Udev.

Udev depende del sistema de archivos sysfs que fue introducido en el kernel 2.5. Es sysfs lo que hace que los dispositivos sean visibles en el espacio del usuario. Cuando se agrega o se elimina un dispositivo, se producen eventos del kernel que notificarán a Udev en el espacio de usuario.

El binario externo /sbin/hotplug se utilizó en versiones anteriores para informar a Udev acerca del cambio de estado del dispositivo. Eso ha sido reemplazado y Udev ahora puede escuchar directamente esos eventos a través de Netlink.

¿Por qué lo necesitamos?
En los kernels antiguos, el directorio /dev contenía archivos de dispositivos estáticos. Sin embargo, con la creación dinámica de dispositivos, se crean nodos de dispositivos para sólo aquellos dispositivos que realmente están presentes en el sistema.

Udev proporciona un sistema de nombres de dispositivo persistente a través del directorio /dev, facilitando la identificación del dispositivo.

Si quieres saber más a cerca del tema, Este es el articulo original. Introduction to Device Management In Modern Linux System

Problema de automontaje USB Linux

¡Bienvenidos! con este post comienzo mi nuevo blog mas general y facil de recordar que algoritmoselinventor (aunque le tengo mucho cariño :’-) ) xD y que estará destinado a todo lo que venía haciendo y algunas cosas nuevas… jeje.

Y con este doy inicio también a mi nueva sección Micro tips

Ok, manos a la obra…

Este es un tema que me había pasado varias veces y conozco a varios que les pasa lo mismo, pero no le había prestado mucha atención dado la carga de trabajo que tenía acumulada… Pero bueh… ¡Ya no más!

Me sucede que cuando hago una instalación desde un Net-Install y luego instalo un entorno gráfico (en mi caso Gnome o Fluxbox) desde un repo cualquiera. Los dispositivos como pendrives o memorias SD se montan con permisos de root y no se montan en el directorio /media/usuario/etiqueta como ya estamos acostumbrados desde hace varias versiones de Linux/Debian atrás.

Entre otras cosas, esos son los “síntomas” que he percibido en el comportamiento con las memorias de formato VFAT (fat32, etc..)

  • Se montan en /media/usb0, /media/usb1, etc…
  • Se montan con permisos de solo lectura.
  • Solo los puedes escribir como root en la terminal (y si lo quieres gestionar desde interfaz gráfica tienes que lanzar nautilus, pcmafm u otros como root).
  • Solo los puedes desmontar como root.
  • La transferencia de datos en estos dispositivos es muy lenta comparada con otros.
  • En algunos casos, no se terminan de transferir los archivos o se transmiten corruptos.
  • Cuando la transferencia de archivos es muy grande puedes notar como que la máquina se pone un poco lenta (y en algunos casos Gnome se pone un poco loco).
  • Este comportamiento no afecta las particiones o dispositivos extraíbles en formato ntfs.
  • Solo puedes desmontarlos como root.

Esto pasa cuando instalamos desde un net-install y luego le ponemos Gnome u otro entorno… primero daré la solución, y si les interesa, luego les explico el por qué.

Solución:

1) Abrir un terminal

Como siempre el # significa que estamos como root y el $ que estamos como usuario normal (no es parte del comando).

2) Verificar que tienen instalado el paquete usbmount

# aptitude search usbmount

Si está instalado, el terminal debería mostrar algo como lo siguiente

i usbmount - automatically mount and unmount USB mass storage devices

el “i” al principio significa que está instalado

3) Lo desinstalamos

# aptitude remove usbmount

4) Verificamos de nuevo que se ha desinstalado

# aptitude search usbmount

Si está desinstalado, el terminal debería mostrar algo como lo siguiente

c usbmount - automatically mount and unmount USB mass storage devices

el “c” al principio significa que ya está desinstalado

5) ¡Listo!

¡A dejar que udev maneje el montaje! Si quieres comprobar si ya tus USB se montan y se desmontan como lo harían normalmente, conecta un pendrive y prueba.
Ya puedes seguir con tu vida… Ahora… Si quieres conocer la explicación, sigue leyendo…

Esto ocurre porque cuando haces una instalación desde el net-install (ya que es una instalación base sin interfaz gráfica) se instala el paquete usbmount que es una aplicación que monta dispositivos de almacenamiento extraíbles cuando están conectados y los desmonta cuando se eliminan como una instancia de Udev para poder gestionarlos de manera mas fácil y este queda gestionando los montajes y salta por encima de HAL.

Bueno, para no hacer el cuento mas largo, si quieres saber más de Udev, Dbus y Hal y cómo funciona la gestión de dispositivos en el sistema Linux moderno lee este artículo

Entonces…

¿Por qué se montan en /media/usb0, /media/usb1, etc…?
Porque los directorios de montaje de usbmount son estáticos y así están definidos en /etc/usbmount.conf que es el archivo de configuración para el paquete usbmount.
Por eso siempre los monta en /media/usb0, /media/usb1… Hasta el media/usb7 que son los que tiene pre-configurados.

¿Por qué se montan con permisos de solo lectura? y ¿Por qué solo los puedes escribir, montar/desmontar como root?
Porque en el usbmount.conf por defecto, las opciones de montaje de los dispositivos son noexec, nodev, noatime, nodiratime además, se montan con opciones de file system dmask, fmask y gid con permisos sólo para el root, así que por eso solo los puedes administrar desde el root a menos que edites el archivo usbmount.conf

¿Por qué La transferencia de datos en estos dispositivos es muy lenta comparada con otros?, ¿En algunos casos, no se terminan de transferir los archivos o se transmiten corruptos?, Cuando la transferencia de archivos es muy grande puedes notar como que la máquina se pone un poco lenta (y en algunos casos Gnome se pone un poco loco).

Ok… la lentitud es porque, además de las opciones de montaje noexec, nodev, noatime y nodiratime, hay una opción extra, la opción “sync“, esta, en el montaje que hace que sincronice los archivos con el sistema antes y después del montaje.
La opción “sync” puede no ser una buena opción para usar con unidades flash, ya que fuerza una mayor cantidad de escritura operando en la unidad. Esto hace que la velocidad de escritura considerablemente inferior y también conduce a un desgaste más rápido del disco.
En el Warning del archivo usbmount.conf dice lo siquiente:

 The "sync" option may not be a good choice to use with flash 
drives, as it forces a greater amount of writing operating on the 
drive. This makes the writing speed considerably lower and also 
leads to a faster wear out of the disk.

If you omit it, don't forget to use the command "sync" to 
synchronize the data on your disk before removing the drive or 
you may experience data loss.

It is highly recommended that you use the pumount command 
(as a regular user) before unplugging the device. It makes 
calling the "sync" command and mounting with the sync option 
unnecessary---this is similar to other operating system's 
"safely disconnect the device" option.

¿Por qué este comportamiento no afecta las particiones o dispositivos extraíbles en formato ntfs?
Los sistemas de archivos que gestiona el usbmount por defecto son: vfat, ext2, ext3, ext4 y hfsplus. Para los ntfs no pasa porque el montaje lo gestiona el paquete ntfs-3g y por tanto se gestiona por el udev como normalmente se haría.

Nota:

El paquete usbmount ya no está soportado por el autor original, pero Ubuntu/Debian todavía parecen mantenerlo, por lo que todavía está disponible en las últimas versiones como Wheezy, Jessie y Ubuntu (equivalente).

Espero que les haya servido. ¡See you soon!

Fuente de referencia:

http://usbmount.alioth.debian.org/

https://superuser.com/questions/53978/automatically-mount-external-drives-to-media-label-on-boot-without-a-user-logge