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

26

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

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

  • Eu gostaria que o arquivo de destino fosse uma imagem VHD , já que o Windows 7 pode montá-lo nativamente, mesmo pela rede e muitos outros programas podem usá-lo (VirtualBox , ...)
  • O disco que estou tentando imagem contém uma instalação do Windows XP, portanto, em teoria, eu poderia usar o utilitário disk2vhd , mas gostaria de encontrar uma solução que não exija a inicialização do Windows XP install (ou seja, mantenha o disco somente leitura)
  • Assim, eu estava procurando uma solução envolvendo algum tipo de sistema ao vivo (executado a partir de um dispositivo USB ou da rede)

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

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

    
por Federico 10.04.2012 / 23:41

6 respostas

28

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

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

O primeiro passo foi inicializar a máquina que contém o disco para a imagem, usando um sistema live Linux.

NOTE: My first idea was to use an Ubuntu Live USB disk, but the machine did not support booting from USB, so I found it easier to use an old Knoppix live CD.

2. Imagem do disco usando dd e canalizar os dados através de ssh

Em seguida, copiei todo o conteúdo do disco para uma imagem de arquivo no meu servidor local usando dd e canalizando os dados por meio de ssh :

$ dd if=/dev/hdX bs=4k conv=noerror,sync | ssh -c blowfish myuser@myserver 'dd of=myfile.dd'

Alguns comentários aqui: este método lerá todo o conteúdo do disco, por isso pode demorar muito (demorou 5 horas para um disco de 80Gb). O gargalo não é a rede, mas realmente a velocidade de leitura do disco. Antes de iniciar a cópia, aconselho 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 -i e executando um teste com hdparm -Tt /dev/hdX ).

NOTA: dd não produz progresso da operação, mas podemos forçá-lo a fazer isso enviando o sinal USR1 para o% PID% process PID de outro terminal:

$ kill -USR1 PIDofdd

3. Recupere o espaço não utilizado

Neste 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 bruta do disco para o formato VHD, mas antes disso, podemos zerar os blocos não usados, 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 indicando o início da partição dentro da imagem do disco pode ser obtido usando dd no 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 do kernel Linux padrão fornece acesso somente leitura, portanto, é necessário instalar e usar o driver parted do espaço do usuário ou gravar no disco gerará 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
    
por 14.04.2012 / 22:39
8

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
    
por 11.03.2015 / 01:01
3

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

Versões recentes do VirtualBox permitem que você crie arquivos de disco rígido VHD, enquanto ntfsprogs fornece o utilitário ntfsclone . Como o próprio nome sugere, ntfsclone clones sistemas de arquivos NTFS, e eu acredito que ele faz isso no nível do sistema de arquivos, ignorando blocos de disco não utilizados.

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

Em seguida, encontre um live CD do Linux que contenha o pacote ntfsprogs , bem como openssh-server . Eu gosto do CD de Recuperação do Sistema para isso, mas praticamente qualquer CD ao vivo baseado em Debian ou Ubuntu também deve funcionar.

Inicialize a VM do VirtualBox com o live CD do Linux e inicie sshd na VM para que você possa executar comandos remotamente. Particione a unidade de VHD vazia apropriadamente, usando qualquer ferramenta de particionamento que você preferir (eu gosto do antigo fdisk , mas eu sou um tanto old school).

Com outra cópia do live CD do Linux, inicialize a máquina que contém o disco físico que você deseja clonar. Suponho que a VM do VirtualBox e esta máquina sejam acessíveis entre si pela 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 do VHD.

Explicação: O primeiro comando ntfsclone no pipeline extrai uma imagem do sistema de arquivos NTFS de origem eo envia através do túnel ssh, enquanto o segundo comando ntfsclone recebe a imagem e a restaura na unidade VHD. / p>

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

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

    
por 11.04.2012 / 03:10
1

(Eu sei que este é um post antigo, mas talvez isso, pelo menos, ajude os outros.)

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. Eu não acho que os sistemas de arquivos Linux possam ser encapsulados em um contêiner VHD.

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

    
por 05.12.2012 / 20:03
0

Eu também tentei clonar um sistema Linux ao vivo recentemente.

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

(1) VMware vConverter (gratuito)

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

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

Refira-se aqui: link

(2) Use este link

Vou tentar o Hotcopy da R1Soft neste fim de semana.

    
por 13.04.2012 / 10:57
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 um cd ou drive USB.

    
por 02.03.2016 / 08:18