Qual é o efeito de copiar um arquivo, digamos fileA.big (900mb) do local B para o localC. Se durante essa operação cp, digamos 35% durante o processo, fileA.big for anexado com novas informações e crescer de 900mb para 930mb.
Qual é o resultado da cópia final (ou seja, arquivoA.big no localC)?
E se a cópia estiver concluída em cerca de 70% e o arquivo original for atualizado, mas desta vez truncado para 400mb (ou seja, o progresso da cópia estiver além do ponto de truncamento), qual é o resultado da cópia final?
Referindo-se a um sistema operacional Linux em um sistema de arquivos ext3 / ext4. Sem volume sombra mágica etc .. Simplesmente velho cp. Curiosidade provocada pela cópia de arquivos couchdb ao vivo para backup, mas mais interessados em cenários gerais do que em casos de uso específicos.
Respostas:
Se
fileA.big
crescer durante a cópia, a cópia incluirá os dados que foram anexados.Se o arquivo for truncado mais curto do que o local da cópia, a cópia será cancelada exatamente onde está e o arquivo de destino conterá o que foi copiado até o momento em que foi cancelada.
fonte
Patrick está mais ou menos correto, mas eis o porquê. A maneira como você copia um arquivo no UNIX funciona assim:
fileA
.fileB
e retorne à etapa 1.Sabendo disso, e sabendo que é tão simples assim, vamos ver alguns casos extremos.
Assim que encontrarmos o final do arquivo, a cópia será concluída. Então, digamos que nosso arquivo esteja crescendo durante a cópia, mas está crescendo mais lentamente do que o copiado. O programa de cópia continuará além do tamanho do arquivo original, pois, quando chegar lá, haverá mais no arquivo. Mas, em algum momento, ele alcança o final do arquivo e sabe que está no final porque não pode ler mais bytes no momento . Portanto, ele termina ali mesmo que o arquivo esteja prestes a crescer ainda mais.
Se o arquivo estiver truncado, o programa de cópia diz "Whoa, já terminei o final do arquivo!" e sai.
E se partes do arquivo estão sendo atualizadas aleatoriamente por, digamos, um programa de banco de dados :-), sua cópia será uma mistura de dados antigos e novos, porque os dados não são todos copiados ao mesmo tempo. O resultado provavelmente será uma cópia corrompida, e é por isso que geralmente não é uma boa ideia fazer cópias de bancos de dados ativos.
(Dito isso, não estou familiarizado com o CouchDB e é possível criar um banco de dados para resistir a esse tipo de corrupção. Mas é melhor ter certeza absoluta.)
fonte