Em linhas gerais é isso mesmo que você disse.
Na relação de opções mais comuns vem dito assim:
bs=BYTES
read and write up to BYTES bytes at a time
Na documentação consta:
‘bs=bytes’
Set both input and output block sizes to bytes. This makes dd read and write bytes per block, overriding any ‘ibs’ and ‘obs’ settings. In addition, if no data-transforming conv option is specified, input is copied to the output as soon as it’s read, even if it is smaller than the block size.
Geralmente uso mesmo 1M, mas é mais por comodidade de padronização do que verificação real de qual valor de block size seria mais adequado.
Entretanto, querendo, isso pode ser testado conforme o específico hardware.
Claro que se tiver mesmo uma imensidão de dados a serem copiados, pode até compensar testar, porém nesses casos possivelmente será melhor usar um software especialista como o Clonezilla.