Você não quer usar o dd. Isso é para trabalhar em 1 arquivo ou fluxo, não em um sistema de arquivos inteiro.
O rsync foi projetado para fazer o que você quer, mas como o pôster anterior afirmou, e como meus testes mostraram, não é o mais rápido. Isso porque é para fazer algo assim: "Ok, estou vendo o arquivo A. O arquivo A está no destino? Em caso afirmativo, é mais recente, mais antigo, o mesmo?" Etc. rsync é um pouco complicado, porque é para ser executado mais de uma vez ... como o nome diz, é para sincronizar dois locais.
Para fazer o tipo de coisa que você quer, eu encontrei uma cópia tar para ser rápida, fácil e confiável. Tar sabe sobre hard links. Tar sabe sobre dispositivos. O Tar manipula quase todas as situações que você encontrar no seu sistema de arquivos (exceto caminhos muito longos, e, se você não estiver usando o Gnu, você pode precisar tomar cuidado em colocar / no início do seu nome de caminho).
De qualquer forma, obtive 99,98% de sucesso nos últimos 20 anos fazendo isso:
cd / my / source; tar cf - subdiretório | (cd / destination / path; tar xf -)
... O subdiretório que você deseja copiar aparecerá em / destination / path.
Se você gosta de assistir ao seu progresso, você pode usar "xvf" em vez de "xf" na última parte da string.
... minhas falhas de 0,02% vieram de caminhos de arquivos realmente longos ...: - (
O tar não garante a integridade dos arquivos. Dito isso, desde que você não veja nenhuma mensagem de erro, descobri que ela é muito confiável. Ele manterá as permissões e a propriedade de maneira adequada.