# 調整虛擬硬碟大小方法 最近因為自己犯蠢 把虛擬硬碟的大小設定成比實際分割區還大 導致超過容量寫入失敗 因此需要將虛擬硬碟縮小才能塞進那個分割區 增加硬碟空間還算簡單 但減少真的很困難... 所以就將步驟寫在這邊 希望能幫助到也遇到同樣困擾的人 ### 增加虛擬硬碟容量 不管是用raw或是qcow2 都可以使用qemu-img增加 例如 `$ qemu-img resize vdisk.qcow2 +100G` or `$ qemu-img resize vdisk.raw +100G` 增加後可用qemu-img info觀看 ``` $ qemu-img info vdisk.qcow2 image: vdisk.qcow file format: qcow2 virtual size: 300G (322122547200 bytes) disk size: 88G cluster_size: 65536 ``` 但此時你登進系統看 會發現可用空間沒有增加 這是因為目前的硬碟分割表是原來的size 你可以選擇將新增的空間切成另一個分割區或是將原有分割區拉大 可使用gparted工具來完成 建議可使用Ubuntu Live CD開機後即可使用gparted 可參考這篇 * GParted 磁碟分割工具使用教學 - 頁2,共3 - G. T. Wang https://blog.gtwang.org/linux/gparted-gnome-partition-editor-and-live-cd-usb/2/ 這樣即可完成增加虛擬硬碟容量 ### 減少虛擬硬碟大小 但減少虛擬硬碟大小就不是那麼容易了 我的目標是要把1T的qcow2 image轉成300G的image 首先要先確認使用的空間是否小於300G 如果大於就要先刪除一些檔案 確認使用的空間小於300G後 一樣可以用gparted將分割區變小 於是就會變成像下圖一樣 前半是原來的資料 後半是未分割區 ![](https://i.imgur.com/rkx4JHL.png) 此時我查到教學說可以把qcow2轉成raw image即可減少虛擬硬碟的大小 * 修改kvm虛擬機鏡像文件大小 - IT閱讀 https://www.itread01.com/content/1517224808.html ``` $ qemu-img convert -O raw vdisk.qcow2 vdisk.img ``` 於是我照著做 做完以後發現 此虛擬硬碟無法正常開機 照理說後半部都是未分割區應該沒問題才對 可能是因為分割表資訊不對的原因吧 畢竟系統內原來的分割表是1T的 ![](https://i.imgur.com/rMuT38s.png) 最後我想說用磁區copy的方式總可以了吧,於是就先create一個300G的虛擬硬碟 接著將原來1T虛擬硬碟的磁區1(bios_grub)跟磁區2(ext4)複製到新的300G虛擬硬碟 可用gparted或是clonezilla來copy * How to Clone Partition using GParted Step by Step? https://www.diskpart.com/clone/clone-partition-gparted-7201.html 這篇好酸XD 複製完後開機 則出現grub rescue>的提示 且ls無法辨認分割區 因此我想grub跟分割區資訊應該是跟上圖描述的一樣是綁在一起的 於是我用Ubuntu Live CD開機後 執行以下指令修復grub ``` $ mount /dev/vda2 /mnt $ sudo grub-install --boot-directory=/mnt/boot /dev/vda ``` * Ubuntu Live USB 修復 GRUB https://www.opencli.com/linux/ubuntu-live-usb-repair-grub-bootload 完成後開機 終於順利進入系統 中間嘗試了很多很笨的方法就不講了 但重點就是如果要減少虛擬硬碟的大小 或是要大硬碟換小硬碟 一定要先將分割區縮小 接著重裝grub才能正常開機 (Windows應該就是用修復開機磁區的工具)