Eu criei uma ferramenta python que pode fazer isso. Fiz isso porque tentei a abordagem do @Thomas Luzat tanto na minha implementação quanto na do @Johannes Ernst, e o espaço usado dobrou de 20 GB para 40 GB no procedimento de clonagem. Eu pensei que algo mais eficiente era necessário.
Considere este histórico comum do sistema de arquivos:
current ---------------------------------\
| | | |
snap4 snap3 snap2 snap1
Com o algoritmo de Thomas, "atual" seria clonado primeiro e todos os instantâneos (sendo instantâneos de estados anteriores de "atual") usariam "atual" como origem / pai do clone. Obviamente, seria melhor basear o snap3 no snap4, snap2 no snap3, etc.
E isso é só o topo do iceberg; encontrar as "melhores" fontes de clones (em termos de economia de espaço) em um sistema de arquivos btrfs com um histórico complexo é um problema não trivial. Eu criei outras três estratégias para resolver esse problema, que parecem usar o espaço com muito mais eficiência. Na verdade, resultou no tamanho dos clones um pouco abaixo do da fonte.
Você pode ler os detalhes na página do github, se estiver interessado.