Como dd ou cp o disco inteiro na máquina remota da Debian para a máquina local?

2

Eu li este post - Como gravar um disco remoto usando o SSH na máquina local e salvar em um disco local

No entanto, o código a seguir não funciona:

"dd if=/dev/sda | gzip -1 -" | dd of=image.gz

Como eu não tenho nenhum diretório /dev/sda . Eu estou supondo que isso é porque eu estou usando o Debian 7.0.

Qualquer ajuda para tirar uma cópia completa do meu vps é muito apreciada.

    
por DomainsFeatured 08.10.2016 / 19:19

2 respostas

5

O nome do dispositivo de um disco depende de qual tipo de disco ele é (mais precisamente, em que tipo de barramento e controlador o disco está conectado e qual driver os manipula). /dev/sda é o nome típico do primeiro disco de um PC (outros nomes podem ser usados dependendo do driver, por exemplo, para alguns tipos mais antigos de controladores de disco ou alguns controladores RAID de hardware). Em um VPS, o disco é normalmente virtual, e o nome do dispositivo depende da tecnologia de virtualização, por exemplo, /dev/vda ou /dev/xvda . Você pode encontrar os nomes dos dispositivos de bloco em seu sistema com df ou lsblk .

Mas não use isso para fazer um backup de um sistema ativo ! É muito provável que você acabe com um backup ilegível. Se o conteúdo do disco mudar enquanto você estiver fazendo o backup, o que é inevitável em um sistema ativo (por exemplo, um log é gravado em algum lugar), sua imagem será inconsistente - um pouco do estado antigo, um pouco do novo estado - e pode não ser recuperável.

A maneira preferida de fazer um backup é fazer um snapshot , ou seja, uma visualização do sistema de arquivos que é congelado e não muda mesmo quando o sistema real continua mudando. Como fazer isso e se é possível, depende de como seu sistema está configurado. Alguns tipos de sistema de arquivos, como btrfs e zfs, possuem uma capacidade interna de captura instantânea. O LVM também pode fazer instantâneos de um volume.

Se você não puder criar um instantâneo (ou mesmo se puder), faça um backup de nível de arquivo . Um backup em nível de arquivo de um sistema que seja alterado será inconsistente, mas se você não fizer alterações “importantes”, o backup será utilizável. Por exemplo, se você mover os arquivos, eles poderão ser omitidos do backup se eles forem movidos de um diretório que o programa de backup ainda não percorreu para um que já tenha sido percorrido. Por outro lado, se um arquivo de log continuar crescendo, você terá uma versão intermediária desse arquivo, mas não terá uma imagem do sistema de arquivos danificada. Se um arquivo for excluído e outro arquivo for criado, você poderá ter nenhum desses arquivos, ou um ou ambos, mas você não terá a entrada de diretório do arquivo antigo apontando para alguns dados no novo arquivo.

Você pode usar o GNU tar (como root!) para fazer backup de um sistema Linux completo com metadados importantes.

ssh root@vps 'tar -cJf - --acls --selinux --one-file-system /' >vps.tar.xz
    
por 09.10.2016 / 00:20
1

/dev/sda é a convenção quando as comunicações com seu disco passam diretamente pelo driver SCSI. Em um comentário, você disse que seu disco estava em /dev/vda : tal nomenclatura é um pouco comum em soluções virtualizadas. Se eu fosse adivinhar, eu diria que você está falando sobre um VPS gerenciado pelo KVM.

Se você quiser fazer o backup do seu disco /dev/vda , basta usar a sugestão do slm:

ssh user@remote "dd if=/dev/vda | gzip -1 -" | dd of=image.gz

Isto irá fazer o backup de /dev/vda inteiramente, e você poderá voltar add em outro disco depois, desde que haja espaço suficiente lá.

fdisk -l worked and my device file is /dev/vda1, but does that contain my entire system?

Você leu isso muito rapidamente. /dev/vda1 é uma partição (uma parte) do disco /dev/vda . Três coisas a notar:

  • Se o seu sistema consistir apenas de uma partição raiz em /dev/vda1 , o backup de /dev/vda1 será suficiente. Você não precisa fazer o backup de toda a unidade (que também inclui "cabeçalhos" de disco).
  • Se o seu sistema se estender por várias partições em /dev/vda , você deverá dd de todos eles para obter tudo (ou apenas dd de todo o disco, como acima).
  • Seu sistema também pode estar usando vários discos! É um pouco mais raro, mas acho que pode acontecer. Você pode ter as partições / e /var em /dev/vda (em /dev/vda1 e /dev/vda2 por exemplo) e os diretórios base ( /home ) em /dev/vdb1 em outra unidade ( /dev/vdb ) .

No seu caso, eu diria que lsblk é a ferramenta certa para entender sua configuração. Execute-o e dê uma olhada na coluna MOUNTPOINT . Sempre que houver algo lá, seu sistema está usando a partição nessa linha. Se você quiser fazer backup de tudo, você precisa:

  • Faça o download de todas as partições usadas ( /dev/vdXY ) para arquivos. Uma partição é usada quando é montada em algum lugar.
  • Faça o download de todos os discos usados ( /dev/vbX ) para arquivos. Um disco é usado quando contém pelo menos uma partição usada.

Se outras palavras, você pode executar:

ssh user@remote "dd if=/dev/vda | gzip -1 -" | dd of=disk1.gz
ssh user@remote "dd if=/dev/vdb | gzip -1 -" | dd of=disk2.gz
# ... and so on, once per used disk.

ou (usando o meu exemplo de 2 discos acima):

ssh user@remote "dd if=/dev/vda1 | gzip -1 -" | dd of=root.gz
ssh user@remote "dd if=/dev/vda2 | gzip -1 -" | dd of=var.gz
ssh user@remote "dd if=/dev/vdb1 | gzip -1 -" | dd of=home.gz
# ... and so on, once per used partition.

Uma vantagem de fazer backup de partições separadamente é que pode ser mais fácil explorá-las localmente quando necessário:

$ gzip -d home.gz                        # decompress the backup
$ sudo mkdir /mnt/home_bak               # create a mount point
$ sudo mount -o loop home /mnt/home_bak  # mount the backup
$ cd /mnt/home_bak                       # explore the home backup

Por fim, lembre-se de que lsblk lista apenas as partições montadas. Se você configurou partições extras (aquelas que você não monta automaticamente na inicialização), lembre-se de incluí-las. É provável que você se lembre de ter feito isso ao instalar seu VPS.

    
por 08.10.2016 / 22:05