Это зависит от конкретного драйвера и типа устройства. Для устройства SCSI команды SCSI идут в драйвер устройства. Они генерируются на уровне SCSI и отправляются на устройство драйвером устройства, а затем на устройство.
Существует много абстракций от системного вызова sys_write до тех пор, пока данные не будут отправлены на устройство, а сам драйвер устройства может даже не знать, что он выполняет запись.
Для редактирования взгляните на blktrace:
http://linux.die.net/man/8/blktrace
Хорошо, еще один ответ; вам понравится этот лучше. Это происходит в generic_make_request. Комментарии довольно наглядны:
http://lxr.linux.no/#linux+v2.6.32/block/blk-core.c#L1380
Биоструктура в этой функции, видимая здесь:
http://lxr.linux.no/#linux+v2.6.32/include/linux/bio.h#L58
показывает bio_vec, который является списком материалов, отправляемых на устройство.
q-> make_request_fn (q, bio); фактический вызов указателя функции на само устройство.
http://lxr.linux.no/#linux+v2.6.32/include/linux/types.h#L126
Показывает, как индексы используются для записи в раздел. Вы должны заметить, что это не только используется для записи.