Comando udev, udisks, dbus e dd

Comando udev, udisks, dbus e dd

É interessante entender melhor o que acontece, no nível do sistema operacional, quando um novo dispositivo (pendrive USB ou disco rígido ide/sata) é conectado a um PC, ou seja, do nível do kernel ao nível do espaço do usuário. Além disso, gostaria de saber em que nível o comando "dd" funciona.

O que entendi é que, uma vez conectado um drive externo, o kernel "intercepta" esse evento e informa ao sistema udev que está sempre escutando graças ao daemon udevd. Udisks é a instância para coletar informações sobre dispositivos de bloco. Udisks precisa do udev para isso. Udisks está conectado ao d-bus (dbus não é algo usado apenas por udisks; muitos programas usam dbus para troca de informações). Via d-bus, qualquer pessoa pode se conectar aos udisks e perguntar qual é a lista atual de dispositivos.

Pergunta: quando eu inicio o comando dd, talvez ele se conecte ao d-bus para copiar/criar imagem de uma unidade?

Também anexei uma foto tirada da Wikipedia que mostra os níveis do Linux. Você pode me dizer, por favor, nessa imagem, o caminho que começa no dispositivo conectado até a instância do comando dd?

Desde já, obrigado.

Vicente.

insira a descrição da imagem aqui

Responder1

Na verdade, são duas perguntas:

1) ddé um aplicativo de usuário normal, assim como o cp. Assim como cp, ele copia emitindo chamadas de sistema de "leitura", obtendo o resultado e, em seguida, emitindo chamadas de sistema de "gravação". Ao contrário de cp, você pode definir o tamanho do bloco dd, por isso ddsempre foi tradicionalmente usado para copiar dispositivos de bloco. Mas hoje, cp /dev/sdb /dev/sdcfará exatamente a mesma coisa que dd, e igualmente rápido, já que as versões modernas cp(ao contrário das versões antigas) também sempre lerão e escreverão blocos completos.

Nem faz algo especial para obter um "layout cpde dddisco" ou algo parecido, eles apenas lêem até o sistema operacional sinalizar que estão no final.

2)

uma vez que uma unidade externa é conectada, o kernel "intercepta" este evento

O kernel realmente não intercepta esse evento, pois todas as ações no nível do driver já estão acontecendo no kernel. Então, quando você conecta um dispositivo USB, o hardware do controlador host USB percebe isso, gera uma interrupção, e o driver do controlador host USB reage a isso, e então as várias partes da pilha USB começam a enumerar o novo dispositivo, identificar seu tipo, identificar possíveis drivers, anexar novos dispositivos de bloco criados por esses drivers, etc.

udevé apenas um mecanismo para o kernel comunicar esses eventos ao espaço do usuário, para que o espaço do usuário possa reagir a eles, por exemplo, criando links simbólicos.

e informa o sistema udev que está sempre ouvindo graças ao daemon udevd.

Udisks é a instância para coletar informações sobre dispositivos de bloco.

udisksé um demônio de desktop que o desktop usa para obter informações sobre dispositivos de bloco, porque o desktop gosta de fazer tudo no D-Bus. Você realmente não precisa udisksse não estiver executando um desktop D-Bus (e, na verdade, ele não funciona em algumas das minhas máquinas).

Via d-bus, qualquer pessoa pode se conectar aos udisks e perguntar qual é a lista atual de dispositivos.

Você pode fazer isso igualmente bem por outros meios, por exemplo, olhando /devou as informações contidas em /sys.

Toda a cadeia udev - udisk - Desktop é necessária apenas para que o desktop sejainformadoquando novos dispositivos de bloco aparecem ou o estado de mudança do dispositivo de bloco existente, para que a área de trabalho possa abrir janelas sofisticadas ou qualquer outra coisa. Se você usa Linux da maneira tradicional e não precisa de uma janela sofisticada ao colocar um pendrive, você não precisa disso.

informação relacionada