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