2011-07-07 03:30:57 +0000 2011-07-07 03:30:57 +0000
100
100

Copiar toda a hierarquia do sistema de ficheiros de uma unidade para outra

Gostaria de copiar toda a hierarquia do sistema de ficheiros de uma unidade para outra…isto é, o conteúdo de cada directório, bem como os ficheiros regulares na plataforma Linux. Gostaria de saber qual a melhor maneira de o fazer com as funções eventualmente integradas em Linuxes. O sistema de ficheiros é uma família ext.

Respostas (11)

208
208
208
2011-07-07 03:36:43 +0000

O que pretende é rsync .

Este comando pode ser usado para sincronizar uma pasta, e também retomar a cópia quando esta é abortada a meio caminho. 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, adicionar -W (--whole-file), para evitar o cálculo de deltas/diff dos ficheiros. Este é o padrão quando tanto a fonte como o destino são especificados como caminhos locais, uma vez que o benefício real do algoritmo de transferência de deltas do rsync é a redução da utilização da rede.

Considere também adicionar --numeric-ids para evitar mapear os valores uid/gid por nome de utilizador/grupo.

56
56
56
2017-03-05 10:42:04 +0000

A resposta de Michael Aaron Safyan não é responsável por arquivos esparsos. -S a opção corrige isso.

Também esta variante não faz spam com o progresso de cada ficheiro e não faz sincronização delta que mata o desempenho em casos não-rede.

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

rsync -axHAWXS --numeric-ids --info=progress2
35
35
35
2011-07-07 03:42:40 +0000

Utilizo frequentemente

> cp -ax / /mnt

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

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

Isto, claro, precisa de ser feito como raiz ou usando sudo.

Esta ligação tem algumas alternativas, incluindo a acima http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html

6
6
6
2011-07-07 20:53:25 +0000

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

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

Claro, o rsync é significativamente mais complexo de usar.

Porque rsync :

  • isto permite-lhe copiar (cópia sincronizada) toda ou parte da sua unidade A para a unidade B, com muitas opções, como excluir alguns directórios da cópia (por exemplo, excluindo /proc).

  • Outra grande vantagem é que esta ferramenta nativa monitoriza a transferência de ficheiros: por exemplo, para transferências massivas, se a ligação for interrompida, ela continuará a partir do ponto de interrupção.

  • E por último, mas não menos importante, o rsync utiliza a ligação ssh, pelo que isto permite obter “cópias” remotas sincronizadas e seguras. Veja a página man assim como aqui para alguns exemplos .

5
5
5
2014-02-06 06:11:42 +0000

Como Michael Safyan sugere acima, eu usei rsync para este fim. Sugiro a utilização de algumas opções adicionais para excluir directórios que provavelmente não queira copiar.

Esta versão é bastante específica dos sistemas Gnome- e Debian/Ubuntu, uma vez que inclui subdirectórios de directórios domésticos dos utilizadores que são específicos do Gnome, bem como a cache de pacotes APT.

A última linha excluirá qualquer directório chamado cache/Cache/.cache, que pode ser demasiado 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
2
2
2
2012-03-19 23:53:05 +0000

Adicionando dois bits úteis ao rsync do fio: mudança de cifra, e usando --update:

Conforme o posto de Wolfman, cp -ax é elegante, e fresco para coisas locais.

No entanto, rsync também é espectacular. Para além da resposta de Michael é -W&, mudar a cifra também pode acelerar as coisas (ler sobre quaisquer implicações de segurança, no entanto).

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

alguma discussão (e pontos de referência) à volta do local sobre um CPU lento ser o verdadeiro ponto de estrangulamento, mas parece ajudar-me quando a máquina é carregada a fazer outras coisas concorrentes.

Uma das outras grandes razões para utilizar rsync numa cópia grande e recorrente como esta é devido à mudança -u* (ou –update). Se houver um problema durante a cópia, pode resolvê-lo, e o rsync vai pegar onde parou (acho que o scp não tem isto). Fazendo-o localmente, o cp também tem um interruptor -u.

(não tenho a certeza de quais são as implicações de –actualização e –arquivo completo juntos, mas parecem sempre funcionar sensatamente para mim neste tipo de tarefa)

Percebo que isto não é um fio condutor sobre as características do rsync, mas algumas das mais comuns que utilizo para isto são:

  • –delete-after etc (como Michael mencionou no seguimento), se quiser sincronizar o novo sistema de volta ao local original ou algo do género. E,
  • –excluir - para saltar directórios/ficheiros, para casos como copiar/criar um novo sistema para um novo local enquanto salta directórios de casa de utilizadores, etc (ou está a montar casas a partir de outro local, ou a criar novos utilizadores, etc).

A propósito, se alguma vez tiver de usar janelas, uso rsync do cygwin para fazer grandes cópias recursivas, devido ao facto de o explorador estar ligeiramente morto de cérebro querendo começar do início (embora eu ache que o Finder é o OS X ainda pior)

2
2
2
2015-05-18 15:45:08 +0000

rsync

“Esta abordagem é considerada melhor que a clonagem de disco com dd, uma vez que permite a utilização de um tamanho diferente, tabela de partições e sistema de ficheiros, e melhor que a cópia com cp -a também, porque permite um maior controlo sobre as permissões, atributos, Listas de Controlo de Acesso (ACLs) e atributos alargados”.

From: https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync

Man Page Aqui

2
2
2
2018-06-14 17:30:20 +0000

Tal como mencionado nos comentários do juniorRubyist, a abordagem preferida aqui deve ser a de utilizar dd. A principal razão é o desempenho, é uma cópia bloco por bloco em vez de ficheiro por ficheiro.

Clonar uma partição

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

Clonar um disco inteiro*

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

Referências

  1. https://wiki.archlinux.org/index.php/disk_clonagem
1
1
1
2019-01-27 21:53:49 +0000

O ‘dd’ é espectacular, mas o ddrescue (apt install gddrescue) é ainda melhor. Se o dd for interrompido, não há maneira de reiniciar (outra boa razão para usar o rsync). Quando se utiliza ddrescue com um ficheiro de registo, este mantém um registo de quais os blocos que foram copiados.

Ao fazer o backup de um sistema Windows/Linux dual boot, utilizo ntfsclone para as partições Windows e ddrescue para a partição Linux e dd para o MBR. (Não tentei fazer o backup de um sistema de boot duplo usando GPT/UEFI.)

O que eu gostaria de ver é uma ferramenta ddrescue que pode criar ficheiros como ntfsclone onde o espaço não atribuído é marcado com caracteres de controlo. Isto torna a imagem não directamente montável, mas permite que seja apenas tão grande como os dados contidos.

Alguém que, por favor, crie o ntfsclone “formato de imagem especial” para ddrescue…

1
1
1
2019-07-31 21:30:35 +0000

Tentei os comandos rsync propostos aqui mas acabei por obter resultados muito mais limpos e rápidos com partclone . Desmontar as partições fonte e alvo e depois executar o seguinte:

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

Isto executa os seguintes passos:

  1. clonar (apenas as partes usadas de) a partição
  2. certificar-se de que o sistema de arquivo é o.k. (resize2fs reforça este passo)
  3. redimensionar a partição para o novo sistema de arquivo

O acima funciona no caso da partição alvo ser do mesmo tamanho ou maior do que a fonte. Se o seu alvo for menor do que a fonte (mas se ajustar a todos os dados), então faça o seguinte:

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M reduz o sistema de ficheiros ao tamanho mínimo antes de clonar os dados.

Note-se que partclone não é instalado por defeito na maioria dos sistemas. Use uma distro ao vivo como clonezilla ou instale o partclone do seu gestor de pacotes distros (apt-get install partclone em sytsems baseados em debian).

0
0
0
2015-08-07 18:04:55 +0000

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

Eu apenas adicionaria -S a “manusear ficheiros esparsos de forma eficiente” no caso de haver um volume de devicemapper de doca ou similar para ser copiado.