udev-, udisks-, dbus- und dd-Befehle

udev-, udisks-, dbus- und dd-Befehle

Ich möchte besser verstehen, was auf Betriebssystemebene passiert, wenn ein neues Gerät (USB-Stick oder IDE/SATA-Festplatte) an einen PC angeschlossen wird, also von der Kernelebene bis zur Userspace-Ebene. Außerdem würde ich gerne wissen, auf welcher Ebene der Befehl „dd“ funktioniert.

Ich habe es so verstanden, dass der Kernel dieses Ereignis „abfängt“, sobald ein externes Laufwerk angeschlossen ist, und das udev-System informiert, das dank des udevd-Daemons immer zuhört. Udisks ist die Instanz zum Sammeln von Informationen über Blockgeräte. Udisks benötigt hierfür udev. Udisks ist mit dem D-Bus verbunden (D-Bus wird nicht nur von Udisks verwendet; viele Programme verwenden D-Bus zum Austausch von Informationen). Über den D-Bus kann sich jeder mit Udisks verbinden und nach der aktuellen Geräteliste fragen.

Frage: Wenn ich den Befehl dd starte, wird vielleicht eine Verbindung zum D-Bus hergestellt, um ein Laufwerk zu kopieren/ein Image zu erstellen?

Ich füge auch ein Bild aus Wikipedia bei, das die Linux-Ebenen zeigt. Können Sie mir bitte auf diesem Bild den Pfad nennen, der vom angeschlossenen Gerät zur Instanz des dd-Befehls führt?

Dank im Voraus.

Vincenzo.

Bildbeschreibung hier eingeben

Antwort1

Das sind eigentlich zwei Fragen:

1) ddist eine normale Benutzeranwendung, genau wie cp. Genau wie cp, kopiert es, indem es Systemaufrufe zum Lesen ausgibt, das Ergebnis abruft und dann Systemaufrufe zum Schreiben ausgibt. Im Gegensatz zu cpkönnen Sie die Blockgröße für festlegen dd, weshalb ddtraditionell immer zum Kopieren von Blockgeräten verwendet wurde. Aber heute cp /dev/sdb /dev/sdcmacht genau dasselbe wie ddund ist genauso schnell, da moderne Versionen von cp(anders als vielleicht alte Versionen) auch immer komplette Blöcke lesen und schreiben.

Auch ist cpnichts ddBesonderes erforderlich, um ein „Datenträgerlayout“ oder ähnliches zu erhalten. Sie lesen einfach, bis das Betriebssystem signalisiert, dass sie am Ende sind.

2)

Sobald ein externes Laufwerk angeschlossen ist, „fängt“ der Kernel dieses Ereignis ab

Der Kernel fängt dieses Ereignis nicht wirklich ab, da alle Aktionen auf Treiberebene bereits im Kernel stattfinden. Wenn Sie also ein USB-Gerät anschließen, bemerkt die Hardware des USB-Hostcontrollers dies, generiert einen Interrupt und der Treiber des USB-Hostcontrollers reagiert darauf. Anschließend beginnen die verschiedenen Teile des USB-Stacks, das neue Gerät aufzulisten, seinen Typ zu identifizieren, potenzielle Treiber zu identifizieren, neue Blockgeräte anzuschließen, die von diesen Treibern erstellt wurden, usw.

udevist lediglich ein Mechanismus für den Kernel, um diese Ereignisse dem Benutzerbereich mitzuteilen, sodass der Benutzerbereich darauf reagieren kann, z. B. durch die Erstellung symbolischer Links.

und informiert das udev-System, das dank des udevd-Daemons immer zuhört.

Udisks ist die Instanz zum Sammeln von Informationen über Blockgeräte.

udisksist ein Desktop-Dämon, den der Desktop verwendet, um Informationen über Blockgeräte abzurufen, da der Desktop alles gerne über den D-Bus erledigt. Sie brauchen ihn nicht wirklich, udiskswenn Sie keinen D-Bus-Desktop verwenden (und tatsächlich läuft er auf einigen meiner Maschinen nicht).

Über D-Bus kann sich jeder mit udisks verbinden und nach der aktuellen Geräteliste fragen.

Dies können Sie ebenso gut auf andere Weise tun, z. B. indem Sie sich /devoder die Informationen in ansehen /sys.

Die gesamte udev - udisk - Desktop Kette wird nur benötigt, damit der Desktopinformiertwenn neue Blockgeräte erscheinen oder vorhandene Blockgeräte ihren Status ändern, sodass der Desktop schicke Fenster oder ähnliches öffnen kann. Wenn Sie Linux auf herkömmliche Weise verwenden und kein schickes Fenster benötigen, wenn Sie es auf einen USB-Stick stecken, brauchen Sie dies nicht.

verwandte Informationen