Para explicar a resposta do cprofitt (como sua resposta é incremental, como vou explicar) ...
Primeiro, você precisa saber sobre hard links.
Os links físicos apontam para os dados que estão realmente no disco (a localização física) e você pode acessar os dados usando o link físico. Cada arquivo e diretório é um link rígido para o local dos dados no disco físico. Portanto, se houver dois arquivos (links físicos) apontando para o mesmo local, os dados serão armazenados apenas uma vez .
O processo dado pelo cprofitt envolve:
-
Gire os backups para criar um local para um novo. ("Backup de hoje" de ontem torna-se "backup de ontem", "Backup de ontem" de dois dias atrás torna-se "backup de dois dias atrás" e assim por diante)
- A lista continua crescendo o tempo que você quiser, no entanto, no script, ela só tem 4 instantâneos. (Ele faz todo o processo novamente para o próximo nível (por exemplo, uma semana - "Backup desta semana") e os rotaciona, e é por isso que tem apenas 4).
- A movimentação é feita em sentido inverso para evitar sobrescrever
-
Copie o instantâneo mais recente que você fez (por exemplo, "backup de ontem") para o local do novo (por exemplo, "backup de hoje"), criando novos links físicos para os arquivos existentes sem copiar o arquivo. Assim, todos os arquivos no novo instantâneo estão apontando para o mesmo local que o anterior.
Um exemplo ilustrado
Na figura abaixo, arquivos da mesma cor que possuem o mesmo nome de arquivo são hard links para o mesmo arquivo no disco. Aqui estamos lidando apenas com dois instantâneos e alguns arquivos, mas o exemplo é escalável. (Exceto pelo fato de eu estar movendo os instantâneos da maneira oposta aos scripts na resposta do cproffit)
O processo é este:
-
Existe um instantâneo do sistema.
-
O instantâneo é copiado (criando links físicos para os arquivos existentes)
-
O Rsync é executado para atualizar o instantâneo. Quando os arquivos são alterados, ele armazena o novo arquivo como uma nova cópia no disco rígido (para que o instantâneo mais antigo não seja alterado). Neste exemplo, o arquivo B foi alterado. Observação: agora temos apenas uma cópia do Arquivo A e do Arquivo C e duas cópias do Arquivo B armazenadas no disco rígido
-
Gira os instantâneos (nesse caso, o instantâneo 0 'cai' e é excluído e eu renomeio o instantâneo 1 para o instantâneo 0)
-
Copie o instantâneo agin (repita o passo 2)
-
Rsync novamente. (Repetir do passo 3). Agora temos 1 cópia do Arquivo A e 2 cópias do Arquivo B e do Arquivo C
Uma versão simplificada do [primeiro] script (não para ser executado, apenas como um trampolim) é esta:
#!/bin/bash
# Delete the snapshot we don't want (has 'fallen off')
rm -rf /root/snapshot/home/hourly.3 ;
# Rotate the snapshots by shuffling them back
mv /root/snapshot/home/hourly.2 /root/snapshot/home/hourly.3 ;
mv /root/snapshot/home/hourly.1 /root/snapshot/home/hourly.2 ;
# Copy the snapshot (creating hard links to the existing files)
cp -al /root/snapshot/home/hourly.0 /root/snapshot/home/hourly.1 ;
# Do the rsync ...
# step 4: rsync from the system into the latest snapshot (notice that
# rsync behaves like cp --remove-destination by default, so the destination
# is unlinked first. If it were not so, this would copy over the other
# snapshot(s) too!
rsync -va --delete /home/ /root/snapshot/home/hourly.0 ;
Agora, o (s) script (s) completo (s) tem a explicação completa aqui (como o cprofitt está vinculado) e é mais completo, mas é basicamente como acima. O outro script é para agrupar os instantâneos e a outra parte da resposta do cprofitt fala sobre tornar o processo automático (usando o cron) e verificar se o backup foi bem-sucedido.
Você pode alterar os nomes, então, em vez de os diretórios serem chamados de "por hora ...", eles são chamados de outra coisa e o script é executado manualmente.
Para restaurar o lote inteiro, copie o instantâneo mais recente (ou anterior) de volta para o diretório do qual você estava fazendo os backups.
Para restaurar um único arquivo que ainda está em um instantâneo, vá para o instantâneo e copie-o de volta para onde ele pertence.
A mídia de backup pode ser um disco rígido externo (deve ser ext2 / ext3 / ext4). Se você estava fazendo o backup de /
(principalmente /boot
, /home
, /etc
/root
e /usr
), digamos ...
-
Você monta a unidade externa, executa o backup e cria o instantâneo mais recente.
-
Desmonte a unidade.
-
Lembre-se de que você excluiu um arquivo (mesmo da lixeira) desejado.
-
Conecte a unidade externa e recupere o arquivo.
-
Faça um backup (só para ter certeza)
-
Desconecte a unidade e vá viajar ...
-
Perceba que um laptop e lava não se misturam.
-
Com seu novo laptop executando um CD ao vivo, formate a unidade interna, monte sua unidade externa e, em seguida,
cp -a /media/external/snapshot-0/* /media/internal-drive
(supondo que a captura instantânea-0 seja a última imagem instantânea) -
Instale o grub no MBR (sim, ele tem que ser separado) - ou use
dd
para fazer o backup do mbr, como cprofitt disse no final de sua resposta. -
Reinicie.
O script precisa ser refinado (para obter apenas o material desejado) e o procedimento aove pressupõe que você não possui uma partição /home
. Se você criar (ou tiver) um novo no disco e montá-lo no lugar com mount /dev/sdxy /media/external/home
antes de copiar.