Udev

udev、udisks、dbus 和 dd 命令

  • November 27, 2017

我很想更好地了解在作業系統級別,當新設備(usb 記憶棒或 ide/sata hdd)插入 PC 時會發生什麼,即從核心級別到使用者空間級別。此外,我想知道“dd”命令在哪個級別起作用。

我的理解是,一旦連接了外部驅動器,核心“攔截”此事件並通知 udev 系統,由於 udevd 守護程序,該系統一直在監聽。Udisks 是收集塊設備資訊的實例。Udisks 為此需要 udev。Udisks 連接到 d-bus(dbus 不僅僅是 udisk 使用的東西;許多程序使用 dbus 來交換資訊)。通過 d-bus,任何人都可以連接到 udisk 並詢問目前的設備列表是什麼。

問題:當我啟動 dd 命令時,它是否連接到 d-bus 以複製/映像驅動器?

我還附上了一張從維基百科拍攝的圖片,顯示了 linux 級別。請你告訴我,在那張照片上,從附加設備開始到 dd 命令實例的路徑?

提前致謝。

文森佐。

在此處輸入圖像描述

這真的是兩個問題:

1)dd是一個普通的使用者應用程序,就像cp. 就像 一樣cp,它通過發出“讀取”系統呼叫、獲取結果,然後發出“寫入”系統呼叫來進行複制。與 不同cp,您可以為 設置塊大小dd,這就是dd傳統上一直用於複製塊設備的原因。但是今天,cp /dev/sdb /dev/sdc它將做與 完全相同的事情dd,並且同樣快,因為現代版本cp(可能不像古代版本)也總是會讀取和寫入完整的塊。

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

一旦連接了外部驅動器,核心“攔截”此事件

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

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

並通知 udev 系統,感謝 udevd 守護程序,該系統一直在監聽。

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

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

通過 d-bus,任何人都可以連接到 udisk 並詢問目前的設備列表是什麼。

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

整個 udev - udisk - Desktop 鏈只需要在出現新塊設備或現有塊設備更改狀態時通知桌面,因此桌面可以彈出花哨的視窗或其他任何東西。如果您以傳統方式使用 Linux,並且在將其放入 USB 記憶棒時不需要花哨的視窗,則不需要這個。

引用自:https://unix.stackexchange.com/questions/407205