No blktrace, a figura após + é o tamanho da requisição no tamanho do setor (que normalmente é de 512 bytes, você pode usar o comando blockdev --report para verificar)
Portanto, no seu rastreio, o total de leituras é de 16kbytes.
Então, por que há 4 'R' pedidos, a razão que eu posso pensar é ler em frente. Eu fiz um teste definindo read ahead para ser 512 bytes usando o seguinte comando:
blockdev --setra 1 /dev/sdd
Olhando para o read_ahead_kb mostra 0
more /sys/block/sdd/queue/read_ahead_kb
0
E o rastreio que recebo da execução do seu comando dd é o seguinte:
8,48 0 1 0.000000000 14412 Q R 0 + 8 [dd]
8,48 0 2 0.000002577 14412 G R 0 + 8 [dd]
8,48 0 3 0.000004467 14412 P N [dd]
8,48 0 4 0.000005627 14412 I R 0 + 8 [dd]
8,48 0 5 0.000007362 14412 U N [dd] 1
8,48 0 6 0.000008238 14412 D R 0 + 8 [dd]
8,48 0 7 0.018772074 0 C R 0 + 8 [0]
CPU0 (dd_bs1_c1):
Reads Queued: 1, 4KiB Writes Queued: 0, 0KiB
Read Dispatches: 1, 4KiB Write Dispatches: 0, 0KiB
Reads Requeued: 0 Writes Requeued: 0
Reads Completed: 1, 4KiB Writes Completed: 0, 0KiB
Read Merges: 0, 0KiB Write Merges: 0, 0KiB
Read depth: 1 Write depth: 0
IO unplugs: 1 Timer unplugs: 0
Então, por que ele lê 4kbytes em vez de 1 byte, eu acredito que isso é por causa do tamanho do bloco FS, que é de 4kBytes. Então é o mínimo que será lido.