Eu gostaria de copiar toda a hierarquia do sistema de arquivos de uma unidade para outra ... o conteúdo de cada diretório, bem como os arquivos regulares na plataforma Linux. Seria grato saber a melhor maneira de fazer isso com possíveis funções embutidas no Linux. O sistema de arquivos é uma família ext.
linux
filesystems
Malabarista
fonte
fonte
dd
?dd if=/dev/sda1 of=/dev/sdb1 bs=4096
conv=notrunc,noerror,sync
.dd
2 razões: primeiro, é uma má idéia executar uma cópia em nível de bloco de um sistema de arquivos montado (o que é o caso/
) e, em segundo lugardd
, não copiará dados de fontes montadas no sistema de arquivos como/boot
e/home
.Respostas:
Eu costumo usar
Presumindo / mnt é o novo disco montado em / mnt e não há outras montagens em /.
o -x mantém no sistema de arquivos único.
Obviamente, isso precisa ser feito como root ou usando o sudo.
Este link tem algumas alternativas, incluindo a acima
http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html
fonte
/
, excluindo ou seja/dev
,/sys
,/proc
etc. Portanto, antes da emissão quecp
eu sugiro à procura de melhores abordagens (também usando rsync)-x
flag por WolfJM significa que os sistemas de arquivos sintéticos mencionados não serão copiados.O que você quer é rsync .
Este comando pode ser usado para sincronizar uma pasta e também retomar a cópia quando ela for interrompida até a metade. O comando para copiar um disco é:
As opções são:
Para melhorar a velocidade da 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 uid / gid por nome de usuário / grupo.fonte
rsync -avxHAWX --numeric-ids --progress / mnt/
mas deveria ter feitorsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out
. Eu suspeito que derramar a saída no terminal atrasou o processo. : D--info=progress2
em vez de--progress
é útil para grandes transferências, pois fornece progresso geral, em vez de (milhões de linhas para) arquivos individuais.X
eA
comE
, porque atributos estendidos e ACLs são abordadosE
no meu mac. Testado:rsync version 2.6.9 protocol version 29
> ~/rsync.out
,2> ~/rsync.err
irá poupar nenhum erro em um arquivo separado./
, observe que ter uma barra final (ou não) no diretório de origem faz a diferença:rsync source/ dest/
copia tudosource/
para dentrodest/
, enquantorsync source dest/
copia a pastasource
e tudo para dentrodest/
.A resposta de Michael Aaron Safyan não explica arquivos esparsos.
-S
opção corrige isso.Além disso, essa variante não envia spam com o progresso de cada arquivo e não faz a sincronização delta, o que prejudica o desempenho em casos que não são da rede.
Perfeito para copiar sistema de arquivos de uma unidade local para outra unidade local.
fonte
55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
Para uma cópia local única de uma unidade para outra, acho que o cp é suficiente, conforme descrito por Wolfmann aqui acima.
Para trabalhos maiores, como backups locais ou remotos, por exemplo, o melhor é o rsync .
Obviamente, o rsync é significativamente mais complexo de usar.
Por que o rsync:
isso permite copiar (cópia sincronizada) toda ou parte de sua unidade A para a unidade B, com muitas opções, como excluir alguns diretórios da cópia (por exemplo, excluir / proc).
Outra grande vantagem é que essa ferramenta nativa monitora a transferência de arquivos: por exemplo, para transferências massivas, se a conexão for interrompida, ela continuará do ponto de interrupção.
E por último mas não menos importante, o rsync usa a conexão ssh, portanto, isso permite que você obtenha "cópias" seguras e sincronizadas remotas. Dê uma olhada na página de manual e aqui para alguns exemplos .
fonte
Como Michael Safyan sugere acima, eu usei
rsync
para esse fim. 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 no Gnome e Debian / Ubuntu, pois inclui subdiretórios de diretórios pessoais dos usuários que são específicos do Gnome, bem como o cache do pacote APT.
A última linha excluirá qualquer diretório chamado cache / Cache / .cache, que pode ser muito agressivo para alguns usos:
fonte
Adicionando dois bits úteis ao thread re rsync: alterando o código e usando
--update
:De acordo com o post de Wolfman,
cp -ax
é elegante e legal para coisas locais.No entanto,
rsync
é incrível também. Além da resposta de Michael-W
, alterar o código também pode acelerar as coisas (leia as implicações de segurança).Há alguma discussão (e benchmarks) em torno do local sobre uma CPU lenta ser o gargalo real, mas parece me ajudar quando a máquina é carregada fazendo outras coisas simultâneas.
Um dos outros grandes motivos para usar o rsync em uma cópia grande e recursiva como essa é por causa da opção -u (ou --update ). Se houver um problema durante a cópia, você poderá corrigi-lo e o rsync continuará de onde parou (não acho que o scp tenha isso). Fazendo-o localmente, o cp também possui uma opção -u.
(Não sei ao certo quais são as implicações de --update e --whole-file juntas, mas elas sempre parecem funcionar sensatamente para mim nesse tipo de tarefa)
Sei que isso não é um tópico sobre os recursos do rsync, mas alguns dos mais comuns que uso para isso são:
Aliás, se eu tiver que usar o Windows, uso o rsync da cygwin para fazer grandes cópias recursivas, por causa da morte cerebral do explorador querer começar do início (embora eu ache o Finder o OS X ainda pior)
fonte
rsync
De:
https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync
Página do Homem Aqui
fonte
Como mencionado nos comentários de juniorRubyist, a abordagem preferida aqui deve ser o uso
dd
. O principal motivo é o desempenho, é uma cópia bloco por bloco em vez de arquivo por arquivo.Clonando uma partição
Clonando um disco inteiro
Referências
fonte
dd
é uma péssima idéia por 2 motivos: primeiro, executar uma cópia em nível de bloco de um sistema de arquivos montado (o que é o caso/
) resultará mais do que provável em erros de destino no sistema de arquivos e, em segundo lugardd
, não copiará dados de fontes montadas em o sistema de arquivos como/boot
e/home
. Seu link é válido para clonagem de disco, não para "clonagem de hierarquia de arquivos"'dd' é incrível, mas o ddrescue (apt install gddrescue) é ainda melhor. Se o dd for interrompido, não há como reiniciar (outro bom motivo para usar o rsync). Quando você usa o ddrescue com um arquivo de log, ele controla quais blocos foram copiados.
Ao fazer backup de um sistema Windows / Linux de inicialização dupla, uso o ntfsclone para as partições do Windows e o ddrescue para a partição do Linux e o dd para o MBR. (Não tentei fazer backup de um sistema de inicialização dupla usando GPT / UEFI.)
O que eu adoraria ver é uma ferramenta ddrescue que pode criar arquivos como o ntfsclone, onde o espaço não alocado é marcado com caracteres de controle. Isso torna a imagem não montável diretamente, mas permite que ela seja tão grande quanto os dados contidos.
Alguém por favor venha com o "formato de imagem especial" ntfsclone para ddrescue ...
fonte
rsync
é a solução perfeita, conforme explicado acima.Eu apenas adicionaria
-S
para " manipular arquivos esparsos com eficiência ", caso haja um volume do dispositivo docker ou similar a ser copiado.fonte
Eu tentei os comandos rsync propostos aqui, mas finalmente obtive resultados muito mais limpos e rápidos
partclone
. Desmonte as partições de origem e destino e execute o seguinte:Isso executa as seguintes etapas:
O procedimento acima funciona caso a partição de destino seja do mesmo tamanho ou maior que a origem. Se o seu destino for menor que a origem (mas se encaixa em todos os dados), faça o seguinte:
resize2fs -M
reduz o sistema de arquivos ao tamanho mínimo antes de clonar os dados.Observe que
partclone
não é instalado por padrão na maioria dos sistemas. Use uma distribuição ao vivo como o clonezilla ou instale o partclone a partir do seu gerenciador de pacotes distros (apt-get install partclone
em sistemas baseados em debian).fonte