Cómo disminuir el tamaño / capacidad virtual de un archivo vdi de Virtualbox

8

Quiero convertir una máquina física con MS Windows 7 en una máquina virtual VirtualBox. Esto es fácil, lo he hecho antes, pero esta vez necesitaba que el tamaño / capacidad virtual del disco fuera un tamaño fijo y más pequeño .

Debe repararse porque instalaré el cifrado de disco PGP en él por razones de cumplimiento. Esto expandirá un disco dinámico a su tamaño máximo.

Aparte de este caso especial, existen otras razones para querer que los discos sean más pequeños y fijos. Es mi experiencia Si ejecuta, por ejemplo, un servidor de compilación Jenkins en un disco que se expande dinámicamente, podría ver que el disco se expande rápidamente a su tamaño máximo mientras que en el sistema operativo invitado el uso del espacio en disco es estable y hay mucho espacio libre.

Usando Disk2vhd , he creado un archivo vhdx. Este archivo lo convertí al formato vdi.

vboxmanage clonehd --format VDI MSWIN7.VHDX MSWIN7.vdi

Supuestamente con vdi podría disminuir el tamaño / capacidad virtual con comandos similares a

vboxmanage modifyhd MSWIN7.vdi --resize 160000

Descubrí que esto no funciona. Incluso si prueba variantes, recibirá constantemente mensajes de error como:

Estado de progreso: VBOX_E_NOT_SUPPORTED VBoxManage: error: ¡aún no se ha implementado el cambio de tamaño del disco duro para este formato!

A continuación se muestra el diseño del disco de mi disco vdi. Agregué esto a una máquina virtual Ubuntu para verlo usando Gparted y CloneZilla. La capacidad es de alrededor de 300 GB. Sin asignar 145 GB. Usado es de alrededor de 153 GB.

Quiero reducir la capacidad a alrededor de 160 GB. Esto debería ser suficiente para encajar /dev/sdb1y /dev/sdb2.

Por cierto, probé CloneZilla pero tampoco parece que le guste reducir la capacidad a un disco más pequeño. Probé varias configuraciones en CloneZilla pero no tuve éxito.

¿Cómo puedo disminuir el tamaño / capacidad virtual?

ingrese la descripción de la imagen aquí

onknows
fuente

Respuestas:

15
  1. Desasignar espacio al final del disco en el SO huésped , donde espacio> = tamaño (disco de origen) - tamaño (disco nuevo). Típicamente reduciendo la última partición .
  2. Apaga la máquina virtual.
  3. Cree un nuevo disco de Virtual Box con el tamaño deseado.
  4. Mueva el contenido del disco viejo al disco nuevo interior:

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. Encienda la máquina virtual.

  6. Puede que tenga que cambiar el tamaño de la partición en el sistema operativo invitado para llenar el resto del disco dependiendo del espacio desasignado en el paso 1.
Andre Figueiredo
fuente
2
Esta es la forma realmente correcta de convertir un vdi dinámico que cree usar una partición muy grande a un nuevo vdi (quizás formato de tamaño fijo por razones de rendimiento). No sé por qué nadie responde esta respuesta y prefiero la forma dd ...
zw963
¿Qué quiere decir con "desasignar espacio al final del disco"? ¿Se refiere a la reducción del archivo en el host VDI, a partir de esta pregunta: superuser.com/questions/529149/...
mikezter
en el sistema operativo invitado, he aclarado la publicación
Andre Figueiredo
¡Perfecto! ¡Muchas gracias!
Yamakuzure
1
El uso vboxmanage clonehd "source-disk.vdi" "new-disk.vdi" --existingdestruye la tabla de particiones en la imagen de destino.
Mogens TrasherDK
3

Al final logré resolver este rompecabezas de una manera inesperada y fácil usando la utilidad de línea de comandos preinstalada, ddvea Clonación de disco . Como se muestra a continuación, ahora tengo mi unidad de 160 GB en mi sistema operativo invitado almacenado en un archivo vdi VirtualBox fijo de 160 GB.

ingrese la descripción de la imagen aquí

Lo resolví siguiendo los siguientes pasos:

  1. Cambie el tamaño del disco usando Administración de discos en MS Windows a un tamaño igual o mejor un poco más pequeño que el tamaño del VDI.
  2. Agregue la fuente vdi MSWIN7.vdicon MS Windows 7 a una máquina virtual Ubuntu como segundo disco.
  3. Cree un nuevo vdi fijo de 160 GB y también agréguelo a la VM de Ubuntu. Ahora hay tres discos: /dev/sda1con Ubuntu VM en ejecución, /dev/sdb2con la fuente MSWIN7.vdiy /dev/sdc1con el nuevo vdi.
  4. Cree la partición correcta en /dev/sdc. CloneZilla hizo esto por mí. No copió datos, pero creó la partición que quería. Por supuesto que puedes hacer esto manualmente.
  5. Copiar sdba sdccon un ddcomando similar a sudo dd if=/dev/sdb of=/dev/sdc. El comando finaliza con un mensaje de error que no deja espacio, que se espera. Esto lo ignoré porque este es solo espacio sin asignar que no pudo copiar.

Creo que es posible ejecutar el comando para cada partición. Quizás sea mejor y no muestre un mensaje de error. sudo dd if=/dev/sdb1 of=/dev/sdc1y sudo dd if=/dev/sdb2 of=/dev/sdc2.

vagrant@devops:~$ sudo dd if=/dev/sdb of=/dev/sdc
dd: writing to ‘/dev/sdc’: No space left on device
335544321+0 records in
335544320+0 records out
171798691840 bytes (172 GB) copied, 6360.3 s, 27.0 MB/s
onknows
fuente
2

¡Creo que esta solución es extremadamente peligrosa! Se basa en que todos los archivos se encuentran en los primeros 153 GB de la partición original de 300 GB. El comando dd no copia archivos. Simplemente copia TODOS los bloques en secuencia. Por lo tanto, si tuvo la mala suerte de tener archivos importantes DESPUÉS del corte de 160 GB, dd no sabrá copiarlos.

La solución típica que he visto en muchas publicaciones es encender la VM de Windows y usar alguna combinación de herramientas de desfragmentación y herramientas administrativas para consolidar todos los archivos en la parte frontal del disco; la dificultad es que muchas herramientas de desfragmentación no se mueven inamovibles Archivos del sistema de Windows (tuve que desactivar la Recuperación del sistema para eliminar un fragmento de disco inmóvil de 7 GB), que se encuentran en el medio del espacio que está intentando consolidar.

Una vez que haya consolidado los archivos en la parte frontal del disco (MyDefrag es una herramienta gratuita que proporciona una visualización de dónde están los archivos en el disco), debe reducir el tamaño de su partición de Windows. Utilicé la herramienta diskpart con la opción de reducción.

En este punto, puede usar dd para copiar la partición ahora más pequeña a un nuevo vdi.

También he usado vboxmanage modifymedium win10.vdi --compact, en mi host Linux, pero primero tuve que ejecutar sdelete.exe dentro del sistema de Windows para poner a cero todo el espacio no utilizado primero (sdelete -zc :). El uso de vboxmanage para compactar el archivo vdi existente le permite hacer todo en el lugar (pero siempre tener una copia de seguridad).

Paul Hursky
fuente
Lo que olvidé mencionar es que primero cambié el tamaño de la partición en MS Windows al tamaño correcto. Esto garantiza que los archivos estén en la parte de 153 GB. MS WIndows moverá los archivos / datos. Tenga en cuenta que MS Windows no cambiará de tamaño a veces porque los archivos no se pueden mover.
onknows
2

En mi caso, tenía una máquina virtual de Windows con 50 GB de vdi para reducir a 20 GB.

He probado la solución de Andre Figueiredo pero tuve un problema con el clonado vdi.

Cuando aplico la solución Andre Figueiredo y adjunto el encogido vdia la VM, durante el arranque, Virtualbox se detiene con un error de E / S.

Quizás esto esté relacionado con mi btrfssistema de archivos (escuché que btrfscausa problemas con Vritualbox vdi).

Mi solución:

Intenté una solución diferente para reducir el disco VM ( vdi), llamado OVdi , ( OVdi tiene un tamaño de disco de 50 GB, una partición ntfs única con 40 GB de espacio libre).

Sigamos estos pasos (este es mi caso, puedes adaptar / inventar diferentes nombres vdi ):

  • detener la VM (apagado)

  • crear un nuevo disco ( vdi) con el nombre DVdi del tamaño deseado (20GB mi caso ..)

  • adjuntar DVdi a la VM

  • arranque VM e instale la utilidad EaseUS Backup Free

  • Ejecute EasyUS y use la función EasyUS Clone (clona OVdi MBR y la partición ntfs de OVdi reduciéndose a un nuevo disco DVdi )

  • Apagar la VM

  • Separar OVdi de VM

  • Compruebe si DVdi es el primer dispositivo de arranque para la VM

  • reiniciar la VM

  • Que te diviertas

No olvides eliminar el volumen OVdi .

Siguiendo estos pasos, reduje con éxito el tamaño del disco VM de 50 GB a 20 GB

Fabiano Tarlao
fuente
0

Como otros han mencionado, la respuesta de Andre Figueiredo se basa en la suerte, ya que no hay garantía de que la "primera X gb" del espacio sea su espacio, a menos que defragmente, en cuyo caso aún es arriesgado.

La respuesta de Paul Hursky es mucho más segura. Enumeraré algunos pasos adicionales que hice (tenga en cuenta que esto es para Windows, el mío fue XP pero también debería funcionar para otros):

1) Obtenga la edición gratuita de "MiniTool Partition Wizard Free 12" en este enlace

2) Instálelo dentro del sistema operativo invitado y cambie el tamaño de su unidad, deje un poco de espacio para respirar solo para estar seguro (no lo tire hacia atrás ...) Como es muy probable que cambie el tamaño del disco duro del sistema operativo actual, le dará la opción de reiniciar y realizar la acción, haga esto.

3) Ahora usando el mismo programa de Partición MiniTool, seleccione su espacio ahora no asignado (debajo *:) -> Haga clic derecho -> Limpiar partición -> Rellenar sectores con cero (rápido).

4) Ahora apague con seguridad el sistema operativo invitado. Vaya a la carpeta VirtualBox donde existe VBoxManage.exe, abra cmd en esta ruta y ejecute esto:

vboxmanage modifymedium C:\PATH_TO_YOUR_VDI\CHANGE_ME.vdi --compact

5) Y ahora todo debería funcionar mágicamente. La próxima vez que abra el sistema operativo invitado, ejecutará el disco de verificación, DEJAR QUE SE EJECUTE, encontrará "archivos huérfanos" que parecían archivos del sistema.

goamn
fuente