Um sniplet de código personalizado e não testado está chegando:
dd if=oldf conv=sparse bs=1k count=3000000000 of=newf &
dd if=oldf conv=sparse bs=1k skip=3000000000 count=3000000000 seek=3000000000 of=newf &
dd if=oldf conv=sparse bs=1k skip=6000000000 count=3000000000 seek=6000000000 of=newf &
dd if=oldf conv=sparse bs=1k skip=9000000000 count=3000000000 seek=9000000000 of=newf &
wait
Isso deve dividir logicamente o arquivo em quatro blocos de 3 TB
e processá-los em paralelo.
( skip=
pula os blocos de entrada; seek=
procura os blocos de saída.)
O quarto comando irá, é claro, ler até o final do arquivo antigo, então o parâmetro count=
não é estritamente necessário.