Uma armadilha para essa técnica de backup é que, apesar de quantos dados são realmente armazenados na partição, é provável que você também copie muitos dados indesejados. Por quê? Bem, à medida que você adiciona mais arquivos à sua unidade e os exclui, os dados do arquivo antigo não desaparecem (a menos que você escreva explicitamente sobre essa memória). Ainda está tudo lá. Quando você faz uma cópia do dispositivo de bloco (ou seja, usa o dd para copiar os dados), não faz ideia de que os restos do seu DVD do Titanic apagado não são mais algo que você gostaria de ter. Apenas copia os bytes sem pensar. E mesmo que você não se importe com esse DVD, o gzip não saberá isso, então ele comprimirá o DVD bastante descompressivo apesar do fato de ser essencialmente lixo.
Como você conserta isso?
Erm, bem, você poderia fazer um backup em nível de arquivo, ao som de
tar -zcvf /media/test/system_backup.tar.gz /wherever/sda/is/mounted
Mas se você for fazer um backup em nível de arquivo, deve procurar em esquemas de backup incremental.
Se você quiser ficar com uma opção de backup em nível de bloco, talvez você possa escrever zeros no espaço vazio determinando o espaço deixado na unidade e depois usando (por exemplo, para um GB de espaço livre):
dd if=/dev/zero of=/path/on/drive/zeros.bin bs=1M count=1024
Então, se você executou o mesmo comando de backup, ele deve ser menor (os zeros repetidos são fáceis de compactar).
Mas, mesmo assim, você ainda está copiando o lixo desnecessário (ou seja, todos esses zeros). Se você puder garantir que todos os dados desejados estão no início da partição (isso é dependente do sistema de arquivos e pode exigir uma desfragmentação) você pode limitar o tamanho do backup à quantidade de espaço usado, por exemplo, espaço usado)
dd if=/dev/sda bs=1M count=2048 | gzip > /media/test/system_backup.img.gz
Você pode usar o dh para obter a quantidade de espaço usada:
df -m /dev/sda | tail -n 1 | tr -s ' ' | cut -d ' ' -f 2
Você poderia incluí-lo no comando dd como
dd if=/dev/sda bs=1M count='df -m /dev/sda | tail -n 1 | tr -s ' ' | cut -d ' ' -f 3' | gzip > /media/test/system_backup.img.gz
Apenas algumas ideias, você teria que experimentar para ver se realmente funcionava. : -)
Editar: Algumas notas adicionais (nada que você não encontraria procurando as bandeiras que usei nas man pages):
No comando dd, bs especifica o tamanho do bloco da cópia. Ao copiar um disco rígido, é mais eficiente copiar blocos do mesmo tamanho que o cache da sua unidade. Você não precisa se preocupar muito com isso. Na verdade, você não precisa especificar o tamanho do bloco, mas, se não souber o padrão, será difícil determinar quantos blocos precisará copiar para copiar a quantidade certa de dados. Eu escolhi blocos de 1MB por conveniência e o sinalizador count especifica quantos blocos copiar (então 10 blocos copia 10 MB de dados).
O comando df dará a utilização de um dispositivo de armazenamento. A opção -m mostra em MB (em oposição ao padrão de KB). Digite apenas esse comando e a necessidade dos comandos tail, tr e cut deve ser bastante evidente (tail obtém a última linha, tr remove os espaços supérfluos inseridos para formatação, corta divide a saída por espaços e retorna o terceiro elemento como 0, 1, 2) que é o espaço utilizado.