GNU/Linux >> Tutoriales Linux >  >> Linux

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

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

1. Arranque la máquina con un sistema Linux en vivo

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

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

2. Imagen del disco usando dd y canalice los datos a través de ssh

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

$ dd if=/dev/hdX bs=4k conv=sin error, sincronizar | ssh -c ejemplo de pez [email protected] '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, aconsejo verificar 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 -i y ejecutando una prueba con hdparm -Tt /dev/hdX ).

NOTA:dd no muestra el progreso de la operación, pero podemos obligarlo a que lo haga enviando el USR1 señal al dd procesar PID desde otro terminal:

$ matar -USR1 PIDofdd

Nota:Versiones más recientes de dd apoya el status=LEVEL opción (man dd )

   status=LEVEL
          The  LEVEL of information to print to stderr; 'none' suppresses everything but error messages, 'noxfer' suppresses
          the final transfer statistics, 'progress' shows periodic transfer statistics

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 utilizará para convertir la imagen de disco sin procesar al formato VHD, pero antes de hacerlo, podemos poner a cero los bloques no utilizados, de modo 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 usando parted en el 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

NOTA 2:El controlador NTFS predeterminado del kernel de Linux proporciona acceso de solo lectura, por lo que es necesario instalar y usar el espacio de usuario ntfs-3g controlador 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 sin procesar en un archivo VHD:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD

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

Entonces simplemente haría algo como esto:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd

Un enfoque es usar un par de tecnologías prácticas:VirtualBox y el ntfsprogs paquete.

Las versiones recientes de VirtualBox le permiten crear archivos de disco duro VHD, mientras que ntfsprogs proporciona el ntfsclone utilidad. Como su nombre indica, ntfsclone clona sistemas de archivos NTFS, y creo que lo hace a nivel del sistema de archivos, omitiendo bloques de disco no utilizados.

Entonces, para comenzar, cree una nueva VM en VirtualBox y aprovisione una nueva unidad de archivo VHD vacía para ella. La unidad VHD solo necesita ser tan grande como el tamaño de los datos en uso en la unidad física que desea clonar (bueno, en realidad, hágala un poco más grande, para permitir algo de margen de maniobra).

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

Inicie la máquina virtual VirtualBox con el Live CD de Linux e inicie sshd dentro de la VM para que pueda ejecutar comandos en ella de forma remota. Particione la unidad VHD vacía de manera adecuada, utilizando la herramienta de partición que prefiera (me gusta el viejo y sencillo fdisk , pero soy algo de la vieja escuela).

Con otra copia del Live CD de Linux, inicie la máquina que contiene el disco físico que desea clonar. Supongo que la máquina virtual VirtualBox 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 [email protected] 'ntfsclone --restore-image --overwrite /dev/sdYY -'

donde:

  • /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 máquina virtual) de la unidad de destino VHD.

Explicación:El primer ntfsclone El comando en la canalización 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 ntfsclone recibe la imagen y la restaura en la unidad VHD.

Una vez que se complete la operación, el archivo VHD debe contener un clon exacto archivo por archivo del disco físico original (salvo que se produzcan errores de hardware, como sectores defectuosos, que podrían provocar la interrupción prematura del proceso).

Una última cosa que puede hacer es ejecutar Windows chkdsk en la unidad VHD, solo para garantizar que la clonación no haya presentado ningún problema (no debería haberlo hecho, pero bueno, estoy un poco paranoico con estas cosas).


Linux
  1. Cómo aumentar el número de inodo de disco en Linux

  2. Cómo crear un video a partir de archivos PDF en Linux

  3. Cómo crear un USB de arranque de Linux desde la línea de comandos de Linux

  4. Linux:¿cómo crear un archivo de imagen de partición formateado desde cero?

  5. Cómo crear una imagen personalizada desde un contenedor Docker

Cómo crear un video a partir de imágenes en Linux

Cómo crear un USB en vivo de Antergos Linux

¿Cómo montar un archivo de disco duro virtual (VHD) en Ubuntu Linux?

Cómo cifrar el sistema de archivos raíz en Linux

Cómo crear particiones de disco en Linux

Cómo crear archivos en el sistema Linux:una guía definitiva