udev, udisks, dbus e comando dd

0

Eu sou interessante para entender melhor o que acontece, no nível do sistema operacional, quando um novo dispositivo (usb stick ou ide / sata hdd) é conectado a um PC, isto é, do nível do kernel ao nível do espaço do usuário. Além disso, eu gostaria de saber em qual nível o comando "dd" funciona.

O que eu entendi é que, uma vez que uma unidade externa é conectada, o kernel "intercepta" este evento e informa ao sistema do udev que está sempre ouvindo graças ao daemon do udevd. Udisks é a instância para coletar informações sobre dispositivos de bloco. O Udisks precisa do udev para isso. Udisks está conectado ao d-bus (dbus não é algo usado apenas pelos udisks; muitos programas usam dbus para trocar informações). Através do d-bus, qualquer pessoa pode se conectar ao udisks e perguntar qual é a lista atual de dispositivos.

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

Também anexo uma foto tirada da wikipedia que mostra os níveis do linux. Você pode me dizer, por favor, nessa foto, o caminho começando do dispositivo conectado para a instância do comando dd?

Obrigado antecipadamente.

Vincenzo.

    
por applejtter 27.11.2017 / 05:46

1 resposta

0

Isso é realmente duas perguntas:

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

Nem o cp nem o dd fazem algo especial para obter um "layout de disco" ou algo do tipo, apenas lêem até o sistema operacional sinalizar que estão no final.

2)

once an external drive is attached, the kernel "intercept" this event

O kernel realmente não intercepta esse evento, já que todas as ações no nível do driver já estão acontecendo no kernel. Portanto, quando você conecta um dispositivo USB, o hardware do controlador de host USB percebe isso, gera uma interrupção e o driver do host USB reage a isso e as várias partes da pilha USB começam a enumerar o novo dispositivo, identificam o tipo, identificar potenciais 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, de modo que o espaço do usuário pode reagir a eles, por exemplo, criando links simbólicos.

and informs the udev system that is always listening thanks to the udevd daemon.

Udisks is the instance for collecting information about block devices.

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

Via d-bus, anyone can connect to udisks and ask what's the current list of devices.

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

Toda a cadeia udev-udisk-Desktop é necessária apenas para que a área de trabalho seja informada quando novos dispositivos de bloco aparecerem ou o estado de alteração de dispositivo de bloco existente, para que a Área de Trabalho possa aparecer janelas extravagantes ou tanto faz. Se você usa o Linux da maneira tradicional e não precisa de uma janela sofisticada quando coloca um pendrive, não precisa disso.

    
por 27.11.2017 / 08:47

Tags