Estou arquivando dados de um servidor para outro. Inicialmente comecei um rsync
trabalho. Demorou 2 semanas para criar a lista de arquivos apenas para 5 TB de dados e outra semana para transferir 1 TB de dados.
Então tive que encerrar o trabalho, pois precisamos de um tempo de inatividade no novo servidor.
Foi acordado que vamos descompactá-lo, pois provavelmente não precisaremos acessá-lo novamente. Eu estava pensando em dividi-lo em pedaços de 500 GB. Depois tar
disso, eu iria copiá-lo através de ssh
. Eu estava usando tar
e pigz
mas ainda é muito lento.
Existe uma maneira melhor de fazer isso? Acho que ambos os servidores estão no Redhat. O servidor antigo é Ext4 e o novo é XFS.
Os tamanhos dos arquivos variam de alguns kb a poucos mb e há 24 milhões de jpegs em 5 TB. Então, estou supondo que cerca de 60-80 milhões por 15 TB.
editar: Depois de brincar com rsync, nc, tar, mbuffer e pigz por alguns dias. O gargalo será o disco IO. Como os dados são distribuídos em 500 discos SAS e cerca de 250 milhões de jpegs. No entanto, agora aprendi sobre todas essas ferramentas legais que posso usar no futuro.
Tive resultados muito bons usando
tar
,pigz
(gzip paralelo) enc
.Máquina de origem:
Máquina de destino:
Extrair:
Para manter o arquivo:
Se você quiser ver a taxa de transferência, basta canalizar
pv
depoispigz -d
!Eu ficaria com a solução rsync. O rsync moderno (3.0.0+) usa lista de arquivos incremental, portanto, não precisa criar uma lista completa antes da transferência. Portanto, reiniciá-lo não exigirá que você faça toda a transferência novamente em caso de problemas. Dividir a transferência por diretório de nível superior ou secundário otimizará isso ainda mais. (Eu usaria
rsync -a -P
e acrescentaria--compress
se sua rede for mais lenta que suas unidades.)Configure uma VPN (se for internet), crie uma unidade virtual de algum formato no servidor remoto (torne-a ext4), monte-a no servidor remoto e, em seguida , monte-a no servidor local (usando um protocolo de nível de bloco como iSCSI ) e use dd ou outra ferramenta de nível de bloco para fazer a transferência. Você pode então copiar os arquivos da unidade virtual para a unidade real (XFS) conforme sua conveniência.
Duas razões:
Se o servidor antigo estiver sendo desativado e os arquivos puderem ficar off-line por alguns minutos, geralmente é mais rápido apenas retirar as unidades da caixa antiga e conectá-las ao novo servidor, montá-las (voltar a ficar on-line agora) e copiar os arquivos aos discos nativos dos novos servidores.
Use o mbuffer e, se estiver em uma rede segura, você pode evitar a etapa de criptografia.
(Muitas respostas diferentes podem funcionar. Aqui está outra.)
Gere a lista de arquivos com
find -type f
(isso deve terminar em algumas horas), divida-a em pequenos pedaços e transfira cada pedaço usandorsync --files-from=...
.Já pensou no tênisnet? Com isso, quero dizer transferir tudo para a mesma unidade e, em seguida, mover fisicamente essa unidade.
cerca de um mês atrás, a Samsung lançou uma unidade de 16 TB (tecnicamente, é 15,36 TB), que também é um SSD: http://www.theverge.com/2015/8/14/9153083/samsung-worlds-largest-hard -drive-16tb
Eu acho que esta unidade serviria para isso. Você ainda teria que copiar todos os arquivos, mas como não tem latência de rede e provavelmente pode usar SATA ou uma técnica igualmente rápida, deve ser muito mais rápido.
Se houver alguma chance de obter uma alta taxa de sucesso durante a desduplicação, eu usaria algo como borgbackup ou Attic.
Caso contrário, verifique a solução netcat+tar+ pbzip2 , adapte as opções de compactação de acordo com seu hardware - verifique qual é o gargalo (CPU? rede? IO?). O pbzip2 abrangeria perfeitamente todas as CPUs, proporcionando melhor desempenho.
Você está usando o RedHat Linux, então isso não se aplica, mas como outra opção:
Tive grande sucesso usando o ZFS para armazenar milhões de arquivos, pois os inodes não são um problema.
Se essa fosse uma opção para você, você poderia tirar instantâneos e usar o zfs para enviar atualizações incrementais. Tive muito sucesso usando esse método para transferir e arquivar dados.
O ZFS é principalmente um sistema de arquivos Solaris, mas pode ser encontrado no illusmos (bifurcação de código aberto do OpenSolaris da Sun). Eu sei que também houve alguma sorte em usar o ZFS no BSD e no Linux (usando o FUSE?) - mas não tenho experiência em tentar isso.
Inicie um
rsync
daemon na máquina de destino. Isso vai acelerar muito o processo de transferência.