Comando udev, udisks, dbus y dd

Comando udev, udisks, dbus y dd

Es interesante comprender mejor qué sucede, a nivel del sistema operativo, cuando se conecta un nuevo dispositivo (memoria USB o disco duro ide/sata) a una PC, es decir, desde el nivel del kernel hasta el nivel del espacio de usuario. Además, me gustaría saber en qué nivel funciona el comando "dd".

Lo que he entendido es que, una vez que se conecta un disco externo, el kernel "intercepta" este evento e informa al sistema udev que siempre está escuchando gracias al demonio udevd. Udisks es la instancia para recopilar información sobre dispositivos de bloque. Udisks necesita udev para esto. Los udisks están conectados al d-bus (dbus no es algo que solo usan los udisks; muchos programas usan dbus para intercambiar información). A través de d-bus, cualquiera puede conectarse a udisks y preguntar cuál es la lista actual de dispositivos.

Pregunta: cuando ejecuto el comando dd, ¿tal vez se conecta al d-bus para copiar/imagen de una unidad?

También adjunto una foto sacada de wikipedia que muestra los niveles de linux. ¿Puede decirme, por favor, en esa imagen, la ruta que comienza desde el dispositivo conectado hasta la instancia del comando dd?

Gracias de antemano.

Vicente.

ingrese la descripción de la imagen aquí

Respuesta1

En realidad son dos preguntas:

1) ddes una aplicación de usuario normal, como cp. Al igual que cp, copia emitiendo llamadas al sistema de "lectura", obteniendo el resultado y luego emitiendo llamadas al sistema de "escritura". A diferencia de cp, puedes establecer el tamaño del bloque dd, por lo que ddsiempre se ha utilizado tradicionalmente para copiar dispositivos de bloques. Pero hoy en día, cp /dev/sdb /dev/sdchará exactamente lo mismo que dd, e igualmente rápido, ya que las versiones modernas de cp(a diferencia de las versiones antiguas) también siempre leerán y escribirán bloques completos.

Tampoco cphace ddalgo especial para obtener un "diseño de disco" ni nada por el estilo, simplemente leen hasta que el sistema operativo indica que están al final.

2)

una vez que se conecta una unidad externa, el kernel "intercepta" este evento

El kernel realmente no intercepta este evento, ya que todas las acciones a nivel del controlador ya están ocurriendo en el kernel. Entonces, cuando conecta un dispositivo USB, el hardware del controlador del host USB lo nota, genera una interrupción, y el controlador del controlador del host USB reacciona a eso, y luego las distintas partes de la pila USB comienzan a enumerar el nuevo dispositivo, identificar su tipo, identificar controladores potenciales, conectar nuevos dispositivos de bloque creados por esos controladores, etc.

udeves sólo un mecanismo para que el kernel comunique estos eventos al espacio de usuario, de modo que el espacio de usuario pueda reaccionar ante ellos, por ejemplo, creando enlaces simbólicos.

e informa al sistema udev que siempre está escuchando gracias al demonio udevd.

Udisks es la instancia para recopilar información sobre dispositivos de bloque.

udiskses un demonio del escritorio que el escritorio utiliza para obtener información sobre los dispositivos de bloque, porque al escritorio le gusta hacer todo en el D-Bus. Realmente no lo necesita udiskssi no está ejecutando un escritorio D-Bus (y de hecho, no se ejecuta en algunas de mis máquinas).

A través de d-bus, cualquiera puede conectarse a udisks y preguntar cuál es la lista actual de dispositivos.

Puedes hacerlo igualmente bien por otros medios, por ejemplo mirando /devo la información en /sys.

Toda la cadena udev - udisk - Escritorio sólo es necesaria para que el escritorio estéinformadocuando aparecen nuevos dispositivos de bloqueo, o el dispositivo de bloqueo existente cambia de estado, por lo que el escritorio puede mostrar ventanas elegantes, o lo que sea. Si usa Linux de la manera tradicional y no necesita una ventana elegante cuando lo coloca en una memoria USB, no la necesita.

información relacionada