Backup do sistema de arquivos do cartão SD somente para arquivo de imagem

4

EDIT: Por alguma razão, apenas parte do meu post foi salvo. Atualizei agora para o seu conteúdo completo

Embora este tópico circule em torno do Raspberry Pi, é aplicável basicamente a todos os cartões SD que possuem a seguinte configuração: um sistema de arquivos aceita apenas uma fração do tamanho total do cartão. Em resumo, o objetivo dessa questão é entender como escrever SOMENTE o FS (ou mais, se várias partições estiverem presentes) em uma imagem de backup. Mais detalhes podem ser vistos abaixo.

Quando comecei a brincar com o Pi depois que o comprei em dezembro do ano passado, tive alguns danos no cartão SD e perdi seu conteúdo. Foi devido a desligar a energia de forma inadequada em vez de fazer um desligamento normal, então não é nada demais aqui. Como cada vez que eu tive que formatar o cartão, escrever a imagem Raspbian para ele, colocá-lo no Pi, arrancar o tabuleiro, expandir o sistema de arquivos, reinstalar e reconfigurar tudo o que comecei a procurar soluções melhores:

  • redimensionando a imagem e o FS nela antes de gravá-la no cartão SD - este link ilustra perfeitamente como aumentar uma imagem (usando dd e /dev/zero como fonte de entrada) e ajustar o ext4 (acho que é EXT4 para o Raspbian (excluindo a partição FAT32 pequena para a inicialização) componentes)). Isso resolve o problema de ter que usar o recurso expandir sistema de arquivos da ferramenta de configuração do Raspberry que basicamente consome o restante do espaço não formatado seja 2GB, 4GB, 16GB, 32GB e assim por diante. É claro que aumentar a imagem também aumenta o tempo que dd precisa para gravá-la no cartão SD, mas também permite a próxima etapa de personalização, ou seja,
  • personalizando o software instalado - usando chroot ou proot (mais qemu ) é possível (como visto aqui e aqui ) para instalar / construir o que você quiser se você montar corretamente o FS do Raspbian e chroot nele . Este também é um passo essencial para muitas compilações que requerem compilação cruzada (como o Qt for Pi) - você pode compilar coisas nativamente no Pi, mas isso requer muito espaço e muito tempo.

Então é basicamente assim que venho fazendo coisas para personalizar minhas imagens. A questão aqui é o conjunto de procedimentos envolvidos na operação inversa - pegar o conteúdo do cartão SD e armazená-lo em seu computador de uma maneira ideal. A compressão é, obviamente, uma das coisas cruciais que você pode fazer, mas não é suficiente. Ao usar dd , você pode gravar todo o cartão SD (incluindo os blocos vazios) em seu computador ou selecionar o tamanho e o número de setores desejados. A segunda maneira oferece um melhor uso de armazenamento, no entanto, requer cuidadosamente o cálculo de material. Se você cortar as coisas, você pode acabar com um FS quebrado (oh, eu não vi isso muitas vezes ...).

Estou à procura de uma solução muito semelhante à que o Clonezilla oferece - pode clonar apenas os blocos que realmente têm conteúdo e descarregar o resto assim encolhendo o FS e sendo capaz de armazenar um FS totalmente funcional em um espaço muito menor. Eu fiz isso no ano passado quando ajudei meu vizinho a salvar os dados em seu disco rígido quebrado em um MacBook.

Exemplo: se você tiver uma instalação Raspbian Jessie Lite, apenas aprox. 1,3 GB será usado no seu cartão SD. Agora imagine se o cartão é de 32GB. Claro, com o tempo você pode querer formatar e usar o espaço restante no entanto isso geralmente não é o caso (pelo menos para mim). Então, se eu usar dd cegamente, basicamente vou criar um arquivo de imagem de 32GB. A compressão vai cuidar da maioria dos gigabytes, mas escrevê-lo de volta para o cartão SD em um momento posterior para restaurar algum estado anterior do seu Raspbian será um processo muito, muito longo. Eu também posso copiar o FS (novamente com dd ). Mas e se a instalação real (todos os arquivos) levar apenas 600MB nessa partição? Por que eu iria querer copiar 1,3 GB quando apenas 600 MB são o que eu preciso? E se eu tiver um cartão SD com um Raspbian onde o recurso "expandir sistema de arquivos" da ferramenta de configuração foi usado e todo o cartão SD está formatado, mesmo que n % esteja realmente sendo usado?

Alguma idéia de como conseguir isso com menos esforço e ajustes possíveis?

    
por rbaleksandar 29.10.2016 / 20:59

2 respostas

2

Faça o dump / restore da pequena partição FAT em dd (que é necessário), mas use e2image -a (do pacote e2fsprogs ) para a partição principal. Para restaurar o flash, a opção -c parece útil (substitui apenas o que realmente é diferente no destino).

    
por 30.10.2016 / 08:15
0

Bem, apesar de não responder diretamente à sua pergunta, aqui está o que fiz para restaurações fáceis

  • dd o conteúdo do cartão SD em um arquivo, depois que todos os pacotes necessários foram instalados
  • bzip o arquivo com compactação máxima e mantenha o arquivo de dados compactado como backup
  • Em caso de dano, restaure o arquivo de backup após bunzip usando dd
por 29.10.2016 / 21:12