Criando um arquivo raw img do sistema linux

1

Estou tentando fazer backup de um sistema Linux para um arquivo IMG que, em seguida, posso inicializar e executar no QEMU.

OBSERVAÇÃO: Eu testei no Lubuntu e no minúsculo núcleo do Linux.

O processo que segui é:

  • Tenho 2 discos rígidos, sda e sdb
  • partição sdb1 e montagem sdb1 partição em /mnt/sdb
  • dd um arquivo vazio do tamanho de sda para o arquivo IMG no diretório sdb montado. dd if=/dev/zero of=/mnt/sdb/disk.img bs=x count=1 - x sendo o tamanho de sda
  • uso, então, fdisk on sda para gerar o layout do disco para um arquivo de script e, em seguida, carrego isso no arquivo disk.img
  • Em seguida, monte-o e copie o conteúdo - losetup -P -f disk.img
  • encontre o dispositivo de loop

    e.g /dev/loop36 0 0 0 0 /mnt/sdb/disk.img 0 512

  • criou o sistema de arquivos na primeira partição do dispositivo de loop - mkfs.ext2 /dev/loop36p1

  • monte o dispositivo de loop particionado - mount /dev/loop36p1 /mnt/img
  • copie o setor de inicialização - dd if=/dev/sda of=disk.img bs=512 count=1 conv=notrunc
  • finalmente eu usei o rsync para copiar o sistema de arquivos para o diretório /mnt/img , tive vários sucessos com isso. usando:

    $ rsync -aHxv / \
       --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
       /mnt/img 
    

Eu tentei o processo exato usando Lubuntu como mostrado acima, o comando rsync funcionou no entanto, quando eu tento e executo o IMG no QEMU ele trava na inicialização do disco rígido.

Ao tentar o processo acima em tcl, o comando rsync falha e, quando tento inicializar no QEMU, ele diz que não há dispositivo inicializável.

Alguém tem algum conselho sobre isso? ou fez coisas semelhantes e tem um método melhor para alcançar o objetivo?

    
por kingsway 20.07.2018 / 15:36

1 resposta

1

  • Ao copiar o setor de inicialização, você também copiou a tabela de partições nele. Dependendo das versões do fdisk e das opções exatas usadas ao particionar tanto o original sda quanto o arquivo de imagem, os limites da partição podem ou não estar exatamente nos mesmos locais. Se não fossem ... suas montagens de loop usavam as compensações de partição que seu fdisk criou, mas na inicialização, a VM estaria usando os deslocamentos de partição copiados do original sda .

  • Você copiou o MBR com dd , mas o conteúdo de /boot com rsync . O MBR inclui compensações no nível de bloco para identificar os locais de outros componentes do carregador de inicialização ( <filesystem>_stage1.5 ou stage2 para o GRUB Legacy). É altamente improvável que esses arquivos estivessem exatamente nos mesmos locais de blocos depois de uma cópia com rsync .

  • Você provavelmente perdeu completamente algumas partes do gerenciador de inicialização. O GRUB Legacy pode incorporar partes de si mesmo no início de uma partição, em uma área fora do sistema de arquivos ; O GRUB2 quase sempre grava a maioria de sua imagem central nos blocos de disco logo após o MBR, mas antes do começo da primeira partição . Copiando apenas os primeiros 512 bytes do disco obtém apenas o MBR tradicional, mas erra essas coisas. Eu acho que este é o motivo mais provável que sua inicialização falhou.

Dependendo do método de virtualização que você está planejando, você provavelmente deve ter usado mount --bind /dev /mnt/img/dev e também /proc e /sys , depois chroot ed no ambiente de imagem e usado grub-install para reescrever corretamente o gerenciador de inicialização no arquivo de imagem com os deslocamentos de bloco corretos.

Outra abordagem possível seria inicializar o sistema original no modo de usuário único ou interromper o máximo possível de muitos daemons no sistema original (ou seja, desativar o sistema) e, em seguida, apenas dd de todo o disco do sistema em uma imagem como uma única operação. Dessa forma, você certamente terá que executar fsck ao inicializar a imagem resultante pela primeira vez, mas evitará todas as complexidades com o MBR e os bootloaders.

    
por 20.07.2018 / 16:23