Aqui está uma introdução ao uso rsync
para backup no Pi. Depois que o backup inicial é criado, mantê-lo atualizado dessa maneira é muito mais rápido do que rasgar constantemente a imagem inteira. Você pode fazer isso em um disco rígido local ou em uma rede.
Na verdade, você não deseja uma cópia completa de um sistema em execução como backup, pois algumas das coisas ostensivamente existentes no sistema de arquivos existem apenas em tempo de execução. Incluir isso em um backup e usá-lo para recriar uma imagem posteriormente pode criar problemas para você.
Existem outras exceções também. rsync
pode aceitar uma lista de padrões ( glob ) a serem excluídos e esses podem ser lidos a partir de um arquivo, então vamos primeiro examinar o que deveria estar nesse arquivo. Observe que as entradas são do formato /directory/*
e não /directory
. Isso ocorre porque queremos que eles existam, mas não queremos copiar nada neles.
/proc/*
/sys/*
Eles realmente não existem no disco. Eles são uma interface para o kernel, que os cria e mantém na memória . Se você copiá-los e depois copiá-los de volta para um sistema e inicializá-lo, será (na melhor das hipóteses) sem sentido, pois o kernel os usa como pontos de montagem para as interfaces. em um diretório com dados, tente. Funciona e não causa nenhum dano, mas as coisas que estavam no diretório agora estão inacessíveis.]
Observe que é essencial que os pontos de montagem /sys
e /proc
existam. Mas eles não devem conter nada. Próximo:
/dev/*
O dev
diretório não é exatamente a mesma coisa que proc
e, sys
mas para nossos propósitos, é. Se você acredita que deve salvar isso para poder ter os mesmos nós de dispositivo em seu backup ou algo assim, está errado . Não se incomode. Não copie dev
. Há muito tempo, o Linux funcionava dessa maneira, mas não funciona mais.
/boot/*
Esse é um caso especial com a maioria (talvez todas) das distros específicas do Pi, como o Raspbian. Na verdade, é um ponto de montagem para a primeira partição vfat. Nós vamos lidar com isso separadamente. Faça o que fizer, não se preocupe em incluí-lo aqui, porque, novamente, é um ponto de montagem.
/tmp/*
/run/*
/run
geralmente também não está no disco, está na memória. Talvez /tmp
possa ser muito (isso economizaria um pouco de ação do cartão SD), mas, em qualquer caso, como os nomes sugerem, esses não são locais para armazenar dados persistentes. Os aplicativos que os utilizam esperam que sejam excluídos a cada inicialização.
/mnt/*
/media/*
Isso é importante principalmente se você planeja fazer backup em um disco rígido ou pendrive e o dispositivo está dentro /mnt
ou /media
(a montagem automática tende a usar o último), porque se você não excluir a localização desses dispositivos no sistema de arquivos, crie um loop fazendo backup do conteúdo da unidade para si mesma, até que fique sem espaço. Eu acho que rsync
pode ser inteligente o suficiente para identificar algo tão estúpido, mas tente evitar testar a premissa.
Para o backup real: Crie um diretório para fazer backup no disco rígido montado localmente, no dispositivo USB etc. - por exemplo, "pi_backup". Você pode alternativamente fazer backup em um local remoto via ssh
(veja abaixo) ou usando um sistema de arquivos montado em rede, mas isso provavelmente levará um tempo na primeira vez.
Se o arquivo que contém a lista a excluir for /rsync-exclude.txt
1 e sua unidade for /mnt/usbhd
, faça o backup real:
rsync -aHv --delete --exclude-from=/rsync-exclude.txt / /mnt/usbhd/pi_backup/
Observe que há uma barra finalpi_backup/
.
Isso levará um tempo e produzirá muita saída (se você quiser examinar isso em um log, acrescente > rsync.log
). --delete
não faz sentido na primeira vez, mas para manter o backup atualizado, use-o. Isso garante que as coisas que você excluiu posteriormente no Pi também sejam removidas do seu backup. Os a
conjuntos recursão em diretórios e garante que todos os atributos do arquivo correspondam. -H
é preservar os links físicos 2 , v
é detalhado, e é por isso que você obtém alguma saída (caso contrário, rsync
é silencioso). Veja man rsync
para mais.
Há um atalho pelo qual você pode pular o --exclude-from
arquivo. Se você tem certeza de que todas as coisas que não deseja copiar ( /tmp
etc.) estão em sistemas de arquivos separados, basta usar:
rsync -axHv --delete-during / /mnt/usbhd/pi_backup/
-x
foi inserido. Esta é a forma abreviada de --one-file-system
, que indica rsync
para não ultrapassar os limites do sistema de arquivos. Pessoalmente, prefiro o --exclude-from
, mas, por exemplo, o Raspbian padrão, --one-file-system
funcionará bem. Você pode usar os dois se quiser ter -x
cuidado: D
Esse não é um backup completo. É o suficiente se você não colocou nada boot
e não tem problema em usar o backup para restaurar o sistema colocando o cartão em um computador e executando:
rsync -av --delete-during /mnt/usbhd/pi_backup/ /mnt/sdcard_partition2/
Você também pode fazer isso com um cartão com uma nova imagem (presumindo que seja a mesma da sua imagem base), embora isso seja um pouco ineficiente se você precisar criar a imagem (porque você substituirá a maior parte dela). Você também pode conectar outro cartão SD através de um adaptador USB com essa imagem e usar o método acima para manter um cartão duplicado.
Se você colocou coisas /boot
(por exemplo, um kernel personalizado), inclusive /boot/config.txt
, também será necessário fazer o backup (bastante simples - não há muito). Faça-o separadamente e, quando você restaurar, esse material será colocado na primeira partição.
Veja aqui se você deseja criar uma imagem em branco do estilo Raspbian na qual possa fazer backup. Você pode usar uma metodologia semelhante para criar uma placa de estilo Raspbian vazia - ao invés de lidar com um .img
arquivo, você estaria lidando com um dispositivo real (por exemplo /dev/sdb
), o que significa que tudo o que você precisa fazer é criar a tabela de partição fdisk
e, em seguida, formato /dev/sdb1
e sdb2
(ou o que for) com mkfs
.
Mas copiar toda a imagem é mais fácil! Por que se preocupar com isso?
Não é tão difícil; Eu restaurei para um cartão em branco (formatado de acordo com o último link) em 10 minutos. Sim, apenas usar dd
tudo é mais simples (se você achar coisas como palavras confusas ...), MAS leva um bom tempo toda vez que você deseja atualizar seu backup, porque você deve fazer 100% dele sempre. Usando rsync
, uma vez que um backup existe, atualizá-lo é muito, muito mais rápido, para que você possa configurar isso para acontecer sem problemas todos os dias via cron. Em uma rede mesmo. A cada seis horas. Quanto mais você faz isso, menos tempo levará.
rsync
através da ssh
Aqui está um exemplo:
rsync [options] --rsh="ssh [ssh options]" root@[the pi ip]:/ /backup/rpi/
"Opções" seria, por exemplo, -av --delete --exclude-from=/rsync-exclude.txt
e "ssh options" é o que você normalmente usa (se houver). Você deve ter acesso root via ssh
para fazer isso, para efeitos de um backup do sistema (definido PermitRootLogin=yes
em /etc/ssh/sshd_config
e reinicie o servidor).
1 Você deve manter este arquivo. Você pode colocar comentários nas linhas que começam com #
ou ;
. Isso pode incluir o rsync
comando real , que pode ser copiado e colado posteriormente, para que você não precise se lembrar sempre.
2 Obrigado a Kris por apontar rsync
não faz isso automaticamente.
dd
, investiguersync
.