Como criar uma imagem de disco VHD a partir de um sistema ativo Linux?

29

Mais uma vez, tenho que recorrer aos especialistas aqui no SuperUser, pois minhas outras fontes (principalmente o Google ;-)) não foram muito úteis ...

Então, basicamente, eu gostaria de criar uma imagem VHD de um disco físico para ser arquivada / acessada / talvez até montada em uma máquina virtual. Agora, existem dezenas de artigos e tutoriais sobre como fazer isso na Web, mas nenhum que atenda exatamente às condições que eu gostaria de obter:

  • Gostaria que o arquivo de destino fosse uma imagem VHD , pois o Windows 7 pode montá-lo nativamente, mesmo através da rede e muitos outros programas podem usá-lo (VirtualBox, ...)
  • O disco que estou tentando criar uma imagem contém uma instalação do Windows XP; portanto, em teoria, eu poderia usar o disk2vhdutilitário, mas gostaria de encontrar uma solução que não exija a inicialização da instalação do Windows XP (ou seja, mantenha o disco somente leitura )
  • Assim, eu estava procurando uma solução que envolvesse algum tipo de sistema ativo (executando a partir de um dispositivo USB ou da rede)

No entanto, todas as soluções que encontrei usam disk2vhdou usam o ddcomando no linux, que faz uma cópia completa do disco (ou seja, mesmo blocos vazios) e não gera um arquivo VHD. Existe uma ferramenta / programa no Linux que pode criar diretamente um arquivo VHD? Ou é possível converter uma imagem de disco bruto criada usando dd em um arquivo VHD, sem alocar espaço para os blocos vazios? Como você procederia?

Como sempre, qualquer conselho ou comentário é muito apreciado!

Federico
fonte
Os BSDs têm uma ferramenta chamada mkimg que pode criar uma imagem vhd entre outros formatos.
Julian

Respostas:

30

Para referência futura, eis como eu finalmente procedi, com alguns comentários sobre os vários problemas ou armadilhas encontradas:

1. Inicialize a máquina com um sistema ativo Linux

O primeiro passo foi inicializar a máquina que contém o disco na imagem, usando um sistema ao vivo do Linux.

NOTA: Minha primeira idéia foi usar um disco USB do Ubuntu Live, mas a máquina não suportava a inicialização a partir do USB, então achei mais fácil usar um CD ao vivo antigo do Knoppix .

2. Imagem do disco usando dde canalize os dados atravésssh

Em seguida, copiei todo o conteúdo do disco em uma imagem de arquivo no meu servidor local usando dde canalizando os dados através de ssh:

$ dd se = / dev / hdX bs = 4k conv = noerror, sincronização | ssh -c blowfish myuser @ myserver 'dd de = myfile.dd'

Alguns comentários aqui: esse método lerá todo o conteúdo do disco, podendo levar muito tempo (levei 5 horas para um disco de 80 Gb). O gargalo não é a rede, mas realmente a velocidade de leitura do disco. Antes de iniciar a cópia, aconselho a verificar os parâmetros do BIOS / disco / sistema para garantir que o disco e a placa-mãe estejam funcionando na velocidade mais alta possível (isso pode ser verificado usando o comando hdparm -ie executando um teste hdparm -Tt /dev/hdX).

NOTA: ddnão produz progresso da operação, mas podemos forçá-lo a enviar o sinal USR1 para o ddPID do processo a partir de outro terminal:

$ kill -USR1 PIDofdd

3. Recupere o espaço não utilizado

Nesse ponto, a máquina de origem não é mais necessária e trabalharemos exclusivamente no servidor de destino (executando o Linux também). O VirtualBox será usado para converter a imagem do disco bruto para o formato VHD, mas antes disso, podemos zerar os blocos não utilizados, para que o VirtualBox não aloque espaço para eles no arquivo final.

Para fazer isso, montei as imagens como um dispositivo de loopback:

$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file

NOTA: O deslocamento que indica o início da partição na imagem do disco pode ser obtido usando partedo arquivo de imagem:

$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit?  [compact]? B
(parted) print
Model:  (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End           Size          Type      File system  Flags
 1      32256B        21936821759B  21936789504B  primary   ntfs         boot
 2      21936821760B  80023749119B  58086927360B  extended               lba
 5      26608813056B  80023749119B  53414936064B  logical   ntfs

NOTA2: O driver NTFS padrão do kernel Linux fornece acesso somente leitura, portanto, é necessário instalar e usar o ntfs-3gdriver do espaço do usuário ou gravar no disco gera um erro!

4. Crie a imagem VHD usando o VBoxManage

Neste ponto, podemos usar os utilitários do VirtualBox para converter a imagem bruta em um arquivo VHD:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD
Federico
fonte
você deve ser capaz de montar a imagem VHD usando vdfuseou qemu-nbdconvertendo-o em um arquivos .img (mais informações: askubuntu.com/questions/19430/... )
Francesco
11
Em uma máquina lenta, a criptografia do ssh pode ser um gargalo. Considere usar o netcat (man nc) se não precisar da criptografia.
23414 Jeremy
2
Você esqueceu de cd no disco montado antes de criar o arquivo zero: mount -o loop, rw, offset = 26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; cat / dev / zero> zero.file; rm zero.file; Além disso, você pode usar pv em vez de dd para mostrar o progresso instantâneo.
precisa saber é o seguinte
11
Você provavelmente deve usar um tamanho de bloco maior com o dd, por exemplo, bs=4Mpara acelerar o processo significativamente.
Fritz
13

Eu estava tentando fazer exatamente a mesma coisa que o OP (ao resgatar uma instalação do Windows) e acabei criando uma nova ferramenta para ele ntfsclone2vhd.

Você simplesmente faria algo assim:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd
Yirkha
fonte
11
Três anos atrasado para o jogo, mas esta página é o principal resultado do Google para as palavras-chave relevantes, por isso ainda pode ajudar algumas almas pobres no futuro.
Yirkha
2
Esta solução precisa ser votada para o topo. É de longe a solução mais fácil (com makeexceção das cópias do Linux) que encontrei em muitas horas de pesquisa. Bravo por tomar a iniciativa Yirkha!
user66001
3

Uma abordagem é usar algumas tecnologias úteis: VirtualBox e o ntfsprogspacote.

Versões recentes do VirtualBox permitem criar arquivos de disco rígido VHD, enquanto ntfsprogsfornece o ntfscloneutilitário. Como o próprio nome sugere, ntfscloneclona os sistemas de arquivos NTFS, e acredito que o faça no nível do sistema de arquivos, pulando blocos de disco não utilizados.

Portanto, para começar, crie uma nova VM no VirtualBox e provisione uma nova unidade de arquivo VHD vazia para ela. A unidade VHD precisa ser tão grande quanto o tamanho dos dados em uso na unidade física que você deseja clonar (na verdade, aumente um pouco maior, para permitir espaço de manobra).

Em seguida, encontre um CD ao vivo do Linux que contenha o ntfsprogspacote e também openssh-server. Eu gosto do System Rescue CD para isso, mas praticamente qualquer CD ao vivo baseado em Debian ou Ubuntu deve funcionar também.

Inicialize a VM do VirtualBox com o CD ao vivo do Linux e inicie sshdna VM para que você possa executar comandos nela remotamente. Particione a unidade VHD vazia adequadamente, usando a ferramenta de particionamento que você preferir (eu gosto da velha idade fdisk, mas sou um pouco velha escola).

Com outra cópia do live CD do Linux, inicialize a máquina que contém o disco físico que você deseja clonar. Presumo que a VM do VirtualBox e esta máquina sejam acessíveis uma pela outra através da rede. Nesta máquina, execute o seguinte comando (tudo em uma linha):

ntfsclone --save-image -o - /dev/sdXX |
    ssh root@VirtualBox-VM 'ntfsclone --restore-image --overwrite /dev/sdYY -'

Onde:

  • /dev/sdXX é o nome do dispositivo (na máquina local) da unidade física que você deseja clonar e
  • /dev/sdYY é o nome do dispositivo (na VM) da unidade de destino VHD.

Explicação: O primeiro ntfsclonecomando no pipeline extrai uma imagem do sistema de arquivos NTFS de origem e a envia pelo túnel ssh, enquanto o segundo ntfsclonecomando recebe a imagem e a restaura na unidade VHD.

Após a conclusão da operação, o arquivo VHD deve conter um clone exato de arquivo para arquivo do disco físico original (exceto erros de hardware, como setores defeituosos, que podem causar o cancelamento prematuro do processo).

Uma última coisa que você pode querer fazer é executar um Windows chkdskna unidade VHD, apenas para garantir que a clonagem não apresente nenhum problema (não deveria ter, mas, ei, estou um pouco paranóico com essas coisas).

Steven segunda-feira
fonte
Olá, muito obrigado pela sua solução proposta! No final, usei outro método, pois tinha várias partições no disco para fazer backup e não pude usar facilmente o VirtualBox na máquina para fazer backup (veja minha resposta para detalhes), mas sua sugestão para usar o VirtualBox e o ssh se mostrou muito útil!
Federico
1

(Eu sei que este é um post antigo, mas talvez isso ajude outras pessoas.)

Você realmente precisa ser capaz de criar a imagem no Linux? Eu acho que você está tentando fazer backup de discos rígidos do Windows para VHD. Não acho que os sistemas de arquivos Linux possam ser encapsulados em um contêiner VHD.

Um utilitário SysInternals gratuito chamado Disk2vhd criará VHDs do Windows XP atualmente em execução ou sistema mais recente. Isso também deve funcionar para geração de imagens de unidades montadas em USB.

Bernard
fonte
0

Também tento clonar um sistema linux ao vivo recentemente.

Ainda não há soluções perfeitas. Sugira duas maneiras de tentar:

(1) VMware vConverter (gratuito)

Você precisa instalar o hypervisor vsphere (gratuito) como destino.

Eu fiz isso dias atrás, sem sorte para ter sucesso. Acho que eu instalo o vSphere em um VirtualBox.

Consulte aqui: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2) Use este http://www.r1soft.com/tools/linux-hot-copy/

Vou tentar o R1Soft hotcopy neste fim de semana.

NelsonT
fonte
Eu não vou tentar hot-cópia por causa disso, wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT
0

Você também pode usar um CD ao vivo com o Windows. Não é oficial da Microsoft, mas funciona. Você pode colocá-lo em uma unidade de CD ou USB.

Smeterlink
fonte