Como mover diretórios que possuem arquivos em comum de uma partição para outra?
Vamos supor que tenhamos uma partição montada /mnt/X
com diretórios que compartilham arquivos com hardlinks. Como mover esses diretórios para outra partição, /mnt/Y
preservando esses hardlinks.
Para uma melhor ilustração, o que quero dizer com "diretórios que compartilham arquivos em comum com hardlinks", aqui está um exemplo:
# let's create three of directories and files
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
# and copy it with hardlinks
cp -r -l a hardlinks_of_a
Para ser mais específico, vamos supor que o tamanho total dos arquivos seja 10G e cada arquivo tenha 10 links físicos. A questão é como movê-lo para o destino usando 10G (alguém pode dizer sobre copiá-lo com 100G e depois executar a desduplicação - não é isso que estou perguntando)
O rsync tem uma opção
-H
ou--hard-links
, e tem os benefícios usuais do rsync de poder ser parado e reiniciado e ser reexecutado para lidar com eficiência com qualquer arquivo que foi alterado durante / após a execução anterior.Leia a
rsync
página do manual e procure -H. Há muito mais detalhes sobre advertências específicas.fonte
man rsync
: a partir do rsync 3.0.0, o algoritmo recursivo usado agora é uma varredura incremental que utiliza muito menos memória do que antes e inicia a transferência após a varredura dos primeiros diretórios. Essa varredura incremental afeta apenas nosso algoritmo de recursão e não altera uma transferência não recursiva. Também é possível apenas quando as duas extremidades da transferência são pelo menos a versão 3.0.0. Observe que ambos--delete-before
e--delete-after
desativar esse algoritmo aprimorado.rsync
seja incrivelmente útil também, nem sempre é a melhor ferramenta para todos os trabalhos. Hoje em dia, prefiro usar conjuntos de dados do ZFS para poder fazer uma captura instantânea ezfs send
eles - eu uso principalmente o rsync em sistemas de arquivos não-ZFS.btrfs
possui um instantâneo semelhante + capacidade de envio.Terceira resposta: o caminho POSIX
O POSIX não padronizou o
tar
utilitário, apesar de padronizar otar
formato de arquivo. O utilitário POSIX para manipulação de arquivos tar é chamadopax
e possui o recurso de bônus de poder fazer a operação de empacotamento e descompactação em um único processo.fonte
Segunda resposta: O caminho antigo do UNIX
Crie um arquivo tar no diretório de origem, envie-o por um pipe e descompacte-o no diretório de destino.
fonte
tar
preserva links físicos. No tar GNU, pelo menos, você pode desabilitar esse comportamento com--hard-dereference
tar x
não tem a lista completa de arquivos, pois os arquivos ainda estão sendo canalizados a partir dotar c
. Provavelmente, se você salvou o arquivo inteiro antes de extraí-lo, tudo bem. Eu ficaria muito feliz se alguém pudesse confirmar essa teoria.Fonte: http://www.cyberciti.biz/faq/linux-unix-apple-osx-bsd-rsync-copy-hard-links/
O que você precisa para fazer uma cópia exata é
fonte