como fazer backup de uma img com apenas dados usados e NÃO espaço em branco de backup?

2

Eu quero fazer backup de meus arquivos de sistema Raspbian no caso de ser quebrado e para sempre.Mas a memória do cartão SD é 32G, e usando a maneira tradicional dd geralmente acabam criando um img com 32G de armazenamento exato.Mas, na verdade, existem apenas o armazenamento 4G usado e o outro 28G está em branco. E usando a ferramenta win32imager, o resultado é o mesmo.

Minha pergunta é: É possível fazer o backup de um img com apenas dados usados para que o img seja menor, então eu só preciso de um espaço menor para salvar o img?

Eu vi alguém na net dizendo que é possível e aqui está o script:

#!/bin/sh
sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=2500
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1

loopdevice='sudo losetup -f --show raspberrypi.img'
device='sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*//g' | head -1'
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"
sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot
sudo mount -t vfat $partBoot /media
sudo cp -rfp /boot/* /media/
sudo umount /media
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -0uaf - / | sudo restore -rf -
cd
sudo umount /media
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice

Infelizmente este script não funciona para mim, porque o img não pode ser completamente criado e este script terminou com erro.

Alguém tem alguma ideia? Muito obrigado!

Atenciosamente,

Helen

    
por Helen Cui 29.08.2017 / 09:40

4 respostas

1

Após algum uso do sistema, você precisaria analisar exatamente onde esses 4 GB estão localizados em seu cartão SD, então apenas dd ing o início do dispositivo é arriscado.

Sugiro enviar a imagem através de um utilitário de compressão. Mesmo grandes espaços sem conteúdo não ocuparão quase espaço na imagem compactada:

dd if=/dev/sdxxx conv=sync,noerror bs=64K | gzip -c > sdxxx.image.gz
    
por 29.08.2017 / 13:36
1

A menos que seja aceitável executar o ciclo de shrink filesystem -> backup -> grow filesystem de cada vez (supondo que o sistema de arquivos suporte encolhimento e crescimento e seja robusto o suficiente para resistir a ciclos repetidos sem quebrar), você não deve considerar o backup em nível de bloco partição imagem criada por dd) mas backup em nível de sistema de arquivos (por exemplo, sistema de arquivos imagem criada por partclone ou assim pular blocos não usados em uma forma ciente do sistema de arquivos ) ou backup baseado em arquivo (por exemplo, tar, rsync ...).

    
por 29.08.2017 / 14:36
0

Use uma ferramenta de geração de imagens do sistema, como Ghost (pay-for) ou clonezilla (gratuito e Free).

Para clonar uma imagem Pi, você precisará colocar o cartão SD em um computador, inicializar o clonezilla e despejar uma imagem de todo o cartão SD em um arquivo em um disco rígido em algum lugar. Restaurar é o processo oposto.

    
por 29.08.2017 / 15:52
-1

A resposta é sim.

Você deve ter um conhecimento dos dados exatos que gostaria de fazer backup. Digamos que você tenha 4G de dados em um disco de armazenamento 32G.

Use: seek and count com dd.

Para copiar 4G de uma unidade

dd=if/dev/sdb1 of=mybackup.iso bs=1M count=4096 conv=noerror,sync

O acima irá copiar 4G da partição / dev / sdb1. No entanto, você pode decidir copiar dados de xMB para xGB

dd=if/dev/sdb1 of=mybackup.iso bs=1M seek=xMB count=x noerror,sync

usamos para avançar, então seek = 2G começará a copiar de 2G não do começo, count = x, é quantidade de dados que precisam ser copiados, então count = 4096 copiará 4096 x 1MB = 4G

Não se esqueça de usar lsblk para mostrar seu bloco

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0  37.3G  0 disk
|-sda1   8:1    0  19.5G  0 part /
|-sda2   8:2    0  17.2G  0 part /home
'-sda3   8:3    0   511M  0 part [SWAP]

fdisk /dev/sdb
Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        4096    40962047    20478976   83  Linux
/dev/sda2        40962048    77111295    18074624   83  Linux
/dev/sda3        77111296    78157823      523264   82  Linux swap / Solaris
    
por 29.08.2017 / 10:40