udev、udisks、dbus 和 dd 指令

udev、udisks、dbus 和 dd 指令

我很想更了解當新裝置(USB 棒或 IDE/SATA HDD)插入 PC 時,在作業系統層級會發生什麼,即從核心層級到使用者空間層級。此外,我想知道“dd”命令在哪個級別起作用。

我所理解的是,一旦連接了外部驅動器,核心就會「攔截」此事件並通知 udev 系統,該系統始終在 udevd 守護程序的作用下進行偵聽。 Udisks是收集區塊設備資訊的實例。為此,Udisk 需要 udev。 Udisk 連接到 d-bus(dbus 不僅僅是 udisk 使用;許多程式使用 dbus 來交換資訊)。透過 d-bus,任何人都可以連接到 udisk 並詢問當前的設備清單是什麼。

問題:當我啟動 dd 命令時,它可能會連接到 d-bus 來複製/映像驅動器?

我還附上了一張來自維基百科的圖片,顯示了 Linux 等級。您能告訴我在那張圖片上從連接的設備到 dd 命令實例的路徑嗎?

提前致謝。

文森佐.

在此輸入影像描述

答案1

這確實是兩個問題:

1)dd是一個普通的用戶應用程序,就像cp.就像 一樣cp,它透過發出「read」系統呼叫、取得結果,然後發出「write」系統呼叫來複製。與 不同的是cp,您可以設定 的區塊大小dd,這就是為什麼dd傳統上一直用於複製區塊裝置。但今天,cp /dev/sdb /dev/sdc將做與 完全相同的事情dd,並且同樣快,因為現代版本cp(可能不像古代版本)也總是會讀取和寫入完整的區塊。

也沒有cp什麼dd特殊的東西來獲得“磁碟佈局”或類似的東西,它們只是讀取,直到作業系統發出信號表示它們已結束。

2)

一旦連接了外部驅動器,核心就會「攔截」此事件

內核並不真正攔截此事件,因為所有驅動程式層級的操作都已在核心中發生。因此,當您連接USB 設備時,USB 主機控制器硬體會注意到這一點,並產生一個中斷,並且USB 主機控制器驅動程式對此做出反應,然後USB 堆疊的各個部分開始列舉新設備,識別其類型,識別潛在的驅動程序,附加由這些驅動程式創建的新區塊設備等。

udev只是核心將這些事件傳遞給用戶空間的一種機制,因此用戶空間可以對它們做出反應,例如透過建立符號連結。

並通知 udev 系統始終在監聽,這要歸功於 udevd 守護程式。

Udisks是收集區塊設備資訊的實例。

udisks是桌面惡魔,桌面用來獲取有關塊設備的信息,因為桌面喜歡在D-Bus上做所有事情。udisks如果您沒有運行 D-Bus 桌面(事實上,它不在我的某些機器上運行),那麼您實際上並不需要。

透過 d-bus,任何人都可以連接到 udisk 並詢問當前的設備清單是什麼。

您可以透過其他方式同樣很好地做到這一點,例如查看/dev或 中的資訊/sys

整個 udev - udisk - Desktop 鏈只需要桌面即可知情的當新的區塊設備出現,或現有的區塊設備改變狀態時,桌面可以彈出精美的窗口,或其他什麼。如果您以傳統方式使用Linux,並且在將其插入USB記憶棒時不需要一個花哨的窗口,那麼您就不需要這個。

相關內容