VMware Workstation: cómo reducir el tamaño máximo .vmdk


27

Tengo un archivo de disco de 150 GB (.vmdk, no preasignado) donde se almacena mi máquina virtual.

El archivo tiene actualmente 20 GB, pero está creciendo todos los días, a pesar de que no estoy almacenando nada nuevo en el sistema de archivos invitado.

He estado buscando durante horas una forma de reducir el tamaño máximo de este disco , para que nunca llegue a 150 GB (me gustaría establecer el límite en 30 GB y ver qué sucede cuando la VM alcanza este tamaño) .

Lo que he intentado:

  • Convertir la imagen de disco con VMware Converter → esto no funciona, la herramienta solo permite crear una copia completa o un 'clon vinculado'.
  • Crear una nueva máquina virtual en blanco del tamaño deseado para copiar los datos de 20 GB en el nuevo .vmdk → No puedo encontrar una manera de realizar la copia o incluso conectar el nuevo disco a mi VM existente (de modo que realizo la copia usando El SO invitado).
  • Mirando en el archivo .vmx para verificar si el tamaño máximo no se estableció en texto plano (no lo es).

Aunque esta tarea parece técnicamente bastante simple (no hay una reducción complicada, solo un simple cambio de límite de tamaño), realmente no tengo ideas aquí ...

¿Hay alguna solución?


1
Dado que las particiones en el disco virtual probablemente se crean para llenar el espacio publicitado, la "reducción difícil" está realmente involucrada.
Daniel B

Respuestas:


25

El procedimiento habitual para reducir el tamaño de un disco .vmdk es:

  1. Desfragmente el disco a través del invitado, eligiendo un modo de desfragmentación que consolide el espacio vacío al final del disco. Para un invitado de Windows, debe vaciar la Papelera de reciclaje y desactivar la hibernación y la paginación, devolviéndolas después de que se haya realizado la desfragmentación.

  2. Cero todo el espacio no utilizado en el disco.
    Para Windows utilización sdelete : sdelete -c.
    Para Linux: dd if=/dev/zero of=/mytempfile && rm -f /mytempfile.

  3. Encoge el disco (que puede tardar bastante tiempo en completarse).
    VMware Workstation: Menú VM / Administrar / Limpiar discos.
    O usar: vmware-vdiskmanager.exe -k [VMDK PATH].
    para ESX: vmkfstools --punchzero [VMDK PATH].

Convertir el disco de cultivable a preasignado podría detener su crecimiento. Esto se puede hacer usando vmware-vdiskmanager con el -tparámetro cuyos valores son:

0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : single preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files

El siguiente comando convertirá el .vmdk de cultivable a preasignado:

vmware-vdiskmanager -r current_disk_name.vmdk -t 3 new_disk_name.vmdk

Si desea cambiar el tamaño del disco, esto debe hacerse mientras el disco todavía está en formato ampliable (ejemplos aquí ).

Para obtener más información, consulte la Guía del usuario de Virtual Disk Manager .


2
Sin embargo, esto no reduce el tamaño de la unidad anunciada internamente.
Daniel B

@DanielB: No, no reduce el tamaño máximo, solo el tamaño físico. Reducir el tamaño máximo puede ser peligroso, ya que algunos sistemas operativos no pueden arrancar sin espacio libre en el disco del sistema.
harrymc

3
Esta es una técnica útil que utilicé para reducir el espacio ocupado por el VMDK. Sin embargo, esto no resuelve completamente mi problema, ya que si quiero mantener el VMDK siempre bajo, digamos 30 GB, tendré que repetir periódicamente la operación (lo que realmente lleva mucho tiempo).
Sébastien

Si el disco siempre puede reducirse al tamaño deseado, lo que significa que el procedimiento anterior siempre funciona para reducir el tamaño, entonces podría limitar el tamaño en el futuro convirtiendo el disco a un tamaño fijo.
harrymc

1
@harrymc Convertir el disco a un tamaño fijo se adaptaría a mis necesidades. Simplemente no encontré una manera de hacer esto con VMWare Workstation o Converter.
Sébastien

6

El archivo tiene actualmente 20 GB, pero está creciendo todos los días, a pesar de que no estoy almacenando nada nuevo en el sistema de archivos invitado.

Debido a que el sistema operativo y sus programas de aplicación usan temporalmente mucho espacio en disco para archivos temporales, archivos de página, archivos de hibernación y archivos de configuración. Una vez que se eliminan, según la política del sistema operativo, se utilizan nuevos sectores en el disco la próxima vez. La VM asigna almacenamiento para el disco virtual desde el disco real cada vez que se utiliza un nuevo sector en el disco virtual. Como el sistema operativo invitado no reutiliza siempre el sector en el disco virtual, la VM considera que se trata de un uso del disco y da espacio desde el disco real y esto conducirá a una imagen de disco virtual en crecimiento.

Es menos probable que se resuelva el título de su pregunta, ya que el uso de dicha herramienta sin inspección de la imagen puede conducir a un desastre total. Pero puede evitar que la imagen crezca más allá de 30 GB. Hay muchas formas de lograr el objetivo.

A. Use solo 30GB particionados y deje el resto como espacio libre. Si ya particionó más espacio, entonces necesita reducirlo / eliminarlo, crear una nueva partición y luego volcarlo con ceros y perforarlo como lo describe @harrymc. Como el espacio en un área no particionada nunca se usa, el disco virtual nunca crecerá más allá de 30GB.

B. Cree una instantánea y restaure después del uso. Después de crear una instantánea, VM almacena los datos en un nuevo archivo de imagen. Si lo restaura, sin guardar o hacer nuevas instantáneas, todos los datos modificados se eliminan y, por lo tanto, se libera espacio.

C. Cree un nuevo disco virtual de un máximo de 30 GB, agréguelo como un nuevo disco a su máquina virtual actual, mueva todos los datos al nuevo disco virtual utilizando una herramienta de respaldo. Puede usar un Linux en vivo para la clonación.

La opción recomendada es A


2

¿Por qué no simplemente establecer el tamaño del disco involucrado en 30GB desde 150GB?

Tendrá que configurar la suma de todas las particiones para que sea inferior a 30 GB. Tendrá que reducir el tamaño de las particiones a medida que avanza. Hay MUCHA documentación en este sitio sobre cómo reducir las particiones, así que no lo repetiré aquí OTRA VEZ.

¿Por qué creaste una partición delgada de 150GB si no tuviste el espacio para soportarla al máximo? Parece que esto es solo pedir problemas.


55
No creé personalmente la VM, por eso.
Sébastien

¿Cómo encojo el disco en sí? Las particiones dentro del disco se reducen, pero vdiskmanager.exe -k [VMDK PATH]como se sugiere en otra respuesta, no reduce la unidad.
Aaron Franke

El problema que no está documentado claramente es cómo cambiar el tamaño de un dispositivo vmdk (después de cambiar el tamaño de la partición, por supuesto). También @mdpc, creo que su respuesta no es constructiva. Hay muchas ocasiones en las que necesita cambiar el tamaño de los datos en una máquina virtual existente , por lo que no tiene sentido señalar con el dedo que la VM debe crearse correctamente.
basos

2

Hay una forma indirecta de utilizar VMWare Converter para crear una nueva VM y un tamaño de VMDK más pequeño, luego convertir el VMDK original en el VMDK más pequeño recién creado.

Reducir VMDK

Pasos detallados aquí .

Tenga en cuenta que cualquier cambio en el tamaño de VMDK también necesitará una actualización correspondiente a la tabla de particiones .


Esta es una VM VMWare Workstation, y Converter no ofrece estas opciones de copia avanzadas para este tipo de VM. Simplemente no me deja cambiar el tamaño del disco.
Sébastien

2

Esto funciona solo para VMDK disperso (NO preasignado) Se requiere una desfragmentación antes de reducir para garantizar que el espacio utilizado sea contiguo

Desfragmentar dentro de Windows

En una máquina virtual de Windows, primero debe ejecutar una desfragmentación de disco desde Windows. La desfragmentación dentro de Windows asegura que todos los espacios utilizados sean contiguos. Luego puede reducir el tamaño del disco virtual.

Encogiendo el disco virtual

Para reducir el disco virtual:

Abra el Panel de herramientas / Panel de herramientas de VMware Tools:

En Windows:

Haga doble clic en el icono de VMware Tools en la bandeja del sistema o haga clic en Inicio> Panel de control> VMware Tools.

En Linux:

Abra la terminal y ejecute este comando:

vmware-toolbox

Nota: En Workstation 9.x (Windows) y superior, la reducción se realiza automáticamente mientras se limpia el disco. Por lo tanto, esta opción se elimina del Panel de herramientas de VMware. Vaya a VM> Administrar> Limpiar discos. Esto no está disponible en la versión Linux de VMware Workstation 9.xy posterior.

Haz clic en la pestaña Reducir. Seleccione la unidad que desea reducir. Haga clic en Prepararse para reducir, luego siga las instrucciones en pantalla. Precaución: No apague su máquina virtual o la máquina host mientras el disco se está reduciendo. Además, no intente cancelar el proceso. Interrumpir este proceso puede causar daños irreparables en su disco virtual y es posible que no pueda volver a iniciar su máquina virtual.

De la base de conocimiento VMWare


Leer las respuestas existentes primero evita las respuestas duplicadas.
harrymc

1
Lo siento, de todos modos lo volví a publicar con el procedimiento completo y la fuente. Esto puede ayudarlo más
Jalal Mostafa

Tampoco responde la operación. OP quiere reducir el límite máximo, no el tamaño actual.
Ryuu

2

La respuesta de @harrym es bastante buena, pero en realidad no responde la pregunta. El OP quiere reducir el tamaño máximo . El problema es que el hipervisor no sabe qué cantidad del tamaño presentado (también conocido como tamaño máximo) es realmente utilizado por el sistema operativo. La compactación (vmware-vdiskmakager -k) se aplica a un vmdk ampliable. No hace nada en uno preasignado.

Entonces, los pasos para reducir el tamaño del disco son:

  1. Cambiar el tamaño de la partición en el disco a través del sistema operativo, o mediante un CD en vivo adecuado
  2. Cambie el tamaño del dispositivo vmdk, eligiendo cuidadosamente el límite para no cortar ningún espacio de partición utilizable. Siempre puede dejar más espacio en la imagen de lo que realmente se necesita.

El primer paso implica un procedimiento desde la VM y varía con el SO huésped. El segundo paso podría ser compatible con los comandos vmware, pero no he encontrado una manera profunda de hacerlo. De ahí el enfoque hacky.

Aquí hay una solución no tan rápida (debido al gran movimiento de datos involucrados) y sucia que hizo el truco. Necesitaremos tener un espacio disponible igual al tamaño máximo del dispositivo .

ADVERTENCIA: ¡Recuerde hacer una copia de seguridad de los datos importantes antes de cualquier operación!

  1. Encuentre una manera de cambiar el tamaño de la partición de invitado y dejar espacio sin asignar al final del dispositivo. Dos ejemplos:

    Desde el sistema operativo invitado: Windows 7

    1. Puede usar la capacidad de cambio de tamaño en línea. Es una buena idea desfragmentar primero el disco desde el sistema operativo de búsqueda.
    2. Ejecute diskmgmt.msc, seleccione la partición (volumen) en el disco que desea cambiar de tamaño, haga clic derecho-> Reducir volumen. En el cuadro de diálogo que aparece, reduzca el tamaño según sus requisitos. Tenga en cuenta que, dado que la partición está en uso (si es el disco del sistema o está muy fragmentada), es posible que no pueda recuperar la mayor parte de su espacio libre. Disposición para dejar espacio libre adicional.
    3. Ahora queremos saber las particiones que terminan el sector del disco (o byte). Suponiendo que esta sea la única partición en el dispositivo, tomamos el tamaño del volumen como se muestra en mi computadora-> seleccionar disco-> clic derecho-> propiedades-> Capacidad: tenga en cuenta el número en bytes. (por ejemplo, en mi ejemplo 107371032576 para 99,9GB). Agregue unos cien megas por seguridad (+204800) (por ejemplo, 107371237376). Para asegurarnos de que no necesitamos agregar nada que falta, podemos usar la utilidad de línea cmd diskpart para encontrar el desplazamiento de la partición desde el inicio del dispositivo. ejecute diskpart entonces: enumere el disco, seleccione la identificación del disco , enumere la parte, seleccione la identificación de la parte , detalle. Ejemplo:

    DISKPART> parte de detalle

    Partición 1

    Desplazamiento en bytes: 1048576

    Asegúrese de agregar al menos este número al tamaño del disco. Ahora necesitamos convertir los bytes en sectores que se dividen entre 512 y se redondean hacia arriba (techo). Por ejemplo, 209709448. Tenga en cuenta este número para el paso 3.

    A través de un CD en vivo: SystemResqueCD

    1. Alternativamente, puede usar un CD resque, ( SystemResqueCD es mi propuesta), descargar ISO de arranque, montarlo como un dispositivo de CD-ROM virtual en su VM, iniciar desde el CD (presionando la tecla Esc en la pantalla de inicio de VMWare, es posible que deba intentarlo algunas veces como aparece muy pronto). Cuando llegue al tipo de símbolo del sistema: startx, con suerte lo llevará a la interfaz gráfica.
    2. Una vez en el escritorio de systemresque, comience gparted (por ejemplo, desde un terminal). Encuentre la partición que se va a redimensionar (debe desmontarse limpiamente, si tiene dudas, haga un scandisk del sistema operativo invitado). Cambie el tamaño y planifique cuidadosamente sus necesidades de espacio.
    3. Nuevamente, necesitamos encontrar el desplazamiento final en sectores (o bytes) de la partición. Abra la terminal y escriba el [ dispositivo ] separado , luego la unidad s, imprima. P.ej

Número Inicio Fin Tamaño Tipo Sistema de archivos Banderas

1 2048s 113455103s 113453056s arranque ntfs primario

Anote el sector final y agregue 1. Por ejemplo, 113455104. Tenga en cuenta este número para el paso 3.

  1. Como el hack funciona en vmdks preasignados de un solo archivo (tipo 2) (no lo he probado en varios tipos de archivos), primero convertimos lo crecible en preasignado. Necesitaremos temporalmente una partición con espacio físico como el tamaño máximo del dispositivo. (por ejemplo, 150 GB).

    vmware-vdiskmanager.exe -r sourcevmdk -t 2 destvmdk

  2. Ahora la parte difícil, para el disco preasignado debería haber 2 vmdks

    disk.vmdk disk-flat.vmdk

    el primero tiene solo KB de largo y el segundo que contiene los datos se extiende. Abra el primero (disk.vmdk) mientras la estación de trabajo VMWare está apagada , con un editor de texto (Notepad ++ es mi sugerencia). Encuentra la linea

    RW 113455104 PLANO "Windows 7_x64-fl-flat.vmdk" 0

    Sí, obtienes el punto, el segundo campo es el número de sectores asignados para el dispositivo. Como validación, multiplique por 512 y encuentre el tamaño en bytes, luego divida por 1073741824 (1024 ** 3) para encontrar el tamaño en GB. Este debería ser el tamaño del dispositivo anterior.

    Ahora reemplace ese número con el número anotado del paso uno y guarde el archivo. ADVERTENCIA : Un error aquí y podría terminar recortando los datos reales utilizados en el sistema de archivos. (Pero cambiamos el tamaño de fs al comienzo del dispositivo e hicimos cálculos correctos y seguros, ¿verdad?)

  3. Hasta ahora no se han tocado datos todavía. Realice este último paso para recortar realmente las extensiones. Utilizaremos la funcionalidad de cambio de nombre de vmware-vdiskmanager para recrear el vmdk con su tamaño ahora recortado.

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk


0

Para un sistema operativo invitado vmware linux, ejecute:

sudo vmware-toolbox-cmd disk shrinkonly

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.