題 如何在Windows中使用modifyhd命令更改固定大小的VDI?


我正在試圖弄清楚如何更改VDI文件的大小。我是VirtualBox的新手,我有很多需要學習的東西。但我認為我掌握了基礎知識。我已經安裝了Windows 7作為我的第一位客人。主機也是Windows 7.我不確定要分配多少磁盤空間,所以我選擇了40 GB的VDI和固定大小以提高性能。但我現在已經改變了主意,我想再添加10 GB。我一直在點擊程序並閱讀幫助菜單內容,但它沒有幫助。它解釋了磁盤控制器,SAS,SATA,SCSI,yada,yada,但不是我正在尋找的。

我在萬維網上搜索了答案,VirtualBox論壇說你應該使用Gparted,如果你想要最簡單的方法(某些mod發布了粘性)。一些用戶討論使用 dd 命令。但這就是所有Linux的東西。此外,SU還有很多關於增加和減少VDI文件大小的問題,但它們都是關於使用Linux作為主機和Windows作為客戶。

我發現這很好 博客 關於如何做到這一點的帖子 modifyhd VBoxManage的命令。這傢伙也在Linux上作為主機操作系統。他甚至希望他的VDI文件大小與我的相同(50 GB),這是巧合。所以我想我無論如何都要試一試,無論是成功還是打破它。什麼可能出錯?......呃?這是我得到的醜陋驚喜。

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>

a

現在說什麼?!...無法調整VDI格式的虛擬硬盤大小?你不說?不支持你自己的格式?那怎麼樣......

是否真的沒有簡單的方法來改變VDI文件的大小,最好只需在VirtualBox中點擊幾下?有什麼進展嗎?


64
2018-02-13 22:54


起源


我刪除了對VirtualBox質量的咆哮,它沒有添加任何有用的問題。 - sleske
備查, modifyhd 現在被稱為 modifymedium 但仍然向後兼容 - 見 virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi - djule5


答案:


摘要:

  • VBoxManage.exe modifyhd --resize 可以增加(但不減少)磁盤映像的邏輯大小(來賓操作系統看到的大小)。
  • VBoxManage.exe modifyhd inputfile.vdi --compact 可以減少 物理磁盤映像大小(主機操作系統看到的磁盤上映像文件的大小)。但是,這不會更改邏輯磁盤大小。請注意,這僅在首先在來賓操作系統中將空閒空間置零時才有效。
  • modifyhd 僅適用於動態格式變體(“動態分配的圖像”)。
  • modifyhd 僅適用於VDI和VHD圖像格式。
  • 如果使用快照,則必須克隆最新快照 來自“Snapshots”子文件夾的VDI。

有關詳細信息,請參閱 8.23。 VBoxManage modifyhd 在手冊中。


減少VDI的邏輯磁盤大小尚未實現的原因是為了防止可能發生的數據損壞,並且由此會導致無法引導的VM。所以,當 --resize 使用選項時,新磁盤大小必須大於當前大小。不允許小於或等於當前大小。換句話說,40 GB磁盤只能調整為41 GB或更大,它不能調整為40 GB(這只是啞巴)或39 GB或更小。

舊版本的VirtualBox將VDI文件創建為“固定”格式的varient。現在,新的默認設置是在創建新的VDI(虛擬磁盤映像)文件時創建“動態”格式變體。 (我猜這是自動態格式變體引入以來的情況,無論引入哪個版本。)

那麼錯誤消息“此格式的操作尚未實現”意味著您的VDI文件使用“固定”格式變體。要解決此問題,您必須使用以下方法克隆VDI文件 clonehd 命令。要查看VDI文件當前所處的格式變體,您可以使用 showhdinfo 命令。

工作實例

顯示有​​關當前磁盤的VDI信息。

輸入命令: 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>

看看它說“固定默認”的位置?這就是為什麼當你試圖調整它時它會吐出上面的錯誤。

將舊的VDI文件克隆到新的VDI文件。

輸入命令: 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>

瞧!舊文件現已克隆到新文件中。由於VirtualBox的新版本中的默認設置是使用“動態”格式變體,因此您不必明確定義它。雖然,如果您使用的是較舊版本的VirtualBox,那麼您可能希望將選項設置為“動態”(如果可用),以確保與VirtualBox的未來版本具有更好的兼容性和/或靈活性。

顯示有​​關克隆磁盤的VDI信息。

輸入命令: 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>

看看它現在如何說“動態默認”?多好!

(側面注意!這裡說7806 MB物理尺寸的原因是因為我使用了它 --compact 原始VDI文件上的選項,以嘗試強制轉換為動態格式變體。我在VirtualBox論壇上看到的東西,據說可能適用於舊版本,所以我想我也可以嘗試一下。它不起作用。)

調整克隆磁盤的大小。

輸入命令: 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>

成功!沒有格式廢話了。只需記住調整新的克隆磁盤,而不是原始磁盤。請記住,大小以MB表示。我相信你可以使用例如 51200 以及 50G (或可能是“GB”)。還有選項 --resizebyte 可用於表示以字節為單位的大小。

顯示有​​關已調整大小的克隆磁盤的VDI信息。

輸入命令: 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>

而已!從這裡開始,您需要將此克隆的驅動器添加為VM的新VDI。你在VirtualBox中做到了。我不會進入那個。如果到目前為止您已經能夠閱讀並理解這一點,那麼您可能不需要進一步的指導。您可以刪除舊的“已修復”文件,也可以將其保留為備份文件。在刪除原始源文件之前,請確保測試新的VDI文件。

注意! 您不會立即看到克隆磁盤的新大小。您必須使用它啟動VM,然後您必須使用分區管理工具來擴展分區以填充虛擬磁盤(或創建更多分區)。對於Windows,只需運行即可 diskmgmt.msc 你將能夠在那裡擴展分區。

截圖

a b c d e f g

參考


114
2018-02-15 22:56



superuser.com/review/suggested-edits/227029 (我試過了。) - thirtydot
好眼!我已經更正了modifyhd參數。感謝您引起我的注意。 - Samir
一個寫得很好的答案!恕我直言,這應該得到很多選票。 - Johan Karlsson
+1:像你這樣的人和你自由分享的知識,使StackExchange生態系統成為一個極好的資源! - Homunculus Reticulli
使用VirtualBox,您可以做同樣的事情 youtube.com/... - Nizzy


這是一個相當簡單的過程,我可以將VirtualBox(v.4.3.16)固定大小的磁盤調整為Mac(OS X 10.9.4)上的60GB動態磁盤,其中Linux(Ubuntu 14.04)作為來賓操作系統運行:

在Mac上的終端中,CD進入帶有VDI文件的目錄並鍵入以下內容:

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

在VirtualBox應用程序存儲部分中,將mydiskClone.vdi添加為第二個HD,然後正常啟動VM。

在來賓操作系統的shell中,鍵入:

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

重新啟動來賓。當它恢復時,再次轉到shell並輸入:

sudo resize2fs /dev/sdb1

關閉客戶操作系統。

再次在VirtualBox應用程序存儲部分中,將mydiskClone.vdi設置為引導磁盤。然後啟動客戶操作系統並使用文件瀏覽器中“計算機”的屬性驗證新磁盤大小。


9
2017-09-26 15:48



這個答案沒有意義。首先在/ dev / sdb上創建一個大分區,然後調整大小,但是不要先在其上創建文件系統。您是否忘記了複製原始分區的步驟? - sleske


克隆實際上是一種更好的解決方案,並且有一種更簡單的方法。

從文件菜單中,選擇虛擬介質管理器,然後單擊複製。 源將是您原來的固定大小的vdi硬盤,您的目標將是您選擇的新內容(包括新選項)。


5
2017-11-11 19:34



這是sammyg答案的一部分。 - Efren


好的,所以我做到了 沒有克隆

我有一個帶有Ubuntu的100GB VDI文件(固定格式)。工作正常。我希望通過縮小VM來釋放主機中的一些空間。

腳步:

  1. 清理

刪除了不需要的文件。 45GB免費。我只需要30GB即可釋放。

  1. 修復客戶操作系統

我只有一個分區,因此無法從客戶Ubuntu內部做任何事情。在VM中安裝Ubuntu Live並從中啟動。

用過的 gparted 將分區縮小到70GB。 在未使用的空間中創建了一個新分區 ext4

  1. 擦拭自由空間

新分區中的可用空間(30GB)。

按照本指南: 使用zerofree將Ubuntu上的虛擬硬盤收縮為Guest和Host OS

我的新分區是 /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. 壓縮VDI

    VBoxManage modifyhd“ubuntu.vdi”緊湊

花了一段時間,但它奏效了!


4
2017-09-30 17:50



你確定這有效嗎?根據VirtualBox手冊, --compact 僅適用於動態分配的圖像,而不適用於固定大小的圖像。 - sleske
@sleske如果你按照所有步驟操作,它就可以了。但是,如果您開始在文件大小上使用磁盤空間,則文件開始增長。 - ATOzTOA
@ ATOzTOA:如果磁盤映像文件增長,那麼它不是“固定格式”映像,而是“動態分配”映像,這是您在答案中寫的內容。 - sleske
@sleske固定大小的圖像將會增長,直到達到指定的最大大小。 - ATOzTOA
不,那是一個 動態分配圖像。引用手冊:“如果您創建固定大小的映像,將在主機系統上創建一個與虛擬磁盤容量大致相同的映像文件。” virtualbox.org/manual/ch05.html#vdidetails - sleske


有點遲到這裡的聚會,但我會加2美分。首先,我要說這是一個令人費解的過程,會讓大多數臨時用戶瘋狂地試圖找出答案。為什麼Oracle沒有在VBox GUI中包含它是一個謎。

步驟1:使用Windows命令行(VBoxmanage)增加驅動器大小。這裡的提示是使用vdi驅動器的ID而不是無休止地嘗試輸入文件位置並獲取錯誤消息。

步驟2:然後,您需要擴展主分區以使用新空間。下載gparted iso並在VBox中使用它作為IDE源創建一個新的虛擬機。然後使用現有的VDI驅動器作為SATA磁盤。不要為此計算機創建虛擬驅動器。啟動新機器,你將運行gparted Gui。這可能需要幾次重新啟動才能解決問題。

gparted運行後,您將看到要調整大小的vdi驅動器的分區。重要信息:您將不得不刪除擴展分區和交換文件空間,以便能夠增加主分區的大小,因此不要為PP分配所有新空間。執行此操作後,您必須為新的擴展分區指定剩餘空間,並在其中創建新的交換文件空間。我發現這比使用命令行更容易。

不是小菜一碟,但它是可行的...我花了大約半天的時間研究網絡來解決這個問題。在VBox上運行win8.1 / Ubuntu

威利


2
2018-06-01 00:22





以下是我調整大小/擴大/擴展固定VDI圖像的方法(我的縮小它們的過程是另一個答案):

  1. 使用VirtualBox創建所需大小的新磁盤(大小 必須 至少與原件相同)。通過打開來賓VM的VirtualBox設置,導航到存儲,單擊HDD控制器(例如“SATA”),然後單擊“+”添加硬盤來執行此操作。然後根據需要配置新磁盤。
  2. 下載gparted live ISO並將guest虛擬機VM配置為從其啟動(同樣,存儲設置)。
  3. 備份來賓VM的當前存儲。
  4. 引導guest虛擬機VM(應該啟動到gparted live環境)。從gparted環境內部:
    1. 使用gparted應用程序驗證您的現有磁盤是“/ dev / sda”,並且您的新(較大)磁盤是“/ dev / sdb”(右上角下拉列表)。
    2. 關閉gparted應用程序。
    3. 打開具有root權限的終端(右鍵單擊桌面 - >終端 - >具有root權限的終端)。
    4. 鍵入以下命令: dd if=/dev/sda of=/dev/sdb status=progress bs=128M 並等待它完成。這會將原始磁盤逐字節複製到新磁盤,包括MBR等。(注意:這可能需要一段時間才能完成,具體取決於原始磁盤的大小,主機上的磁盤速度等)。 (注意:如果您的來賓VM分配了大於1GB的RAM,您可以將'bs'參數更改為“bs = 256M”,這可能會加快複製速度)。
    5. 重新打開gparted應用程序
    6. 從右上角的下拉列表中選擇新的(較大的)驅動器(應為/ dev / sdb)。
    7. 根據需要展開分區。要展開不在末尾的分區,您可能必須移動要擴展的分區之後的分區。根據分區方案的具體情況,您可能需要在多個步驟中執行此操作,例如將最後一個分區增長到最後,然後通過將所有內容移動到最後來縮小它。在我的情況下,我的最終分區是linux-swap所以我只是刪除它,根據需要擴展我的主分區,然後在最後重新創建交換分區(小心複製其原始分區方案)。
    8. 應用更改。
    9. 此時,您應該擁有一個包含所有原始內容的新固定大小的磁盤,以及比原始內容更多的空間。您可以在gparted live env中安裝新磁盤並進行驗證。
    10. 關閉來賓VM(gparted live)並從VM驅動器中刪除ISO。
  5. 轉到來賓VM的VBox設置,導航到存儲,然後從列表中刪除原始磁盤(右鍵單擊並選擇“刪除附件”)。這應該為VM創建新創建的磁盤。注意:此步驟只是從guest虛擬機VM的配置中刪除磁盤 - 您的原始guest虛擬機VM磁盤(即小磁盤)仍可在主機上使用。
  6. 啟動VM並享受!
  7. (確認所有內容都按預期工作後,您可以刪除原始VM磁盤。)

雖然上面對我來說很有效,但是如果使用LVM,似乎還需要更多的步驟。 (注意:如果使用LVM,您只需添加所需大小的新磁盤,然後將該磁盤添加到卷組。) 對於使用LVM的CentOS 6.6,我不得不增加LVM中的空間。因此,在啟動上面創建的新磁盤後,我在這些行上做了一些事情(這部分的各個部分將根據您的設置名稱而有所不同):

  1. 獲取有關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. 擴展物理卷(PV)(卷組(VG)將自動反映相同的增加):

    # 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. 擴展邏輯卷(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. 擴展文件系統:

    之前:

    # 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
    

    命令:

    # 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.
    

    後:

    # 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
    

2
2017-10-11 12:51



很好的答案!歡迎來到網站! - djsmiley2k


以下是我調整/縮小/縮小固定VDI圖像的方法(擴展它的過程是在同一主題中的另一個答案):

首先是我需要這個的原因的簡短背景(因為有許多方案可以縮小VDI,其中一些可能不適用於這種方法):多年前,我為Windows Server客戶創建了一個固定的VDI,並將其大小設置為600GB。我不記得為什麼我選擇了這個尺寸,但截至今天我只消耗了100GB的客人,我想要收回剩餘的大部分空間。所以在我的情況下,我想保留guest虛擬機中的所有數據,我只想釋放guest虛擬機中未使用的空間。

(以下步驟主要來自我在過去2小時內完成此操作的記憶,如果我在這裡遺漏了一些內容,請致以道歉。)

  1. 確定新尺寸的大小。當然,您可能希望給客人留下超出其目前消耗的額外空間。大小必須至少與源/原始磁盤中的數據相同,四捨五入到最接近的GB。
  2. 使用VirtualBox創建一個新的固定大小的磁盤,其大小在上一步中確定。通過打開來賓VM的VirtualBox設置,導航到存儲,單擊HDD控制器(例如“SATA”),然後單擊“+”添加硬盤來執行此操作。然後根據需要配置新磁盤。
  3. 下載 現場直播ISO 並將guest虛擬機VM配置為從其啟動(同樣,存儲設置)。
  4. 備份來賓VM的當前存儲。
  5. 引導guest虛擬機VM(應該啟動到gparted live環境)。從gparted環境內部:

    1. 使用gparted應用程序確定哪個磁盤是“原始”磁盤,哪個磁盤是“新”磁盤。原件將至少有一個分區,而新分區將完全空白。 (通常“原始”是第一個分配了/ dev / sda的磁盤,“new”磁盤是第二個分配了/ dev / sdb的磁盤。)
    2. 使用gparted應用程序將原始/源分區縮小到所需的大小。 記得 在完成所有操作後單擊“應用”按鈕。 (這可能需要一些時間才能完成,具體取決於您的分區大小和磁盤速度。)
    3. 使用gparted應用程序在新磁盤上創建分區表(設備 - >創建分區表...,將類型保留為MSDOS)。
    4. 使用gparted應用程序在新磁盤上創建相同的分區。 (為了確保它們是相同的,我使用Partition-> Information ...菜單選項提取了原始磁盤上每個分區的詳細信息,並保存了它在我創建相同分區時使用的屏幕截圖( s)在新/目標磁盤上。)請務必:
      • 創建與(新調整的)原始尺寸相同的每個目標分區。
      • 設置分區上的任何標誌以匹配(可能需要在創建分區後完成)。
      • 在分區上設置任何標籤以匹配。
      • (注意:複製數據時,UUID將自動設置。)
    5. 單擊“應用”按鈕以提交所有更改。
    6. 記下哪個磁盤是“原始”,哪個是“新”,並記下相應分區的編號(例如/ dev / sda1 - > / dev / sdb1,/ dev / sda2 - > / dev / sdb2, ...)
    7. 關閉gparted應用程序。
    8. 打開具有root權限的終端(右鍵單擊桌面 - >終端 - >具有root權限的終端)。
    9. 假設你的“原始”磁盤是/ dev / sda而“new”是/ dev / sdb(如果沒有,請適當調整以下命令),然後我們將復制每個分區,一次一個。對於從上面步驟中記下的每個分區,在終端中輸入以下命令:

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

      並等待它完成。這會將分區1從原始磁盤複製到新磁盤上的分區1逐字節。
      對每個剩餘的分區重複該命令:

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

      筆記:

      • 這可能需要一段時間才能完成,具體取決於分區的大小,主機上的磁盤速度等。
      • 如果您的guest虛擬機VM分配了大於1GB的RAM,您可以將'bs'參數更改為“bs = 256M”,這可能會加快複製速度。
    10. 此時,您應該擁有一個新的固定大小的磁盤,其中包含所有原始內容,以及比原始文件更小的VDI文件。您可以將新磁盤裝入gparted live env並驗證數據是否存在。
    11. 關閉來賓VM(gparted live)並從VM驅動器中刪除gparted ISO。
  6. 轉到來賓VM的VBox設置,導航到存儲,然後從列表中刪除原始磁盤(右鍵單擊並選擇“刪除附件”)。這應該為VM創建新創建的磁盤。注意:此步驟只是從來賓VM的配置中刪除磁盤 - 您的原始來賓VM磁盤(即大型VDI)仍可在主機上使用。
  7. 我必須為我的Windows客戶端做的最後一步是設置/修復MBR和/或BCD。 (我不知道Linux guest虛擬機是否需要這樣做,因為我還沒有這樣做。)如果我只是從我的新VDI啟動,我得到了一個帶有這個內容的Windows Boot Mgr錯誤屏幕(不幸的是我沒有'在解決問題之前抓住屏幕截圖):

    windows failed to start
    status 0xc000000e
    information A required device isn't connected or can't be accessed.
    
  8. 獲取Windows安裝或修復的ISO(理想情況下是與您的操作系統版本匹配的)並配置來賓VM從中啟動(再次,存儲設置)。

  9. 啟動來賓VM並選擇從CD / DVD啟動。

    1. 由於每個版本的Windows安裝/修復都不同,我無法在此為每個人提供精確的步驟。但我們的想法是選擇“修復”選項並找到進入命令提示符的方法。在我的Windows Server 2012中,我不得不:(a)選擇我的語言/語言環境; (b)選擇左下角的“修理電腦”; (c)選擇“疑難解答”; (d)選擇“命令提示符”。
    2. 一旦你在命令提示符下運行以下命令(感謝 http://loverofcode.blogspot.com/2013/11/fixed-0xc000000e-boot-error.html 信息!):

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

      最後一個命令應該找到您的Windows安裝並提示將其添加到BCD。回答'Y'。

    3. 退出命令提示符,然後關閉來賓VM。
  10. 轉到來賓VM的VBox設置,導航到存儲,然後從CD / DVD驅動器中刪除Windows安裝/修復ISO。
  11. 啟動VM並享受!
  12. (確認所有內容都按預期工作後,您可以刪除原始VM磁盤。)

1
2018-03-18 23:21





我提供了一個擴展到任何主機操作系統上運行的任何託管操作系統的答案。這個答案假定你想增加大小(擴展)。

注意: 正如所指出的那樣 djule5 (見問題後面的評論), modifyhd 現在被稱為 modifymedium (但仍保持向後兼容)。我在這裡使用 modifymedium

1.退出正在運行的VM

是的,這個答案是針對VirtualBox VM已經使用的VDI文件。

2.打開主機上的終端以調整磁盤映像的大小

命令行VBoxManage不希望使用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

因此,請確定磁盤映像的UUID。

$ 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

擴展磁盤映像大小。

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

3.使用分區工具擴展邏輯分區

運行託管的VM。然後用一個 分區工具

託管GNU / Linux的一些工具:

如果託管系統使用Windows:

4.檢查分區可用空間

VDI文件(在主機系統上)的大小可能沒有更改,因為您的VM尚未使用額外的空間量。玩得開心。


0
2017-11-18 16:26





這對我有用,應該指定硬盤容量的總量。不是我們需要增加的空間......

C:\ Program Files \ Oracle \ VirtualBox> VBoxManage.exe modifyhd“D:\ Virtual Machine \ VirtualBox VMs \ Windows 7(FileZilla Server)\ Windows 7(FileZilla Server).vdi”--resize 15360


-1
2017-08-11 10:26