Português do Brasil English
Devin no Facebook  Devin no Twitter  RSS do Site 
Programas    

Backup e restauração de partições com sfdisk


Comentários  3
Visualizações  
439,415

Particionar o disco é algo que todo usuário de Linux deve ter passado, principalmente nas primeiras instalações de Linux (que não foram em uma VM, hehehe). O particionamento é algo básico que usamos até hoje para dividir o disco em várias áreas para armazenar dados diferentes em cada uma delas. No caso de servidores Linux, muitos criam diversas partições, cada uma como um diretório diferente do sistema (/, /usr, /tmp, /var, e por aí vai). Apesar de hoje em dia se utilizar bastante o LVM (Logical Volume Management) para facilitar a vida criando partições mais dinâmicas, mesmo assim tem que haver um particionamento básico no disco.

Muitos de nós aprendemos que o programa fdisk serve para fazer o particionamento do disco de forma fácil e interativa. Mas de vez em quando há uma grande necessidade de se fazer isso automaticamente, ou seja, particionar o disco via comando ou um shell script. É aí que entra o sfdisk, que é basicamente uma versão scriptável do fdisk. Com ele, dá pra fazer algumas coisas úteis que não conseguíamos de forma prática com o fdisk:

  • Fazer backup e restauração da tabela de partições de um disco (para casos de corrompimento da tabela;
  • Duplicar o mesmo esquema de particionamento de um disco para outro (e utilizar em um RAID1, por exemplo);
  • Automatizar a criação e instalação de distribuições, ou restore de backups de máquinas inteiras via script;

Como todo bom administrador de sistemas, tenha em mente que comandos que automatizam tarefas sempre são úteis

Mas antes, uma pequena introdução!

Um disco é um dispositivo físico que armazenam bits, ou seja, números 0 ou 1 (números binários). Em discos rígidos tradicionais, esses números binários são geralmente representados por uma polaridade magnética. Se aquele espaço minúsculo está com uma polaridade, é o número 0, se estiver com outra polaridade, é o número 1. Por isso, em teoria qualquer bit pode ser guardado em qualquer lugar. As partições são uma criação antiga (e utilizada até hoje) que divide esse disco em áreas, dimensionando para o sistema operacional onde ele pode mexer. Em outras palavras, partições criam espécies de discos dentro do disco.

As partições fazem uma divisão por setores, que são conjuntos de bytes (geralmente 512 bytes). São essas divisões que estão na tabela de partições de um disco.

E por falar em tabelas de partições, os primeiros 512 bytes do disco são reservados justamente para essas informações e é chamado de MBR (Master Boot Record). Então se é o primeiro setor, podemos dizer que a MBR tem o tamanho de 512 bytes. Dentro desses 512 bytes do MBR, temos:

  • 1 – 446 bytes: O setor de boot do disco, geralmente fica o programa que carrega o kernel do sistema operacional (como o grub);
  • 447 – 510 bytes (64 bytes): A tabela de partições, que informa as divisões do disco em setores;
  • 510 – 512 bytes (2 bytes): Uma assinatura do tipo de boot que é registrado na MBR.

O comando dd no Linux pode ser usado para extrair e colocar dados diretamente no disco, mas sai um pouco fora do escopo desta dica, já que queremos um backup menos agressivo, utilizando o sfdisk.

Backup com o sfdisk

Vamos trabalhar como exemplo, o dispositivo /dev/sda, que é geralmente o primeiro HD da máquina. Veja só a saída do comando:

# sfdisk -l /dev/sda

Disk /dev/sda: 91201 cylinders, 255 heads, 63 sectors/track
Units: cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1   *      0+     63-     64-    512000   83  Linux
/dev/sda2         63+  91201-  91138- 732060672   8e  Linux LVM
/dev/sda3          0       -       0          0    0  Empty
/dev/sda4          0       -       0          0    0  Empty

Isso é a saída visual do sfdisk. Existe um outro formato, que é o dump:

# sfdisk -d /dev/sda

# partition table of /dev/sda
unit: sectors

/dev/sda1 : start=     2048, size=  1024000, Id=83, bootable
/dev/sda2 : start=  1026048, size=1464121344, Id=8e
/dev/sda3 : start=        0, size=        0, Id= 0
/dev/sda4 : start=        0, size=        0, Id= 0

É a mesma informação, só que com um formato próprio do sfdisk. Em outras palavras, se você guardar isso em um arquivo, você estará salvando esse esquema de particionamento em um arquivo, ou seja, fazendo um backup:

sfdisk -d /dev/sda > backup-particoes-sda.txt

Restaurando

O conteúdo do arquivo anterior pode ser guardado para restaurar depois. Se sua tabela for corrompida por algum motivo, a restauração pode ser feita assim:

sfdisk /dev/sda < backup-particoes-sda.txt

Simples né? Como são sempre comandos simples, eles podem ser colocados em shell scripts facilmente.

Se por acaso você quiser replicar as partições de um disco para o outro, é só usar em outro dispositivo:

# escreve a tabela de partições em um disco secundário (/dev/sdb)
sfdisk /dev/sdb < backup-particoes-sda.txt

Pode também fazer uma cópia de um HD para o outro, sem precisar gravar em um arquivo texto:

# escreve a tabela de partições de um disco (/dev/sda) em outro (/dev/sdb)
sfdisk -d /dev/sda | sfdisk /dev/sdb

Os comandos simplesmente usam os recursos de entrada, saída e pipe que o shell fornece. Você pode usar esses comandos para automatizar a criação de máquinas. É só salvar um esquema de particionamento que você queira e na nova máquina mandar um sfdisk restaurando :)

Bom proveito!

Referências


Comentários  3
Visualizações  
439,415


TagsLeia também

Apaixonado por Linux e administração de sistemas. Viciado em Internet, servidores, e em passar conhecimento. Idealizador do Devin, tem como meta aprender e ensinar muito Linux, o que ele vem fazendo desde 1997 :-)


Leia também



Comentários

3 respostas para “Backup e restauração de partições com sfdisk”

  1. Waltenir de Araujo disse:

    Muito bom até pra mim que nao entendo nada de linux.

  2. Ricardo Moe disse:

    Ótimo post.

    Utilizei o sfdisk para tentar solucionar um problema, mas ainda não foi dessa vez.

    A situação é a seguinte,
    Fiz um clone de 2 HDs em Raid 0 para um HD externo de 2TB apenas para fins de backup e para que eu não precise mexer no sistema a quente. Utilizei o dd e tudo certo, consigo bootar normal no HD de 2TB e tudo funciona.
    Preciso então agora, fazer o mesmo processo do HD de 2TB para um HD SSD de 250GB.
    Como as partições originais eram maiores que o HD de 250GB, fiz um resize das partições e movi todas as partições para o inicio do disco. (Observo que as partições eram maiores, mas o espaço em disco dá e sobra no HD de 250GB, por isso o resize)
    Utilizei novamente o camando dd para para o clonagem do disco de 2TB para o disco de 250GB ( dd if=/dev/sda of=/dev/sdb )
    Deixei o comando rodar até que obtive um aviso de erro, que obviamente é por que não há mais espaço no HD de 250GB, mas em teoria todos os dados foram copiados, visto todo espaço utilizado no HD de 2TB era em torno de 100GB e que as partições estavam no inicio do disco. (Eu mesmo as movi para o começo)
    Assim, tentei dar o boot no HD clonado de 250gb, porem nada acontece, apenas o cursor fica piscando como se não achasse o a inicialização do disco. No outro HD original de 2TB, tudo funciona normal.
    Usei o comando sfdisk -d para olhar de sda e sdb estavam iguais, e estão.. idênticos..
    Então não sei mais resolver o problema..
    Será preciso alguma alteração no grup? reinstalar ele? o que acha?

Deixe uma resposta