udev, udisks, dbus 및 dd 명령

udev, udisks, dbus 및 dd 명령

새로운 장치(usb 스틱 또는 ide/sata hdd)가 PC에 연결될 때 운영 체제 수준에서, 즉 커널 수준에서 사용자 공간 수준으로 어떤 일이 일어나는지 더 잘 이해하고 싶습니다. 또한 "dd" 명령이 어느 수준에서 작동하는지 알고 싶습니다.

내가 이해한 것은 외부 드라이브가 연결되면 커널이 이 이벤트를 "가로채서" udevd 데몬 덕분에 항상 듣고 있는 udev 시스템에 알린다는 것입니다. Udisks는 블록 장치에 대한 정보를 수집하는 인스턴스입니다. Udisks에는 이를 위해 udev가 필요합니다. Udisks는 d-bus에 연결됩니다(dbus는 udisk에서만 사용되는 것이 아닙니다. 많은 프로그램이 정보 교환을 위해 dbus를 사용합니다). d-bus를 통해 누구나 udisk에 연결하고 현재 장치 목록이 무엇인지 물어볼 수 있습니다.

질문: dd 명령을 실행하면 d-bus에 연결되어 드라이브를 복사/이미지화할 수 있나요?

또한 Linux 레벨을 보여주는 Wikipedia에서 가져온 사진을 첨부합니다. 해당 사진에서 연결된 장치에서 시작하여 dd 명령 인스턴스까지의 경로를 알려주실 수 있나요?

미리 감사드립니다.

빈센조.

여기에 이미지 설명을 입력하세요

답변1

그것은 실제로 두 가지 질문입니다.

1)은 dd와 마찬가지로 일반 사용자 애플리케이션입니다 cp. 와 마찬가지로 cp"읽기" 시스템 호출을 실행하고 결과를 얻은 다음 "쓰기" 시스템 호출을 실행하여 복사합니다. 와 달리 cp블록 크기를 설정할 수 있기 dd때문에 dd전통적으로 블록 장치를 복사하는 데 항상 사용되었습니다. 그러나 오늘날 은 (고대 버전과 달리) 최신 버전도 항상 완전한 블록을 읽고 쓸 수 있기 때문에 cp /dev/sdb /dev/sdc와 똑같은 작업을 수행 dd하고 똑같이 빠르게 수행됩니다.cp

cp"디스크 레이아웃" 이나 그와 유사한 것을 얻기 위한 특별한 것도 아니고 dd운영 체제가 끝났다는 신호를 보낼 때까지 읽기만 합니다.

2)

외부 드라이브가 연결되면 커널은 이 이벤트를 "가로채기"합니다.

모든 드라이버 수준 작업이 이미 커널에서 발생하고 있으므로 커널은 실제로 이 이벤트를 가로채지 않습니다. 따라서 USB 장치를 연결하면 USB 호스트 컨트롤러 하드웨어가 이를 인식하고 인터럽트를 생성하고 USB 호스트 컨트롤러 드라이버가 이에 반응합니다. 그런 다음 USB 스택의 다양한 부분이 새 장치를 열거하고 유형을 식별하기 시작합니다. 잠재적인 드라이버를 식별하고 해당 드라이버에서 생성된 새 블록 장치를 연결하는 등의 작업을 수행합니다.

udev커널이 이러한 이벤트를 사용자 공간에 전달하는 메커니즘일 뿐이므로 사용자 공간은 예를 들어 심볼릭 링크를 생성하여 이에 반응할 수 있습니다.

udevd 데몬 덕분에 항상 듣고 있는 udev 시스템에 알립니다.

Udisks는 블록 장치에 대한 정보를 수집하는 인스턴스입니다.

udisks데스크탑은 D-Bus에서 모든 작업을 수행하는 것을 좋아하기 때문에 데스크탑이 블록 장치에 대한 정보를 얻기 위해 사용하는 데스크탑 악마입니다. D-Bus 데스크톱을 실행하지 않는 경우에는 실제로 필요하지 않습니다 udisks(그리고 실제로 일부 컴퓨터에서는 실행되지 않습니다).

d-bus를 통해 누구나 udisk에 연결하고 현재 장치 목록이 무엇인지 물어볼 수 있습니다.

/dev예를 들어 의 정보를 보거나 보는 등 다른 방법으로도 이 작업을 똑같이 잘 수행할 수 있습니다 /sys.

전체 udev - udisk - 데스크탑 체인은 데스크탑을 구성하는 데에만 필요합니다.잘 아는새로운 블록 장치가 나타나거나 기존 블록 장치의 상태가 변경되면 데스크탑에 멋진 창 등이 표시될 수 있습니다. 전통적인 방식으로 Linux를 사용하고 USB 스틱을 넣을 때 멋진 창이 필요하지 않다면 이것이 필요하지 않습니다.

관련 정보