Melhor maneira de copiar grandes quantidades de dados entre partições

Melhor maneira de copiar grandes quantidades de dados entre partições

Estou procurando transferir dados em 2 níveis de um servidor HP-UX. Tenho algumas dessas transferências para fazer, algumas das quais são em sua maioria binárias (espaço de tabela Oracle...) e outras são mais arquivos de texto (logs...). O tamanho dos dados usados ​​dos volumes está entre 100 Gb e 1 TB. Além disso, mudarei o tamanho do bloco de 1K para 8K em algumas dessas partições...

Coisas que procuro:

  • Garante a integridade dos dados
  • Velocidade de transferência de dados mais rápida
  • Mantém a propriedade e as permissões dos arquivos

No momento, pensei em dd, cp e rsync, mas não tenho certeza sobre qual deles usar e a melhor maneira de usá-los...

Responder1

Você não quer usar dd. Isso serve para trabalhar em um arquivo ou fluxo, não em um sistema de arquivos inteiro.

O rsync foi projetado para fazer o que você deseja, mas como afirmou o postador anterior e como meus testes mostraram, não é o mais rápido. Isso porque serve para fazer algo assim: "Ok, estou olhando o arquivo A. O arquivo A está no destino? Em caso afirmativo, é mais novo, mais antigo, o mesmo?" Etc. rsync é um pouco complicado porque deve ser executado mais de uma vez... como o nome diz, é para sincronizar dois locais.

Para fazer o tipo de coisa que você deseja, descobri que uma cópia tar é rápida, fácil e confiável. Tar conhece links físicos. Tar sabe sobre dispositivos. Tar lida com quase qualquer situação que você encontrar em seu sistema de arquivos (exceto caminhos muito longos e, se você não estiver usando o Gnu tar, você pode precisar ter cuidado ao colocar um / no início do seu nome de caminho).

De qualquer forma, tive 99,98% de sucesso nos últimos 20 anos fazendo o seguinte:

cd /my/source; tar cf - subdirectory | (cd /destination/path; tar xf -)

...O subdiretório que você deseja copiar aparecerá em /destination/path .

Se você gosta de acompanhar seu progresso, pode usar “xvf” em vez de “xf” na última parte dessa string.

... minhas falhas de 0,02% vieram de caminhos de arquivos muito longos... :-(

Tar não garante a integridade do arquivo. Dito isto, desde que você não veja nenhuma mensagem de erro, considero-o muito confiável. Ele manterá as permissões e a propriedade de maneira adequada.

MAS! Sua postagem menciona especificamente a integridade do arquivo e peço desculpas por não incluir uma solução em minha resposta há muitos anos atrás...

Depois do alcatrão, eu simplesmente faço isso. Finja que fiz um

cd /path/to/source/dir; tar cf - * | (cd /path/to/dest/dir; tar xf -)

Agora, a garantia do seu arquivo pode ser feita assim:

find * -exec md5sum {} /path/to/dest/dir/{} \; > /path/to/dest/dir/md5-manifest.txt

Quando terminar, você pode examinar o arquivo de manifesto ou escrever um script awk (deixado como exercício para o usuário) para comparar a saída de duas linhas dos comandos find/md5sum.

Responder2

Dê uma olhada emesta postagem. Algumas respostas sugeriram o uso de tar. Outros sugeriram usar rsync. Eles estão tratando de copiar dados entre duas máquinas. Seu problema é semelhante, mas você precisa copiar os arquivos localmente em vez de fazê-lo pela rede.

Responder3

Eu recomendaria usar o rsync, pois possui recursos que abordam especificamente a maioria das suas preocupações. Se você usar opções apropriadas (por exemplo, a -aopção), todas as propriedades, permissões e horários dos arquivos serão preservados. Além disso, rsyncusa automaticamente somas de verificação para garantir que todos os arquivos transferidos cheguem intactos ao destino, garantindo assim a integridade dos dados (presumindo uma execução bem-sucedida).

O único ponto ondersync poderianão ser ideal é a velocidade, principalmente quando comparada a uma alternativa mais leve como o cp, mas duvido que você notaria muita diferença, a menos que seu poder de processamento seja muito baixo.

Responder4

Você basicamente tem três opções:

  1. Copie toda a partição/dispositivo de bloco
  2. Despejar todo o sistema de arquivos
  3. Copie os dadosdentroo sistema de arquivos

Selecione uma das três opções dependendo do que você teve que fazer backup e dos resultados que deseja obter. Para o seu caso específico, acho que a opção n.1 (bloquear cópia do dispositivo) juntamente comddrescueé o caminho a seguir. De qualquer forma, vamos ver uma coleção de opções disponíveis.

Caso 1: cópia da partição
PRO: copiando um dispositivo de bloco inteiro, você tem certeza de que a anotação foi deixada para trás.
CON: incomodar-se com dispositivos de bloco é menos conveniente do que trabalhar com arquivos; selecionar o dispositivo de bloco ou opções erradas pode destruir seus dados.

Se você quiser ter uma cópia binária de um bloco inteiro dev, você terá que usar dd ou ferramenta similar. Outras ferramentas muito úteis sãodcfldd(um fork dd pronto para hash) eddrescue(uma ferramenta semelhante ao dd ainda mais avançada).

Caso 2: despejo do sistema de arquivos
PRO: copiando um sistema de arquivos inteiro, você tem certeza de que todos os dados e metadados dentro dele foram salvos em backup.
CON: se você tiver vários sistemas de arquivos para fazer backup, será necessário fazer várias passagens (uma para o sistema de arquivos)
Uma ferramenta útil para lidar com sistemas de arquivos éArquivo FSA. Além disso, muitos sistemas de arquivos possuem utilitários integrados para despejar seu conteúdo de maneira eficiente (por exemplo: XFS tem xfsdump, Ext2/3/4 usa dumpe2fs, e assim por diante).

Caso 3: copie os dados dentro do sistema de arquivos
PRO: copiando dados de dentro do sistema de arquivos, você pode selecionar especificamente o que deseja fazer backup. Isso garante tempo rápido de backup/restauração e pequenas imagens de backup.
CON: Você tinha que saber perfeitamente o que fazer backup e como. Cuidados especiais devem ser tomados com metadados importantes (ex.: proprietário, permissão, ACLs, EAs...)
Sincronizar novamenteé seu melhor amigo aqui.Rinstantâneoerdiff-backupsão ferramentas maravilhosas construídas sobre rsync/librsync.Alcatrãoé a faca suíça de qualquer administrador de sistema Unix.

informação relacionada