Qual é a maneira mais rápida de “clonar” um arquivo no Linux?

3

Eu gostaria de usar uma API de aplicativo que não seja "segura contra falhas"; Em outras palavras, há uma alta probabilidade de o arquivo de dados estar corrompido e ilegível se o aplicativo falhar.

O arquivo em si é um "arquivo de metadados" e não deve ficar muito grande: poucos 100s de MB no máximo.

O que eu quero fazer é:

  1. Força o aplicativo a acessar o arquivo no "modo direto" (sem cache do SO).
  2. Pausar atualizações em intervalos regulares de "pontos de verificação"
  3. Executar um flush () (alguns dados provavelmente foram liberados automaticamente)
  4. Agora que sei que o arquivo é consistente, clone-o.
  5. Se houver um "clone antigo", exclua-o.
  6. Continue fazendo alterações no arquivo original.
  7. Loop.

Poderia usar um sistema de arquivos de propósito especial que faça algum tipo de "cópia zero" do arquivo, combinado com cópia-na-gravação dos setores modificados do arquivo original, para obter o clone "quase livre" ( com o mínimo de disco IO)?

Além disso, posso fazer o "clone" sem ter que desembolsar um processo? (Não sei se a API de arquivos do Linux oferece uma chamada de sistema "cp").

    
por monster 13.02.2012 / 12:36

3 respostas

6

Você pode usar a captura instantânea do LVM para isso em vez de clonar. Se algo der errado, basta copiar o arquivo do clone.

Existe um libdevmapper / libdevmapper-event-lvm2snapshot que pode ser útil ao fazer isso de forma programática (sem bifurcação): link

Editar:

Se você puder alterar seu programa, aqui está outra solução: link

mmap () o arquivo duas vezes, uma vez normalmente e uma vez com MAP_PRIVATE .

Isso evitaria as externalidades (performance esp) do lvm

    
por 13.02.2012 / 14:04
4

Aqui está uma sugestão rápida que não envolverá o LVM. Use o R1Soft Hot Copy para tirar um ou vários instantâneos pontuais do sistema de arquivos em questão. Consulte a página de dicas . Ele usa a tecnologia copy-on-write. Esta foi uma solução para algumas perguntas semelhantes aqui, mas também se aplica ao que você está procurando fazer .

    
por 13.02.2012 / 14:12
3
  • Btrfs × cp --reflink ou instantâneos
  • Nilfs - por design AFAIU
  • ZFS "no Linux" (algumas pessoas dizem que funciona bem para eles) - instantâneos
por 30.04.2012 / 08:35