O LVM (Logical Volume Manager) suporta instantâneos. Uma vez que toda a distribuição Linux tem LVM embutido, é o mais fácil para você. A única desvantagem é que você precisa recriar o seu sistema de arquivos.
Aqui está um bom tutorial link
Eu tenho um diretório contendo muitos arquivos de log de resultados (tamanho do diretório ~ 4GB) e um conjunto de processos em execução que continuam gravando esses arquivos.
Para analisar corretamente os resultados posteriormente, quero copiar todo o diretório para um destino de arquivo e não posso interromper os processos.
Eu quero uma cópia do diretório como foi em um determinado ponto do tempo. Como o tamanho do diretório é enorme (o que significa que leva cerca de 40 segundos para copiar) e alguns dos arquivos estão sendo gravados, um% normalcp -r
NÃO me dá um instantâneo em um determinado ponto no tempo, e sim um instantâneo de arquivos espalhou-se por cerca de 40 segundos. Isso não é bom o suficiente.
Existe uma maneira de obter um bloqueio exclusivo no diretório e em todos os seus componentes durante a cópia?
O LVM (Logical Volume Manager) suporta instantâneos. Uma vez que toda a distribuição Linux tem LVM embutido, é o mais fácil para você. A única desvantagem é que você precisa recriar o seu sistema de arquivos.
Aqui está um bom tutorial link
Se o cp está demorando muito para fornecer os resultados de que você precisa, provavelmente você não ficará satisfeito com outras opções. A cópia do Unix é praticamente tão básica quanto a sobrecarga de I / O.
No entanto, se você retardar os processos de E / S e comprar outro processo de gerenciamento entre o disco e os arquivos enquanto eles estão sendo alterados, a sobrecarga poderá não importar. O que quero dizer é que você poderia executar o processo em uma VM (se isso for possível), tentar instantâneos com rsync, ou mesmo subversão.
A única outra coisa em que posso pensar é talvez canalizar a saída do log para um link simbólico e atualizar os links para um local secundário com um arquivo em lote.
Por exemplo:
arquivo.log - > /mnt/disk1/logarea/file.log
arquivo.log - > /mnt/disk/logarea2/file.log
Para que você possa atualizar o link simbólico instantaneamente e os canais de saída para o novo local.
Você pode até mesmo gravar um arquivo em lotes para atualizar o link, contar até 45 segundos e depois trocá-lo novamente, isolando os dados de que precisa.
Apenas pensamentos, boa sorte.
Uma maneira diferente de fazer isso seria usar Logrotate para arquivar os logs toda semana / dia / hora , então você essencialmente tem instantâneos nesse intervalo.
Alguns sistemas de arquivos fornecem recursos de instantâneos. Criar um sistema de arquivos (em uma área não usada da unidade ou em um arquivo de dados dedicado [loopback]) usando um desses sistemas de arquivos e montá-lo onde seus logs são gravados permitiria a captura instantânea do sistema de arquivos.
Sistemas de arquivos conhecidos por oferecer suporte a instantâneos:
Provavelmente há mais, mas são essas as que eu consigo pensar em cima da minha cabeça.
Os instantâneos não copiam os dados, mas congelam os dados em um determinado momento e criam um sistema de arquivos virtual contendo os dados que podem ser montados e usados como qualquer outro sistema de arquivos (embora somente leitura). O sistema de arquivos original continua a funcionar como se nada tivesse acontecido.
Francamente, pelo que você está pedindo, a única coisa que funcionou para mim é o ZFS-FUSE. Há também um ZFS nativo para Linux, mas ainda não é realmente utilizável.
Tags linux file-transfer