Copie a hierarquia inteira do sistema de arquivos de uma unidade para outra

80

Eu gostaria de copiar toda a hierarquia do sistema de arquivos de uma unidade para outra ... ou seja, o conteúdo de cada diretório, bem como arquivos regulares na plataforma Linux. Seria gratificante saber a melhor maneira de fazer isso com possivelmente funções internas do Linux. O sistema de arquivos é uma família ext.

    
por Juggler 07.07.2011 / 05:30

9 respostas

30

Eu geralmente uso

> cp -ax / /mnt

Presumindo / mnt é o novo disco montado em / mnt e não há outras montagens em /.

o -x o mantém no único sistema de arquivos.

Isso, obviamente, precisa ser feito como root ou usando o sudo.

Este link tem algumas alternativas, incluindo a acima

link

    
por 07.07.2011 / 05:42
167

O que você quer é rsync .

Este comando pode ser usado para sincronizar uma pasta e também retomar a cópia quando ela é abortada pela metade. O comando para copiar um disco é:

rsync -avxHAX --progress / /new-disk/

As opções são:

-a  : all files, with permissions, etc..
-v  : verbose, mention files
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)

Para melhorar a velocidade de cópia, adicione -W ( --whole-file ), para evitar o cálculo de deltas / diffs dos arquivos. Esse é o padrão quando a origem e o destino são especificados como caminhos locais, pois o benefício real do algoritmo de transferência delta do rsync é reduzir o uso da rede.

Considere também adicionar --numeric-ids para evitar o mapeamento de valores de uid / gid pelo nome do usuário / grupo.

    
por 07.07.2011 / 05:36
20

A resposta de Michael Aaron Safyan não conta para arquivos esparsos. A opção -S corrige isso.

Além disso, essa variante não envia spam com o progresso de cada arquivo e não faz sincronização delta, o que mata o desempenho em casos que não são de rede.

Perfeito para copiar o sistema de arquivos de uma unidade local para outra local.

rsync -axHAWXS --numeric-ids --info=progress2
    
por 05.03.2017 / 11:42
6

Para uma cópia local de um tiro de uma unidade para outra, acho que cp é suficiente conforme descrito por Wolfmann aqui acima.

Para trabalhos maiores, como backups locais ou remotos, por exemplo, o melhor é rsync .

Naturalmente, o rsync é significativamente mais complexo de usar.

Por que rsync:

  • isso permite que você copie (sincronizado copiar) todo ou parte de sua unidade A para unidade B, com muitas opções, como excluindo alguns diretórios do cópia (por exemplo excluindo / proc).

  • Outra grande vantagem é que isso ferramenta nativa monitora o arquivo transferência: por exemplo, para transferências massivas, se a conexão for interrompida, continuará do ponto de interrupção.

  • Por último, mas não menos importante, o rsync usa conexão ssh, então isso permite que você achive acesso remoto sincronizado "cópias". Dê uma olhada no homem página bem como aqui para alguns exemplos .

por 07.07.2011 / 22:53
3

Como Michael Safyan sugere acima, usei rsync para essa finalidade. Sugiro usar algumas opções adicionais para excluir diretórios que você provavelmente não deseja copiar.

Esta versão é bastante específica para sistemas baseados em Gnome e Debian / Ubuntu, já que inclui subdiretórios dos diretórios home dos usuários que são específicos para o Gnome, assim como o cache de pacotes APT.

A última linha exclui qualquer diretório chamado cache / Cache / .cache, que pode ser muito agressivo para alguns usos:

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache
    
por 06.02.2014 / 07:11
2

Adicionando dois bits úteis ao segmento re rsync: mudando o cypher e usando --update :

De acordo com a postagem de Wolfman, cp -ax é elegante e legal para coisas locais.

No entanto, rsync é incrível também. Além da resposta de Michael, re -W , alterar o código também pode acelerar as coisas (leia sobre quaisquer implicações de segurança).

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

Existe alguma discussão (e referências) sobre o local uma CPU lenta sendo o afunilamento real, mas parece me ajudar quando a máquina é carregada fazendo outras coisas concorrentes.

Uma das outras grandes razões para usar o rsync em uma grande cópia recursiva como essa é por causa da opção -u (ou - update ). Se houver um problema durante a cópia, você pode consertá-lo e o rsync irá continuar de onde parou (não acho que o scp tenha isso). Fazendo isso localmente, o cp também possui um switch -u.

(Não estou certo de quais são as implicações de --update e --whole-file juntos, mas elas sempre parecem funcionar sensatamente para mim nesse tipo de tarefa)

Eu percebo que isso não é um tópico sobre os recursos do rsync, mas alguns dos mais comuns que uso para isso são:

  • - delete-after etc (como Michael mencionou no follow-up), se você quiser sincronizar o novo sistema de volta ao local original ou algo parecido. E
  • - excluir - para ignorar diretórios / arquivos, para instâncias como copiar / criar um novo sistema para um novo local, ignorando diretórios de usuário, etc (ou você está montando casas de outro lugar ou criando novos usuários etc).
Aliás, se eu tiver que usar o windows, eu uso o rsync do cygwin para fazer grandes cópias recursivas, porque o explorer está com uma morte cerebral que quer começar do começo (embora eu ache que o Finder é o OS X ainda pior)

    
por 20.03.2012 / 00:53
2

rsync

"This approach is considered to be better than disk cloning with dd since it allows for a different size, partition table and filesystem to be used, and better than copying with cp -a as well, because it allows greater control over file permissions, attributes, Access Control Lists (ACLs) and extended attributes."

De:

link

Página de Homem Aqui

    
por 18.05.2015 / 17:45
0

rsync é a solução perfeita, conforme explicado acima.

Acabei de adicionar -S a " manipular arquivos esparsos com eficiência " caso haja um volume docker devicemapper ou semelhante a ser copiado.

    
por 07.08.2015 / 20:04
0

Como mencionado nos comentários por juniorRubyist, a abordagem preferida aqui deve ser usar dd . A principal razão é o desempenho, é uma cópia bloco a bloco, em vez de arquivo por arquivo.

Clonando uma partição

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

Clonando um disco inteiro

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

Referências

  1. link
por 14.06.2018 / 19:30