¿Cómo crear una imagen de disco VHD desde un sistema Linux en vivo?

29

Una vez más, tengo que recurrir a los expertos aquí en SuperUser, ya que mis otras fuentes (principalmente Google ;-)) no resultaron muy útiles ...

Básicamente, me gustaría crear una imagen VHD de un disco físico para archivar / acceder / tal vez incluso montar en una máquina virtual. Ahora, hay docenas de artículos y tutoriales sobre cómo hacerlo en la web, pero ninguno que cumpla exactamente las condiciones que me gustaría lograr:

  • Me gustaría que el archivo de destino sea ​​una imagen VHD , ya que Windows 7 puede montarlo de forma nativa, incluso a través de la red y muchos otros programas pueden usarlo (VirtualBox, ...)
  • El disco que estoy tratando de imaginar contiene una instalación de Windows XP, por lo que, en teoría, podría usar la disk2vhdutilidad, pero me gustaría encontrar una solución que no requiera el arranque de la instalación de Windows XP (es decir, mantener el disco de solo lectura). )
  • Por lo tanto, estaba buscando una solución que involucrara algún tipo de sistema en vivo (ejecutándose desde un dispositivo USB o la red)

Sin embargo, todas las soluciones que he encontrado utilizan disk2vhdo utilizan el ddcomando en Linux, que hace una copia completa del disco (es decir, incluso bloques vacíos) y no genera un archivo VHD. ¿Hay alguna herramienta / programa en Linux que pueda crear directamente un archivo VHD? ¿O es posible convertir una imagen de disco sin formato creada usando dd a un archivo VHD, sin asignar espacio para los bloques vacíos? ¿Cómo procederías?

Como siempre, cualquier consejo o comentario es muy apreciado.

Federico
fuente
Los BSD tienen una herramienta llamada mkimg que puede hacer una imagen vhd entre otros formatos.
julian

Respuestas:

30

Para referencia futura, así es como finalmente procedí, con algunos comentarios sobre los diversos problemas o dificultades encontradas:

1. Arranque la máquina con un sistema Linux Live

El primer paso fue arrancar la máquina que contiene el disco a la imagen, usando un sistema Linux en vivo.

NOTA: Mi primera idea fue usar un disco USB Live de Ubuntu, pero la máquina no admitía el arranque desde USB, por lo que me resultó más fácil usar un CD en vivo de Knoppix antiguo .

2. Imagen del disco usando ddy canalizando los datos a través dessh

Luego, copié todo el contenido del disco en una imagen de archivo en mi servidor local usando ddy canalizando los datos a través de ssh:

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

Algunos comentarios aquí: este método leerá todo el contenido del disco, por lo que puede llevar mucho tiempo (me tomó 5 horas para un disco de 80 Gb). El cuello de botella no es la red, sino la velocidad de lectura del disco. Antes de iniciar la copia, le aconsejo que verifique los parámetros del BIOS / disco / sistema para asegurarse de que el disco y la placa base funcionen a la velocidad más alta posible (esto se puede verificar usando el comando hdparm -iy ejecutando una prueba con hdparm -Tt /dev/hdX).

NOTA: ddno muestra el progreso de la operación, pero podemos forzarlo a hacerlo enviando la señal USR1 al ddPID de proceso desde otro terminal:

$ kill -USR1 PIDofdd

3. Recuperar el espacio no utilizado

En este punto, la máquina de origen ya no es necesaria y trabajaremos exclusivamente en el servidor de destino (también con Linux). VirtualBox se usará para convertir la imagen de disco sin formato al formato VHD, pero antes de hacerlo, podemos poner a cero los bloques no utilizados, para que VirtualBox no les asigne espacio en el archivo final.

Para hacerlo, monté las imágenes como un dispositivo de bucle invertido:

$ 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: El desplazamiento que indica el comienzo de la partición dentro de la imagen del disco se puede obtener utilizando partedel archivo de imagen:

$ 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: El controlador NTFS de kernel de Linux predeterminado proporciona acceso de solo lectura, por lo tanto, es necesario instalar y usar el ntfs-3gcontrolador de espacio de usuario o escribir en el disco generará un error.

4. Cree la imagen VHD usando VBoxManage

En este punto, podemos usar las utilidades de VirtualBox para convertir la imagen en bruto en un archivo VHD:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD
Federico
fuente
debería poder montar la imagen vhd usando vdfuseo qemu-nbdconvirtiéndola en archivos .img (más información: askubuntu.com/questions/19430/… )
Francesco
1
En una máquina lenta, el cifrado de ssh puede ser un cuello de botella. Considere usar netcat (man nc) en su lugar si no necesita el cifrado.
Jeremy
2
Olvidó crear un CD en el disco montado antes de crear el archivo cero: 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; También puede usar pv en lugar de dd para mostrar el progreso instantáneo.
Smeterlink
1
Probablemente debería usar un tamaño de bloque más grande con dd, por ejemplo, bs=4Mpara acelerar significativamente el proceso.
Fritz
13

Estaba tratando de hacer exactamente lo mismo que el OP (mientras rescataba una instalación de Windows) y terminé creando una nueva herramienta para ello ntfsclone2vhd,.

Entonces simplemente harías algo como esto:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd
Yirkha
fuente
1
Tres años tarde para el juego, pero esta página es el principal éxito de Google para las palabras clave relevantes, por lo que aún podría ayudar a algunas almas pobres en el futuro.
Yirkha
2
ESTA SOLUCIÓN DEBE SER VOTADA AL PRINCIPIO. Es, con mucho, la solución más fácil (excluyendo las makecopias de Linux) que he encontrado en muchas horas de búsqueda. Bravo por tomar la iniciativa Yirkha!
user66001
3

Un enfoque es utilizar un par de tecnologías útiles: VirtualBox y el ntfsprogspaquete.

Las versiones recientes de VirtualBox le permiten crear archivos de disco duro VHD, mientras ntfsprogsproporciona la ntfscloneutilidad. Como su nombre lo indica, ntfscloneclona los sistemas de archivos NTFS, y creo que lo hace a nivel del sistema de archivos, omitiendo los bloques de disco no utilizados.

Entonces, para comenzar, cree una nueva máquina virtual en VirtualBox y aprovisione una nueva unidad de archivo VHD vacía. El disco VHD solo necesita ser tan grande como el tamaño de los datos en uso en el disco físico que desea clonar (bueno, en realidad, hacerlo un poco más grande, para permitir un poco de margen de maniobra).

A continuación, busque un CD en vivo de Linux que contenga el ntfsprogspaquete, así como también openssh-server. Me gusta el CD de System Rescue para esto, pero casi cualquier CD en vivo basado en Debian o Ubuntu también debería funcionar.

Inicie la VM VirtualBox con el CD en vivo de Linux y comience sshddentro de la VM para que pueda ejecutar comandos en ella de forma remota. Particione el disco VHD vacío apropiadamente, usando cualquier herramienta de particionamiento que prefiera (me gusta la vieja fdisk, pero soy algo vieja).

Con otra copia del CD en vivo de Linux, inicie la máquina que contiene el disco físico que desea clonar. Supongo que VirtualBox VM y esta máquina son accesibles entre sí a través de la red. En esta máquina, ejecute el siguiente comando (todo en una línea):

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

dónde:

  • /dev/sdXX es el nombre del dispositivo (en la máquina local) de la unidad física que desea clonar, y
  • /dev/sdYY es el nombre del dispositivo (en la VM) de la unidad de destino VHD.

Explicación: El primer ntfsclonecomando en la tubería extrae una imagen del sistema de archivos NTFS de origen y la envía a través del túnel ssh, mientras que el segundo ntfsclonecomando recibe la imagen y la restaura en el disco VHD.

Una vez que se completa la operación, el archivo VHD debe contener un clon exacto de archivo por archivo del disco físico original (salvo los errores de hardware, como sectores defectuosos, que podrían hacer que el proceso se cancele prematuramente).

Una última cosa que puede hacer es ejecutar un Windows chkdsken el disco VHD, solo para asegurarse de que la clonación no haya presentado ningún problema (no debería haberlo hecho, pero bueno, estoy un poco paranoico sobre estas cosas).

Steven Monday
fuente
Hola, muchas gracias por tu solución propuesta! Al final, utilicé otro método, ya que tenía varias particiones en el disco para hacer una copia de seguridad y no podía usar VirtualBox fácilmente en la máquina para hacer una copia de seguridad (vea mi respuesta para más detalles), ¡pero su sugerencia de usar VirtualBox y ssh resultó muy útil!
Federico
1

(Sé que esta es una publicación antigua, pero tal vez esto al menos ayudará a otros).

¿Realmente necesitas poder crear la imagen en Linux? Creo que está intentando hacer una copia de seguridad de los discos duros de Windows en VHD. No creo que los sistemas de archivos de Linux puedan encapsularse en un contenedor VHD.

Una utilidad gratuita de SysInternals llamada Disk2vhd creará VHD del sistema operativo Windows XP o más reciente. Esto también debería funcionar para obtener imágenes de unidades montadas en USB.

Bernardo
fuente
0

También trato de clonar un sistema Linux en vivo recientemente.

Todavía no hay soluciones perfectas. Sugiere 2 formas en que puedes probar:

(1) VMware vConverter (gratis)

Debe instalar vsphere hypervisor (gratis) como destino.

Lo hice hace días, sin suerte para tener éxito. Supongo que instalo vSphere en una VirtualBox.

Ref. Aquí: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

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

Probaré el hotcopy de R1Soft este fin de semana.

NelsonT
fuente
No intentaré la copia en caliente debido a esto, wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT
0

También puede usar un CD en vivo con Windows. No es oficial de Microsoft pero funciona. Puede ponerlo en una unidad de CD o USB.

Smeterlink
fuente