Sim, a ideia está certa, mas o comando é ruim. Se houver mesmo um erro de leitura, o comando dd irá ignorar um byte que fará com que o esquema de particionamento para estar com defeito. Você precisa especificar que cada byte é copiado para o mesmo local físico (desde o início).
$ dd if=/dev/oldsataspinningdisk of=/dev/newssd bs=64K conv=noerror,sync