前在Virtualbox中安裝了一個Ubuntu 12.04的系統,用來搞開發。安裝的時候對后續用途估算不足,才給它分配了30G的空間。結果,用着用着,發現空間不夠了。目前,30G的空間,就只剩1G了。整天報錯,說空間不足,實在沒辦法了,於是開始倒騰如何給系統擴容。
需要說明的是,我這里的擴容,是基於linux根分區的擴容。因為我當時安裝系統時,將所有硬盤空間直接掛載主分區下,然后建立了一個swap分區,並沒有額外建立其他的分區。所以,現在如果要擴容,就意味着要對系統根分區進行擴容。打給比方,好比是在windows系統下對C盤進行擴容,而不是在E盤后面再增加一個F盤之類的做法。
百度了一下,很多人都發表了帖子來介紹擴容的方法。但是,看來看去,大多數都是不是基於根分區的,而是基於別的分區,就像我上面說的在E盤后面增加一個F盤之類。最后,好不容易找到了一個類似的帖子,提供了一個思路,然后經過我自己一番折騰和摸索,終於把這件事成功搞定,下面就是全過程的詳細記錄!
一、虛擬機物理空間擴容
首先要在Virtualbox中進行設置,給虛擬機再多分配點硬盤空間。比如我的虛擬機,本來分配的是30G,我想要調成80G。於是,要利用Virtualbox自帶的工具VboxManage,該工具位於安裝目錄C:\Program Files\Oracle\VirtualBox下。為了使用方便,建議將該目錄加入到系統的環境變量中,否則每次都要跳轉到該目錄下才能使用,比較麻煩。至於如何加入環境變量,此處就不解釋了,不懂的請自行百度。
請注意,本步驟無需啟動虛擬機。如果已經啟動了的,請關掉退出。
1、獲取虛擬機目標(一種方法,在D:/Program Files/Oracle/VirtualBox下)
C:\Users\leon>VboxManage.exe list hdds UUID: c078b5bd-2340-470a-ab82-9536d123ba36 Parent UUID: base State: created Type: normal (base) Location: E:\V_VtSystem\A_Systems\Ubuntu 12.04_HUD.vdi Storage format: VDI Capacity: 30720 MBytes Encryption: disabled
- 1
- 2
- 3
- 4
- 5
- 6
- 7
8
- 9
2、增加硬盤空間
- 1
- 2
- 3
C:\Users\leon>VBoxManage.exe modifyhd
c078b5bd-2340-470a-ab82-9536d123ba36 --resize 81920
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% done!
3、查看執行結果
C:\Users\leon>VboxManage.exe list hdds UUID: c078b5bd-2340-470a-ab82-9536d123ba36 Parent UUID: base State: created Type: normal (base) Location: E:\V_VtSystem\A_Systems\Ubuntu 12.04_HUD.vdi Storage format: VDI Capacity: 81920 MBytes Encryption:
- 1
- 2
- 3
- 4
- 5
-
6
7
8
-
9
可以看出,Virtualbo給目標虛擬機分配的硬件空間已經提升到了80G。不過,這僅僅是Virtualbox這端分配的值提升了,這個數據還沒傳達到虛擬機里面去,虛擬機里還要另外設置。
進入命令行,以Windows系統為例(令一種方法)
(特別注意空格和中文)
1.啟動CMD命令行,進入VirtualBox的安裝目錄。如
運行:cmd C:/Users/Administrator/>D: D:/> cd "/Program Files/Oracle/VirtualBox"D:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd YOUR_HARD_DISK.vdi --resize SIZE_IN_MBD:/Program Files/Oracle/VirtualBox>其中參數 YOUR_HARD_DISK.vdi 是您要修改的 VirtualBox 虛擬硬盤鏡像文件。而參數 SIZE_IN_MB 是指修改后的硬盤容量,單位是MB。 3. 調整磁盤空間為15G:比如下面這行命令將會把名為"ubuntu.vdi "的 VirtualBox 硬盤容量修改為15*1024MB。C:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd "E:/dds/VirtualBox VMs/linux/linux-bak.vdi" --resize 15360
0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%.
D:/Program Files/VirtualBox>
注意:如果路徑中包含空格或中文,整個路徑要用英文狀態引號"括起來,在WIN7的CMD下可以輸入部分路徑然后按TAB鍵補全,CMD監測到路徑中有空格會自動為路徑名加引號的,如:
D:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd "F:/VirtualBox/my ubuntu.vdi"--resize 15360
D:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd "F:/虛擬機/my ubuntu.vdi"--resize 15360
另,VBOX好像對MS的文件系統,比如NTFS的可能無法更改大小,一網友測試沒成功,相對來說對Linux系的支持更好一些
C:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd "E:/dds/VirtualBox VMs/linux-bak/linux-bak.vdi" --resize 20480
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
C:/Program Files/Oracle/VirtualBox>cd E:/dds/VirtualBox VMs
二、Ubuntu磁盤分區重配
1、安裝磁盤管理工具
啟動虛擬機,進入系統后,安裝並啟動磁盤管理工具gparted。
sudo apt-get install gparted sudo gparted
-
1
-
2
-
3
啟動界面如下圖所示:
圖中可以看出,新增的50G的空間仍處於未分配的狀態,Ubuntu是不能識別的,必須進行相應的處理。
2、刪除原有磁盤空間
處於安全起見,第一步首先要禁用swap交換空間。右擊swap空間的磁盤,選擇禁用交換空間。如下圖所示:
然后刪除該交換空間。如下圖所示:
然后將交換空間所屬的磁盤分區整個刪除。如下圖所示:
此時可以看到,交換空間所屬的磁盤分區,與剛剛新分配的磁盤分區合並到一起了,成為了一個更大的磁盤分區。
3、重新生成磁盤分區
根據linux-gparted管理工具的原則,想要修改某個分區的大小,必須從它臨近的另外一個分區來操作。因此,必須在sda1分區后緊接着生成一個空的分區,最終才能將整個新分區的容量合並到sda1分區中去。所以,我們必須在目前這個未分配的分區中,生成2個分區。第一個分區是新加入的50G的空間,第二個分區是swap分區。
首先生成50G的新分區。在未分配的分區中右擊選擇新建,如下圖所示:
在彈出的對話框中輸入新創建的分區的數據。這里要注意的是,分區的文件系統一定要選擇成與目前sda1分區的文件系統一樣的格式ext4。同時,為了給swap分區預留空間,因此要設置該分區之后的空余空間為2G。如下圖中藍色框部分所示:
創建完這個50G的分區之后,剩下的就是swap分區的空間了。再次重復上述步驟,創建swap分區即可。這里要注意的是,分區的文件系統一定要記得改成linux-swap格式,否則就不是swap分區了。如下圖藍色框部分所示:
4、磁盤分區寫入分區表
分區創建完畢,選擇立即生效即可。如下圖中藍色框部分所示:
分區表信息寫入成功。如下圖所示:
此時可以看到,系統已經生成了3個分區。原來的sda1分區仍然存在,緊接着是新生成的50G的補充分區sda2,最后是swap分區sda3。要注意的是,這3個分區的順序不能錯,也就是說,swap分區必須位於最后,否則將不能執行合並!
至此,gparted工具的所有操作全部完成。可以退出該工具,同時重啟系統。
三、Ubuntu磁盤分區表重寫
1、查看當前磁盤分區情況
leon@Ubuntu:~$ sudo df -h [sudo] password forleon: 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda1 28G 26G 995M 97% / udev 1.5G 12K 1.5G 1% /dev tmpfs 301M 780K 301M 1% /run none 5.0M 05.0M 0% /run/lock none 1.5G 152K 1.5G 1% /run/shm dir_esd 293G 79G 214G 27% /mnt/share/esd dir_hud 293G 79G 214G 27% /mnt/share/hud leon@Ubuntu:~$ sudo fdisk -l /dev/sda Disk /dev/sda: 84.4 GB, 85424509440 bytes 255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors Units = 扇區 of1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes /512 bytes I/O size (minimum/optimal): 512 bytes /512 bytes Disk identifier: 0x000ca15e 設備 啟動 起點 終點 塊數 Id 系統 /dev/sda1 * 2048587202552935910483 Linux /dev/sda2 587202561616348155145728083 Linux /dev/sda3 121634816 125829119 2097152 82 Linux 交換 / Solaris
-
1
-
2
-
4
6
-
7
8
9
10
11
-
12
13
-
14
-
15
-
16
1
19
-
20
21
22
2、關閉swap分區
leon@Ubuntu:~$ free -m total used free shared buffers cached Mem:30098292180027334 -/+ buffers/cache:4682541 Swap:000 leon@Ubuntu:~$ swapoff -a leon@Ubuntu:~$ free -m total used free shared buffers cached Mem:30098292180027334 -/+ buffers/cache:4672541 Swap:000
-
1
-
2
5
-
6
-
7
8
9
-
10
-
11
3、刪除現有磁盤分區信息
leon@Ubuntu:~$ sudo fdisk /dev/sda 命令(輸入 m 獲取幫助): p Disk /dev/sda: 84.4 GB, 84424509440bytes 255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors Units = 扇區 of 1 * 512 = 512bytes Sector size (logical/physical): 512bytes / 512bytes I/O size (minimum/optimal): 512bytes / 512bytes Disk identifier: 0x000ca15e 設備 啟動 起點 終點 塊數 Id 系統 /dev/sda1 * 2048587202552935910483 Linux /dev/sda2 587202561616348155145728083 Linux /dev/sda3 161634816165829119209715282 Linux 交換 / Solaris 命令(輸入 m 獲取幫助): d 分區號 (1-4): 1 命令(輸入 m 獲取幫助): d 分區號 (1-4): 2 命令(輸入 m 獲取幫助): p Disk /dev/sda: 84.4 GB, 84424509440bytes 255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors Units = 扇區 of 1 * 512 = 512bytes Sector size (logical/physical): 512bytes / 512bytes I/O size (minimum/optimal): 512bytes / 512bytes Disk identifier: 0x000ca15e 設備 啟動 起點 終點 塊數 Id 系統 /dev/sda3 161634816165829119209715282 Linux 交換 / Solaris
-
1
-
2
-
32
-
33
可以看出,前2個分區已經消失了。
4、重新建立新的分區信息
命令(輸入 m 獲取幫助): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p 分區號 (1-4,默認為 1): 1 起始 sector (2048-125829119,默認為 2048): 將使用默認值 2048 Last sector, +扇區 or +size{K,M,G} (2048-121634815,默認為 121634815): 將使用默認值 121634815 命令(輸入 m 獲取幫助): p Disk /dev/sda: 84.4 GB, 84424509440 bytes 255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors Units = 扇區 of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000ca15e 設備 啟動 起點 終點 塊數 Id 系統 /dev/sda1 20481616348158081638483 Linux /dev/sda3 161634816165829119209715282 Linux 交換 / Solaris
-
1
-
2
-
14
命令(輸入 m 獲取幫助): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed witherror16: 設備或資源忙. The kernel still uses the old table. The new table will be used at the next reboot orafter you run partprobe(8) or kpartx(8) Syncing disks.
- 1
2
3- 4
5
- 6
- 9
leon@Ubuntu:~$ sudo df -h [sudo] password for leon: 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda1 28G 11G 16G 39% / udev 1.5G 12K 1.5G 1% /dev tmpfs 301M 808K 301M 1% /run none 5.0M 05.0M 0% /run/lock none 1.5G 76K 1.5G 1% /run/shm dir_esd 293G 80G 214G 27% /mnt/share/esd dir_tmp 293G 80G 214G 27% /mnt/share/tmp leon@Ubuntu:~$ sudo resize2fs /dev/sda1 resize2fs 1.42 (29-Nov-2011) Filesystem at /dev/sda1 is mounted on /; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 5 The filesystem on /dev/sda1 is now 20446976 blocks long. leon@Ubuntu:~$ sudo df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda1 77G 11G 64G 14% / udev 1.5G 12K 1.5G 1% /dev tmpfs 301M 808K 301M 1% /run none 5.0M 05.0M 0% /run/lock none 1.5G 124K 1.5G 1% /run/shm dir_esd 293G 80G 214G 27% /mnt/share/esd dir_tmp 293G 80G 214G 27% /mnt/share/tmp leon@Ubuntu:~$ leon@Ubuntu:~$ sudo fdisk -l /dev/sda Disk /dev/sda: 85.9 GB, 85899345920 bytes 255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors Units = 扇區 of1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000ca15e 設備 啟動 起點 終點 塊數 Id 系統 /dev/sda1 20481635778558178790483 Linux /dev/sda3 163577856167772159209715282 Linux 交換 / Solaris
- 1
- 3
- 5
- 7
8
9- 10
- 12
- 15
- 17
- 20
- 22
39
可以看出,Ubuntu的硬盤空間,已經由原來的30G成功升級為80G!本次任務圓滿完成!
搞定,收工!