udev, udisks, dbus и команда dd

udev, udisks, dbus и команда dd

Мне интересно лучше понять, что происходит на уровне операционной системы, когда новое устройство (usb-флешка или ide/sata hdd) подключается к ПК, то есть от уровня ядра до уровня пользовательского пространства. Кроме того, я хотел бы узнать, на каком уровне работает команда "dd".

Насколько я понял, после подключения внешнего диска ядро ​​«перехватывает» это событие и информирует систему udev, которая всегда слушает благодаря демону udevd. Udisks — это экземпляр для сбора информации о блочных устройствах. Для этого Udisks нужен udev. Udisks подключен к d-bus (dbus используется не только udisks; многие программы используют dbus для обмена информацией). Через d-bus любой может подключиться к udisks и узнать текущий список устройств.

Вопрос: когда я запускаю команду dd, возможно, она подключается к d-bus для копирования/создания образа диска?

Я также прилагаю картинку из википедии, которая показывает уровни linux. Можете ли вы сказать мне, пожалуйста, на этой картинке путь, начинающийся от подключенного устройства до экземпляра команды dd?

Заранее спасибо.

Винченцо.

введите описание изображения здесь

решение1

На самом деле это два вопроса:

1) dd— это обычное пользовательское приложение, как и cp. Как и cp, он копирует, выдавая системные вызовы «чтение», получая результат, а затем выдавая системные вызовы «запись». В отличие от 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 любой может подключиться к udisks и запросить текущий список устройств.

Вы можете сделать это с тем же успехом другими способами, например, просмотрев /devили прочитав информацию в /sys.

Вся цепочка udev - udisk - Desktop нужна только для того, чтобы рабочий стол былинформированныйкогда появляются новые блочные устройства или существующее блочное устройство меняет состояние, так что на рабочем столе могут всплывать красивые окна или что-то еще. Если вы используете Linux традиционным способом и вам не нужно красивое окно, когда вы вставляете его на USB-накопитель, вам это не нужно.

Связанный контент