Estou tentando tirar instantâneos de uma pasta enorme regularmente.
Eu li aqui: http://www.mikerubel.org/computers/rsync_snapshots/#Incremental
que cp -al
tira um instantâneo de uma pasta, simplesmente copiando os links físicos.
Tudo isso é ótimo, mas o problema é que, neste snapshot, se eu alterar um arquivo, ele muda em todos os snapshots. O que eu gostaria, em vez disso, é fazer com que o sistema crie um novo arquivo em mudança e vincule-o a ele. Dessa forma, cada instantâneo não se tornaria inválido em uma edição do primeiro arquivo.
Como posso conseguir isso?
ps eu tentei rsync -a --delete --link-dest=../backup.1 source_directory/ backup.0/
, mas tem o mesmo problema.
rsnapshot
é bomO que você está procurando é uma forma de cópia na gravação , em que vários arquivos com o mesmo conteúdo usam o mesmo espaço no disco até que um deles seja modificado. Os links físicos implementam apenas a cópia na gravação se o aplicativo que faz a gravação exclui o arquivo e cria um novo arquivo com o mesmo nome (o que geralmente é feito criando um novo arquivo com um nome diferente e movendo-o no lugar). O aplicativo que você está usando evidentemente não está fazendo isso: está substituindo o arquivo existente.
Alguns aplicativos podem ser configurados para usar a estratégia de substituição. Alguns aplicativos usam a estratégia de substituição por padrão, mas usam a estratégia de substituição quando veem um arquivo com vários links físicos, precisamente para não interromper os links físicos. Sua técnica atual de instantâneo funcionará se você puder configurar seu aplicativo para substituir em vez de substituir.
O Fl-cow modifica os programas para usar sistematicamente a estratégia de substituição em arquivos com vários links físicos.
Como alternativa, você pode armazenar seus arquivos em um sistema de arquivos que executa a cópia na gravação ou desduplicação, ou possui um recurso de captura instantânea, e não se preocupe com links físicos : Btrfs ou Zfs . Dependendo do seu esquema de particionamento, o uso de snapshots do LVM pode ser uma opção.
Minha recomendação é usar uma ferramenta de instantâneo adequada. Fazer backups confiáveis é surpreendentemente difícil. Você provavelmente quer o rsnapshot .
fonte
O seguinte é um script ruby que escrevi que envolve o "cp -al" e o rsync em um bom script que pode ser executado manualmente ou via cron. O destino pode ser local ou remoto (via ssh):
Timemachine do gueto
A resposta básica à sua pergunta, como mencionado em um comentário anterior, a fonte precisa ser mantida separada dos links físicos. Por exemplo, assuma um backup diário do seu diretório pessoal:
Fonte:
Destino:
Os links físicos são criados executando "cp -al" no backup de ontem. Diga que é terça-feira de manhã quando você o executa:
cd /data/backup/daily
rm -rf tuesday
cp -al monday tuesday
rsync -a --delete /home/flakrat /data/backup/daily/tuesday/
fonte
O rdiff-backup parece fazer o que você quer, dê uma olhada.
Usando o rsync, você deve primeiro fazer um backup completo sem usar links físicos. O próximo backup pode apontar para o backup anterior e o link físico para ele. Dessa forma, seus backups não são vinculados aos arquivos de trabalho (os que você está modificando). Exemplo. Se meu backup anterior fosse uma pasta backup.01, meu script de backup aumentaria primeiro as pastas renomeando-as em uma para que backup.01 se torne backup.02. Em seguida, o script cria uma nova pasta vazia chamada backup.01. em seguida, sincronizaria novamente o novo backup na nova pasta e vincularia o backup.02 a fim de que apenas novos arquivos ocupem espaço no backup. O comando rsync ficaria assim: rsync -rlt caminho de origem backuppath / backup.01 --link-dest = backuppath / backup.02
Como você pode ver, todo o vínculo físico está acontecendo no caminho do backup. Dessa forma, você não precisa se preocupar com a cópia na gravação ao modificar arquivos no caminho de origem.
fonte