¿Cómo cambiar VDI de tamaño fijo con el comando modifyhd en Windows?


71

Estoy tratando de descubrir cómo cambiar el tamaño de un archivo VDI. Soy nuevo en VirtualBox y tengo mucho que aprender. Pero creo que entendí lo básico. Ya instalé Windows 7 como mi primer invitado. El host también es Windows 7. No estaba seguro de cuánto espacio en disco asignar, así que elegí un tamaño VDI de 40 GB y un tamaño fijo para un mayor rendimiento. Pero ahora he cambiado de opinión y quiero agregar otros 10 GB. He estado haciendo clic en el programa y leyendo el contenido del menú Ayuda, pero no está ayudando. Explica los controladores de disco, SAS, SATA, SCSI, yada, yada, pero no es lo que estoy buscando.

Busqué respuestas en la red mundial, el foro de VirtualBox dice que se supone que debes usar Gparted si quieres el método más fácil (algunos mod publicaron una pegajosa). Algunos usuarios discuten usando el ddcomando. Pero eso es todo lo relacionado con Linux. Además, hay muchas preguntas aquí en SU ​​que tratan sobre el aumento y la disminución del tamaño de los archivos VDI, pero se trata de usar Linux como host y Windows como invitado.

Encontré esta bonita publicación de blog sobre cómo hacerlo con el modifyhdcomando de VBoxManage. Este tipo también lo está haciendo en Linux como sistema operativo host. Incluso quería el mismo tamaño (50 GB) para su archivo VDI que yo para el mío, qué coincidencia. Así que pensé en intentarlo de todos modos, ya sea hacerlo o romperlo. ¿Qué puede salir mal? ... ¿eh? Bueno, esta es la fea sorpresa que tengo.

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" --resize 51200
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: Resize hard disk operation for this format is not impleme
nted yet!

C:\Program Files\Oracle\VirtualBox>

una

¿Diga qué ahora?! ... no puede cambiar el tamaño de los discos duros virtuales del formato VDI? Usted no dice ¿No es compatible con su propio formato? Ahora qué tal eso ...

¿Realmente no hay una manera simple de cambiar el tamaño de un archivo VDI, preferiblemente con unos pocos clics dentro de VirtualBox? ¿Algo en progreso?


44
Eliminé la queja sobre la calidad de VirtualBox, que no agrega nada útil a la pregunta.
sleske

1
Para referencia futura, modifyhdahora se conoce como modifymediumpero sigue siendo compatible con versiones anteriores: consulte virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi
djule5

Respuestas:


123

Resumen:

  • VBoxManage.exe modifyhd --resize puede aumentar (pero no disminuir) el tamaño lógico de la imagen del disco (el tamaño visto por el SO huésped).
  • VBoxManage.exe modifyhd inputfile.vdi --compactpuede disminuir el tamaño de la imagen del disco físico (el tamaño del archivo de imagen en el disco como lo ve el sistema operativo host). Sin embargo, esto no cambia el tamaño del disco lógico. Tenga en cuenta que esto solo funciona si el espacio libre se ha puesto a cero en el SO huésped primero.
  • modifyhd solo funciona con la variante de formato dinámico ("imagen asignada dinámicamente").
  • modifyhd solo funciona con formatos de imagen VDI y VHD.
  • Si está utilizando instantáneas, deberá clonar el último VDI de instantánea de la subcarpeta "Instantáneas".

Para más detalles ver sección 8.23. VBoxManage modifyhd en el manual.


La razón por la que todavía no se ha implementado la disminución del tamaño de disco lógico de un VDI es para evitar la corrupción de datos que podría ocurrir y que tendría máquinas virtuales no arrancables como resultado de ello. Por lo tanto, cuando --resizese utiliza la opción, el nuevo tamaño del disco debe ser mayor que el tamaño actual. No se permite que sea menor o igual que el tamaño actual. En otras palabras, un disco de 40 GB solo puede redimensionarse a 41 GB o más que eso, no puede redimensionarse a 40 GB (eso es tonto) o 39 GB o menos.

Las versiones anteriores de VirtualBox creaban archivos VDI como variante de formato "fijo". La nueva configuración predeterminada ahora es crear variantes de formato "dinámico" cuando se crean nuevos archivos VDI (imagen de disco virtual). (Supongo que este es el caso desde la introducción de la variante de formato dinámico, cualquiera que sea la versión que se introdujo).

Entonces, el mensaje de error "la operación para este formato aún no está implementada" significa que su archivo VDI usa la variante de formato "fijo". Para solucionar este problema, deberá clonar su archivo VDI con el clonehdcomando Para ver en qué variante de formato se encuentra su archivo VDI en este momento, puede usar el showhdinfocomando.

Ejemplo de trabajo

Mostrar información VDI sobre el disco actual.

Comando de entrada: vboxmanage.exe showhdinfo path\inputfile.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi"
UUID:           132e9af1-0428-49f4-bc45-4d84680e17f5
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\VirtualBox VMs\sg2_win7_x64_lab\sg2_win7_x64_lab.
vdi
Storage format: VDI
Format variant: fixed default
Capacity:       40960 MBytes
Size on disk:   40962 MBytes
In use by VMs:  sg2_win7_x64_lab (UUID: dcd106b3-7ed6-4f19-ad94-820ab4dc10d3)

C:\Program Files\Oracle\VirtualBox>

¿Ves dónde dice "valor predeterminado fijo"? Es por eso que escupe el error anterior cuando intenta cambiar su tamaño.

Clone el antiguo archivo VDI a un nuevo archivo VDI.

Comando de entrada: vboxmanage.exe clonehd path\inputfile.vdi path\outputfile.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd "%userprofile%\virtual
box vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" "%userprofile%\virtualbox vms\sg2
_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 34dafa68-3093-4946-926a-8237ea263
e5c

C:\Program Files\Oracle\VirtualBox>

Voilà! El archivo antiguo ahora se ha clonado en un archivo nuevo. Dado que la configuración predeterminada en las nuevas versiones de VirtualBox es usar la variante de formato "dinámico", no tiene que definirlo explícitamente. Aunque, si está trabajando con una versión anterior de VirtualBox, es posible que desee establecer la opción en "dinámica" (si está disponible) para garantizar una mejor compatibilidad y / o flexibilidad con futuras versiones de VirtualBox.

Mostrar información VDI sobre el disco clonado.

Comando de entrada: vboxmanage.exe showhdinfo path\inputfile_clone.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID:           34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       40960 MBytes
Size on disk:   7806 MBytes

C:\Program Files\Oracle\VirtualBox>

¿Ves cómo ahora dice "defecto dinámico"? ¡Que agradable!

(¡En la nota al margen! La razón por la que dice 7806 MB como tamaño físico aquí es porque había usado la --compactopción en el archivo VDI original en un intento de imponer la conversión a la variante de formato dinámico. Algo que leí en el foro VirtualBox, supuestamente hubiera funcionado con versiones anteriores, así que pensé que podría intentarlo. No funcionó).

Cambiar el tamaño del disco clonado.

Comando de entrada: vboxmanage.exe modifyhd path\inputfile.vdi --resize 51200

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi" --resize 51200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

C:\Program Files\Oracle\VirtualBox>

¡Éxito! No hay formato de tonterías no más. Solo recuerde cambiar el tamaño del disco nuevo y clonado, y no el original. Tenga en cuenta que el tamaño se expresa en MB. Creo que puede usar, por ejemplo 51200, así como 50G(o posiblemente "GB"). También existe la opción --resizebyteque se puede usar para expresar el tamaño en bytes.

Mostrar información VDI sobre el disco clonado redimensionado.

Comando de entrada: vboxmanage.exe showhdinfo path\inputfile_clone.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID:           34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       51200 MBytes
Size on disk:   7806 MBytes

C:\Program Files\Oracle\VirtualBox>

¡Eso es! Desde aquí, lo que debe hacer es agregar esta unidad clonada como su nuevo VDI para la VM. Lo haces dentro de VirtualBox. No voy a entrar en eso. Si ha podido leer y comprender esto hasta ahora, entonces probablemente no necesite más orientación. Puede eliminar el antiguo archivo "fijo" o dejarlo como copia de seguridad. Asegúrese de probar el nuevo archivo VDI antes de eliminar el archivo fuente original.

¡Nota! No verá de inmediato el nuevo tamaño del disco clonado. Debe iniciar la VM con él y luego debe usar su herramienta de administración de particiones para expandir su partición para llenar el disco virtual (o crear más particiones). Para Windows, simplemente ejecute diskmgmt.mscy podrá expandir la partición allí.

Capturas de pantalla

una si C re mi F sol

Referencia



¡Buen ojo! He corregido el parámetro modifyhd. Gracias por traer esto a mi atención.
Samir

2
¡Una respuesta muy bien escrita! En mi humilde opinión, esto debería obtener muchos votos.
Johan Karlsson

+1: Son las personas como tú y el conocimiento que compartes libremente, lo que hace que el ecosistema StackExchange sea un recurso fantástico.
Homunculus Reticulli

1
Si tiene problemas porque está utilizando instantáneas , eche un vistazo a virtualbox.org/ticket/9103 . Básicamente, debe aplicar la operación modifymedium/ modifyhden el archivo de instantánea en sí.
djule5

11

Aquí hay un proceso bastante simple que me funcionó para cambiar el tamaño de un disco de tamaño fijo VirtualBox (v. 4.3.16) a un disco dinámico de 60GB en mi Mac (OS X 10.9.4) con Linux (Ubuntu 14.04) ejecutándose como SO invitado:

En Terminal en la Mac, CD en el directorio con el archivo VDI y escriba lo siguiente:

VBoxManage showhdinfo mydisk.vdi  
VBoxManage clonehd mydisk.vdi mydiskClone.vdi  
VBoxManage modifyhd mydiskClone.vdi --resize 61440  
VBoxManage showhdinfo mydiskClone.vdi

En la sección de almacenamiento de la aplicación VirtualBox, agregue mydiskClone.vdi como segundo HD, luego inicie la VM normalmente.

En el shell del sistema operativo invitado, escriba:

sudo fdisk /dev/sdb
- delete all partitions
- create new partition on full disk

Reiniciar el invitado. Cuando vuelva a aparecer, vaya al shell nuevamente y escriba:

sudo resize2fs /dev/sdb1

Apague el sistema operativo invitado.

En la sección de almacenamiento de la aplicación VirtualBox nuevamente, configure mydiskClone.vdi para que sea el disco de arranque. Luego, inicie el SO huésped y verifique el nuevo tamaño del disco utilizando las propiedades de "Computadora" en el explorador de archivos.


Esta respuesta no tiene sentido. Primero crea una partición grande en / dev / sdb, luego cambia su tamaño, pero no crea primero un sistema de archivos en ella. ¿Quizás olvidaste el paso de copiar sobre la partición original?
sleske

5

La clonación es en realidad una mejor solución y hay una manera más fácil de hacerlo.

En el menú Archivo, seleccione Virtual Media Manager, luego haga clic en Copiar. La fuente será su disco duro vdi de tamaño fijo original y su destino será algo nuevo de su elección (incluye la opción de uno nuevo).


Esta es parte de la respuesta de sammyg.
Efren

4

Bien, entonces lo hice posible sin clonar .

Tenía un archivo VDI de 100 GB (formato fijo) con Ubuntu. Funcionando bien. Quería liberar algo de espacio en el host reduciendo la VM.

Pasos:

  1. Limpiar

Archivos no deseados eliminados. 45GB gratis. Solo necesito 30GB para ser liberado.

  1. Repara el SO invitado

Solo tengo una partición, por lo que no puedo hacer nada desde el invitado Ubuntu. Montó Ubuntu Live en la VM y lo arrancó.

Se usa gpartedpara reducir la partición a 70 GB. Creó una nueva partición en el espacio no utilizado en ext4.

  1. Limpia el espacio libre

El espacio libre en una nueva partición (30GB).

Siguió esta guía: Reduzca el disco duro virtual en Ubuntu como SO huésped y host usando zerofree

Mi nueva partición fue /dev/sda3.

$ sudo apt-get install zerofree
$ sudo init 1

...

# mkdir /tmp3
# mount -o ro -t ext4 /dev/sda3 /tmp3
# zerofree -v /dev/sda3
  1. Compacta el VDI

    VBoxManage modifyhd "ubuntu.vdi" compacto

¡Tomó un tiempo, pero funcionó!


1
¿Estás seguro de que esto funcionó? Según el manual de VirtualBox, --compactsolo funciona para imágenes asignadas dinámicamente, no para las de tamaño fijo.
sleske

1
@ ATOzTOA: si el archivo de imagen de disco crece, entonces no es una imagen de "formato fijo", sino una imagen "asignada dinámicamente", que es lo que escribió en su respuesta.
sleske

3
No, esa es una imagen asignada dinámicamente . Para citar el manual: "Si crea una imagen de tamaño fijo, se creará un archivo de imagen en su sistema host que tiene aproximadamente el mismo tamaño que la capacidad del disco virtual". Virtualbox.org/manual/ch05.html#vdidetails
sleske

1
"Una imagen de tamaño fijo significa que no puede crecer más allá del tamaño especificado". NO. "Tamaño fijo" significa que el tamaño es fijo, por lo que siempre es el mismo. Lee los documentos.
sleske

1
Si alguien está leyendo esto y no está seguro de quién tiene razón. @sleske es correcto. Las imágenes de tamaño fijo son exactamente como dicen. Fijo al tamaño especificado al crear la imagen. En los puntos de referencia, esto proporciona un rendimiento mucho mayor sobre las imágenes asignadas dinámicamente, por lo que cualquiera que use VBox para tareas intensivas en HD probablemente debería considerar este formato a pesar de sus limitaciones.
Jack

2

Un poco tarde para la fiesta aquí, pero agregaré mis 2 centavos. Primero diré que este es un proceso complicado que enloquecerá a la mayoría de los usuarios casuales que intentan resolverlo. Por qué Oracle no incluyó esto en la GUI de VBox es un misterio.

Paso 1: use la línea de comandos de Windows (VBoxmanage) para aumentar el tamaño de la unidad. Un consejo aquí es usar la identificación de la unidad vdi en lugar de intentar sin cesar ingresar la ubicación del archivo y obtener mensajes de error.

Paso 2: Luego debe expandir su partición primaria para hacer uso del nuevo espacio. Descargue la iso de gparted y cree una nueva máquina virtual en VBox usándola como fuente IDE. Luego use la unidad VDI existente como disco sata. No cree una unidad virtual para esta máquina. Arranque la nueva máquina y tendrá la Gui dividida en funcionamiento. Esto puede tomar un par de reinicios para solucionarse.

Una vez que gparted se esté ejecutando, verá las particiones de su unidad vdi que desea cambiar de tamaño. IMPORTANTE: Tendrá que eliminar la partición extendida y el espacio de archivos de intercambio para poder aumentar el tamaño de la partición primaria, así que no asigne todo el nuevo espacio para el PP. Una vez que haga esto, tendrá que designar el espacio restante para la nueva partición extendida y crear un nuevo espacio de archivo de intercambio dentro de eso. Encontré que esto es mucho más fácil que perder el tiempo con la línea de comando.

No es pan comido, pero es factible ... me tomó cerca de medio día investigar la web para resolver esto. Ejecutando win8.1 / Ubuntu en VBox

Willie


2

Así es como cambié el tamaño / agrandé / expandí una imagen VDI fija (mi proceso para reducirlos está en otra respuesta):

  1. Use VirtualBox para crear un nuevo disco del tamaño deseado (el tamaño DEBE ser al menos igual al original). Para ello, abra la Configuración de VirtualBox para la VM invitada, navegue hasta Almacenamiento, haga clic en el Controlador HDD (por ejemplo, "SATA") y luego haga clic en "+" para agregar un disco duro. Luego configure el nuevo disco como desee.
  2. Descargue el ISO en vivo de gparted y configure la VM invitada para que arranque desde él (nuevamente, Configuración de almacenamiento).
  3. Haga una copia de seguridad del almacenamiento actual de su máquina virtual invitada.
  4. Inicie la máquina virtual invitada (debe iniciarse en un entorno en vivo dividido). Desde el interior del entorno separado:
    1. Use la aplicación gparted para verificar que su disco existente es "/ dev / sda", y que su nuevo disco (más grande) es "/ dev / sdb" (menú desplegable de arriba a la derecha).
    2. Cierre la aplicación separada.
    3. Abra una terminal con privilegios de root (haga clic derecho en el escritorio -> Terminales -> terminal con privilegios de root).
    4. Escriba el siguiente comando: dd if=/dev/sda of=/dev/sdb status=progress bs=128My espere a que se complete. Esto copiará el disco original en el nuevo disco byte por byte, incluido MBR, etc. (Nota: Esto puede tardar un tiempo en completarse dependiendo de los tamaños del disco original, la velocidad del disco en el host, etc.). (Nota: si su máquina virtual invitada tiene> 1 GB de RAM asignada, puede cambiar el parámetro 'bs' para que sea "bs = 256M", lo que podría acelerar un poco la copia).
    5. Vuelva a abrir la aplicación separada
    6. Seleccione la nueva unidad (más grande) (debe ser / dev / sdb) en el menú desplegable superior derecho.
    7. Expanda las particiones como desee. Para expandir una partición que no está al final, es posible que tenga que mover las particiones que están después de la (s) que desea expandir. Dependiendo de los detalles de su esquema de partición, puede necesitar hacer esto en múltiples pasos, como hacer crecer la última partición hasta el final y luego reducirla moviendo todo al final. En mi caso, mi partición final fue el intercambio de Linux, así que simplemente lo eliminé, expandí mi partición primaria según lo deseado y luego volví a crear la partición de intercambio al final (teniendo cuidado de replicar su esquema de partición original).
    8. Aplicar cambios.
    9. En este punto, debe tener un nuevo disco de tamaño fijo con todo el contenido original y más espacio que el original. Puede montar el nuevo disco en gparted live env y verificar.
    10. Apague la VM invitada (gparted live) y elimine el ISO de la unidad VM.
  5. Vaya a la Configuración de VBox para la VM invitada, navegue a Almacenamiento y elimine el disco original de la lista (haga clic con el botón derecho y seleccione "Eliminar adjunto"). Esto debería dejar su disco recién creado para la VM. Nota: Este paso es simplemente eliminar el disco de la configuración de la máquina virtual invitada: su disco de máquina virtual invitada original (es decir, el pequeño) todavía está disponible en la máquina host.
  6. ¡Arranca la VM y disfruta!
  7. (Una vez que se confirme que todo funciona como se esperaba, puede eliminar el disco VM original).

Si bien lo anterior me ha funcionado muy bien varias veces, parece que se necesitan algunos pasos más si se usa LVM. (NOTA: Si se usa LVM, simplemente puede agregar un nuevo disco del tamaño deseado y luego agregar ese disco al grupo de volumen). Con CentOS 6.6 donde se usa LVM, también tuve que aumentar el espacio dentro de LVM. Entonces, después de arrancar el nuevo disco creado anteriormente, hice algo en este sentido (varias partes de esto variarán según los nombres de su configuración):

  1. Obtenga información sobre la configuración de LVM:

    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  31.51g    0 
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 31.51g    0 
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 28.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  2. Extender el volumen físico (PV) (el grupo de volumen (VG) reflejará automáticamente el mismo aumento):

    # pvresize /dev/sda2
      Physical volume "/dev/sda2" changed
      1 physical volume(s) resized / 0 physical volume(s) not resized
    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  39.51g 8.00g
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 39.51g 8.00g
    
  3. Extender volumen lógico (LV):

    # lvextend /dev/vg_rhel6bm1/lv_root /dev/sda2
      Size of logical volume vg_rhel6bm1/lv_root changed from 28.31 GiB (7247 extents) to 36.31 GiB (9295 extents).
      Logical volume lv_root successfully resized
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 36.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  4. Extender el sistema de archivos:

    Antes de:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             28G   24G  3.1G  89% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    

    Mando:

    # resize2fs /dev/mapper/vg_rhel6bm1-lv_root
      resize2fs 1.41.12 (17-May-2010)
      Filesystem at /dev/mapper/vg_rhel6bm1-lv_root is mounted on /; on-line resizing required
      old desc_blocks = 2, new_desc_blocks = 3
      Performing an on-line resize of /dev/mapper/vg_rhel6bm1-lv_root to 9518080 (4k) blocks.
      The filesystem on /dev/mapper/vg_rhel6bm1-lv_root is now 9518080 blocks long.
    

    Después:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             36G   24G   11G  69% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    

¡Buena respuesta! Bienvenido al sitio!
djsmiley2k - CoW

1

Así es como cambié el tamaño / reduje / reduje una imagen VDI fija (mi proceso para expandirla está en otra respuesta en este mismo tema):

Primero, una breve descripción de por qué necesitaba esto (ya que hay muchos escenarios para reducir un VDI, algunos de los cuales pueden no ser factibles con este enfoque): hace años creé un VDI fijo para un invitado de Windows Server y lo dimensioné en 600 GB. No recuerdo por qué elegí este tamaño, pero a partir de hoy solo he consumido 100 GB en ese invitado y quiero recuperar la mayor parte del espacio restante. Entonces, en mi caso, quiero preservar todos los datos en el invitado y simplemente quiero liberar espacio no utilizado en el invitado.

(Los siguientes pasos son principalmente de mi memoria de haber hecho esto en las últimas 2 horas, así que disculpen si me pierdo algo aquí).

  1. Determine qué tan grande desea que sea el nuevo tamaño. Naturalmente, es probable que desee dejar al invitado con un espacio adicional más allá de lo que está consumiendo actualmente. El tamaño debe ser al menos el mismo que el de los datos en el disco fuente / original, redondeado al GB más cercano.
  2. Use VirtualBox para crear un nuevo disco de tamaño fijo con el tamaño determinado en el paso anterior. Para ello, abra la Configuración de VirtualBox para la VM invitada, navegue hasta Almacenamiento, haga clic en el Controlador HDD (por ejemplo, "SATA") y luego haga clic en "+" para agregar un disco duro. Luego configure el nuevo disco como desee.
  3. Descargue el ISO en vivo de gparted y configure la VM invitada para que arranque desde él (nuevamente, Configuración de almacenamiento).
  4. Haga una copia de seguridad del almacenamiento actual de su máquina virtual invitada.
  5. Inicie la máquina virtual invitada (debe iniciarse en un entorno en vivo dividido). Desde el interior del entorno separado:

    1. Use la aplicación gparted para determinar qué disco es el "original" y cuál es el "nuevo". El original tendrá al menos una partición, mientras que el nuevo estará completamente en blanco. (Por lo general, el "original" es el primer disco que se asigna / dev / sda, y el "nuevo" es el segundo disco que se asigna / dev / sdb).
    2. Use la aplicación separada para reducir las particiones originales / fuente a su tamaño deseado. Recuerde hacer clic en el botón "Aplicar" después de haber programado todas las operaciones. (Esto puede tardar un poco en completarse según el tamaño de la partición y la velocidad del disco).
    3. Use la aplicación gparted para crear una tabla de particiones en el nuevo disco (Dispositivo -> Crear tabla de particiones ..., deje el tipo como MSDOS).
    4. Use la aplicación gparted para crear particiones idénticas en el nuevo disco. (Para ayudar a asegurarme de que fueran iguales, extraje la información detallada de cada partición en el disco original usando la opción de menú Partición-> Información ... y guardé una captura de pantalla para usarla cuando creé la misma partición ( s) en el disco nuevo / destino.) Asegúrese de:
      • Cree cada partición de destino del mismo tamaño que el original (recién ajustado).
      • Establezca cualquier indicador en las particiones para que coincida (es posible que deba hacerse después de crear la partición).
      • Establezca cualquier etiqueta en las particiones para que coincida.
      • (NOTA: el UUID se configurará automáticamente cuando se copien los datos).
    5. Haga clic en el botón "Aplicar" para confirmar todos los cambios.
    6. Anote qué disco es el "original" y cuál es "nuevo", y anote los números de las particiones correspondientes (ej. / Dev / sda1 -> / dev / sdb1, / dev / sda2 -> / dev / sdb2, ...)
    7. Cierre la aplicación separada.
    8. Abra una terminal con privilegios de root (haga clic derecho en el escritorio -> Terminales -> terminal con privilegios de root).
    9. Asumiendo que su disco "original" es / dev / sda y que "nuevo" es / dev / sdb (si no, ajuste el siguiente comando apropiadamente), entonces vamos a copiar cada partición, una a la vez. Para cada partición anotada en el paso anterior, ingrese el siguiente comando en la terminal:

      # dd if=/dev/sda1 of=/dev/sdb1 status=progress bs=128M
      

      y espera a que se complete. Esto copiará la partición 1 del disco original a la partición 1 en el nuevo disco byte por byte.
      Repita el comando para cada partición restante:

      # dd if=/dev/sda2 of=/dev/sdb2 status=progress bs=128M
      # dd if=/dev/sda3 of=/dev/sdb3 status=progress bs=128M
      # ...
      

      Notas:

      • Esto puede tardar un tiempo en completarse dependiendo del tamaño de las particiones, la velocidad del disco en el host, etc.
      • Si su máquina virtual invitada tiene> 1 GB de RAM asignada, puede cambiar el parámetro 'bs' para que sea "bs = 256M", lo que podría acelerar un poco la copia.
    10. En este punto, debe tener un nuevo disco de tamaño fijo con todo el contenido original y un archivo VDI más pequeño que el original. Puede montar el nuevo disco en el entorno en vivo dividido y verificar que los datos estén allí.
    11. Apague la VM invitada (gparted live) y elimine el ISO dividido de la unidad de VM.
  6. Vaya a la Configuración de VBox para la VM invitada, navegue a Almacenamiento y elimine el disco original de la lista (haga clic con el botón derecho y seleccione "Eliminar adjunto"). Esto debería dejar su disco recién creado para la VM. Nota: Este paso es simplemente eliminar el disco de la configuración de la máquina virtual invitada: su disco de máquina virtual invitada original (es decir, el VDI grande) todavía está disponible en la máquina host.
  7. El último paso que tuve que hacer para mi invitado de Windows fue configurar / arreglar el MBR y / o BCD. (No sé si se requiere algo de esto para un invitado Linux ya que aún no lo he hecho). Si simplemente arranqué desde mi nuevo VDI, obtuve una pantalla de error de Windows Boot Mgr con este contenido (desafortunadamente no lo hice t tome una captura de pantalla antes de solucionar el problema):

    windows failed to start
    status 0xc000000e
    information A required device isn't connected or can't be accessed.
    
  8. Obtenga un ISO de una instalación o reparación de Windows (idealmente una que coincida con la versión de su sistema operativo) y configure la máquina virtual invitada para que se inicie desde allí (nuevamente, Configuración de almacenamiento).

  9. Inicie la máquina virtual invitada y elija iniciar desde el CD / DVD.

    1. Como cada versión de la instalación / reparación de Windows es diferente, no puedo dar pasos precisos aquí para todos. Pero la idea es elegir la opción "Reparar" y encontrar el camino a un símbolo del sistema. En mi caso de Windows Server 2012 tuve que: (a) Elegir mi idioma / configuración regional; (b) Elija "Reparar su computadora" en la esquina inferior izquierda; (c) Elija "Solucionar problemas"; (d) Elija "Símbolo del sistema".
    2. Una vez que esté en el símbolo del sistema, ejecute los siguientes comandos (gracias a http://loverofcode.blogspot.com/2013/11/fixed-0xc000000e-boot-error.html por la información):

      > bootrec /fixmbr
      > bootrec /fixboot
      > bootrec /rebuildBcd
      

      Este último comando debe ubicar la instalación de Windows y solicitar agregarlo al BCD. Responda 'Y'.

    3. Salga del símbolo del sistema y luego apague la máquina virtual invitada.
  10. Vaya a la Configuración de VBox para la máquina virtual invitada, navegue a Almacenamiento y elimine el ISO de instalación / reparación de Windows de la unidad de CD / DVD.
  11. ¡Arranca la VM y disfruta!
  12. (Una vez que se confirme que todo funciona como se esperaba, puede eliminar el disco VM original).

0

Proporciono una respuesta extendida a cualquier sistema operativo alojado que se ejecute en cualquier sistema operativo host. Esta respuesta asume que desea aumentar el tamaño (para extender).

Nota: Como lo señaló djule5 (ver el comentario justo después de la pregunta), modifyhdahora se conoce como modifymedium(pero sigue siendo compatible con versiones anteriores). Aquí lo uso modifymedium.

1. Salga de su VM en ejecución

Sí, esta respuesta es para un archivo VDI ya utilizado por una VM VirtualBox.

2. Abra una terminal en su host para cambiar el tamaño de la imagen del disco

La línea de comando VBoxManage no quiere cambiar el tamaño de una imagen de disco usando el nombre de archivo VDI.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage modifymedium my_disk_image.vdi --resizebyte 16260316160                                                                      VBoxManage: error: Cannot register the hard disk '/home/user/vm/my_disk_image.vdi' {181540c7-b791-4b2f-8e01-5feaff04a6eb} because a hard disk '/home/user/vm/my_disk_image.vdi' with UUID {181540c7-b791-4b2f-8e01-5feaff04a6eb} already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 179 of file VBoxManageDisk.cpp

Por lo tanto, identifique el UUID de su imagen de disco.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage list hdds
UUID:           181540c7-b791-4b2f-8e01-5feaff04a6eb
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/user/vm/my_disk_image.vdi
Storage format: VDI
Capacity:       10240 MBytes
Encryption:     disabled

Extienda el tamaño de la imagen del disco.

$ vboxmanage modifymedium 181540c7-b791-4b2f-8e01-5feaff04a6eb --resizebyte 16260316160
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

3. Use una herramienta de particionamiento para extender la partición lógica

Ejecute su VM alojada. Luego use una herramienta de partición .

Algunas herramientas para un GNU / Linux alojado:

Si el sistema alojado usa Windows:

4. Verifique el espacio libre de la partición

Es posible que el tamaño de su archivo VDI (en su sistema host) no haya cambiado porque su VM aún no ha utilizado la cantidad adicional de espacio. Que te diviertas.


-1

Esto funcionaría para mí y debería especificar la cantidad total de la capacidad del disco duro. No es el espacio lo que necesitamos para aumentar ...

C: \ Archivos de programa \ Oracle \ VirtualBox> VBoxManage.exe modifyhd "D: \ Máquina virtual \ VirtualBox VMs \ Windows 7 (FileZilla Server) \ Windows 7 (FileZilla Server) .vdi" --resize 15360

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.