KVM 虛機鏡像擴容和壓縮的操作
KVM鏡像操作
qemu-img命令
創(chuàng)建鏡像 qemu-img create
# 創(chuàng)建一個設備空間大小為10G的鏡像 qemu-img create -f qcow2 centos7-guest.qcow2 10G # 基于backing_file創(chuàng)建大小為20G的鏡像, 使用-b參數(shù), -F用于指定backing_file的格式 qemu-img create -F qcow2 -b /path/to/backing-kvm.img -f qcow2 /path/to/target.qcow2 20G # 基于backing_file創(chuàng)建大小為20G的鏡像, 使用-o參數(shù), 都在-o參數(shù)內(nèi)指定 qemu-img create -f qcow2 -o backing_file=/path/to/rhel6u3.img,backing_fmt=qcow2,size=20G /path/to/target.qcow2
關于backing_file的說明
If the option backing_file is specified, then the image will record only the differences from backing_file. No size needs to be specified in this case. backing_file will never be modified unless you use the "commit" monitor command (or qemu-img commit).
查看鏡像信息 qemu-img info
qemu-img info rhel6u3.img
轉換鏡像格式 qemu-img convert
使用-f指定源文件格式, 用-O指定目標文件格式
qemu-img convert -f raw -O qcow2 centos.img centos.qcow2 qemu-img convert -f qcow2 -O raw centos.qcow2 centos.raw
縮小鏡像實際占用的磁盤大小
在虛機中進行文件相關的操作(復制, 解壓)后, 即使刪除了文件, 虛機依然占用文件空間, 如果要減小空間占用, 可以通過如下的方式
Linux虛機端
Linux虛機端, trim a device and free all unused storage on the underlying device
fstrim -av
將未使用的空間用0填充, 因為刪除的文件依然存在, 如果不寫零, 無法回收這些空間. 這一步會將虛機預設的空間全部填充, 取決于磁盤性能, 可能會很慢
dd if=/dev/zero of=/mytempfile # 刪除產(chǎn)生的文件 rm -f /mytempfile
Windows虛機端
對于Win7/2008R2 及以上版本會自動裁剪(trim), 可以通過下面命令查看是否開啟
fsutil behavior query DisableDeleteNotify
上面應當會輸出0, 否則使用下面的命令設置
fsutil behavior set DisableDeleteNotify 0
然后執(zhí)行下面的命令
- 整理碎片, 用windows自帶的或者第三方工具例如 Defraggler or UltraDefrag.
- 使用SDelete(推薦)或者Eraser, 將空閑空間填充0
使用SDelete
- 下載 SDelete 保存到 C:\windows\system32\
- 運行下面的命令填零
sdelete -z
- 如果有多個分區(qū), 例如 E:, 使用
sdelete -z e:
壓縮虛機鏡像
在宿主機進行操作
qemu-img convert -O qcow2 vm_pbc.qcow2 vm_pbc_shrink.qcow2
帶壓縮參數(shù), 會比較慢
qemu-img convert -O qcow2 -c vm_pbc.qcow2 vm_pbc_shrink.qcow2
virt-filesystems命令
查看鏡像的磁盤大小
virt-filesystems --long --parts --blkdevs -h -a c7guest1.qcow2c Name Type MBR Size Parent /dev/sda1 partition 83 8.0G /dev/sda /dev/sda device - 8.0G -
virt-resize命令
將舊鏡像中的文件系統(tǒng)擴充到新鏡像中, 用于調(diào)整虛機磁盤大小
# 創(chuàng)建一個50G容量的qcow2空白鏡像 qemu-img create -f qcow2 /data/images/win2012-50gb.qcow2 50G # 將鏡像擴充到新鏡像中去, 通過--expand指定需要擴張的分區(qū) virt-resize --expand /dev/sda2 /data/images/win2012.qcow2 /data/images/win2012-50gb.qcow2
此時只是將在虛機磁盤上增加了可用空間, 但是未體現(xiàn)到文件系統(tǒng), 啟動虛機后, 在虛機中擴充分區(qū)大小
# 查看分區(qū) df -h # 查看分區(qū)對應的磁盤大小, 能看出來/dev/vda1已經(jīng)增長, 但是未體現(xiàn)到df -h的輸出中 fdisk -l # 如果/dev/vda1格式是xfs xfs_growfs /dev/vda1 # 如果/dev/vda1格式是ext2,3,4 resize2fs /dev/vda1
對鏡像進行擴容操作
下面的例子演示了如何將vm_n01.qcow2這個鏡像擴容到40G
# 先檢查鏡像的分區(qū)結構, 以便后面對指定的分區(qū)進行擴容 virt-filesystems --long --parts --blkdevs -h -a vm_n01.qcow2 # 更名 mv vm_n01.qcow2 vm_n01.qcow2.bak # 用原名創(chuàng)建一個40G的空白鏡像 qemu-img create -f qcow2 vm_n01.qcow2 40G # 將舊鏡像導入到空白鏡像 virt-resize --expand /dev/sda1 vm_n01.qcow2.bak vm_n01.qcow2 # 檢查導入后的新鏡像 virt-filesystems --long --parts --blkdevs -h -a vm_n01.qcow2 # 刪除舊鏡像 rm vm_n01.qcow2.bak
用新鏡像導入創(chuàng)建虛機后
# 查看分區(qū) df -h # 查看分區(qū)對應的磁盤大小, 能看出來/dev/vda1已經(jīng)增長, 但是未體現(xiàn)到df -h的輸出中 fdisk -l # 如果/dev/vda1格式是xfs xfs_growfs /dev/vda1 # 如果/dev/vda1格式是ext2,3,4 resize2fs /dev/vda1
遇到e2fsck版本太低的問題centos7自帶的e2fsck版本過低, 運行resize報錯
virt-resize: error: libguestfs error: resize2fs: e2fsck 1.42.9 (28-Dec-2013) /dev/sda1 has unsupported feature(s): metadata_csum e2fsck: Get a newer version of e2fsck!
解決: 編譯最新版本
# 需要預先安裝 wget gcc-c++ sudo wget https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.46.4/e2fsprogs-1.46.4.tar.gz sudo tar xvf e2fsprogs-1.46.4.tar.gz sudo cd e2fsprogs-1.46.4 sudo ./configure sudo make sudo make install sudo yum -y install libguestfs-xfs
使用RAW格式對鏡像擴容
Ubuntu20.04 Focal Cloudimage擴容, 參考 https://www.cnblogs.com/milton/p/15382673.html
# resize原始鏡像 qemu-img resize focal-server-cloudimg-amd64-50g.qcow2 50G # 轉換為raw格式鏡像 qemu-img convert -f qcow2 -O raw focal-server-cloudimg-amd64-50g.qcow2 focal-server-cloudimg-amd64.raw # 重命名以防混淆 mv focal-server-cloudimg-amd64.raw focal-server-cloudimg-amd64-50g.raw # 運行parted parted focal-server-cloudimg-amd64-50g.raw ######################## 開始 GNU Parted 3.1 Using /data/backup/vm_images/focal-server-cloudimg-amd64-50g.raw Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) p Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel? Fix Warning: Not all of the space available to /data/backup/vm_images/focal-server-cloudimg-amd64-50g.raw appears to be used, you can fix the GPT to use all of the space (an extra 100245504 blocks) or continue with the current setting? Fix/Ignore? Fix Model: (file) Disk /data/backup/vm_images/focal-server-cloudimg-amd64-50g.raw: 53.7GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 14 1049kB 5243kB 4194kB bios_grub 15 5243kB 116MB 111MB fat32 boot 1 116MB 2361MB 2245MB ext4 (parted) resizepart Partition number? 1 End? [2361MB]? 53.7G 1 116MB 53.7GB 53.6GB ext4 (parted) q ########################### 結束 # 查看raw格式的分區(qū)大小是否正確 virt-filesystems --long --parts --blkdevs -h -a focal-server-cloudimg-amd64-50g.raw Name Type MBR Size Parent /dev/sda1 partition - 50G /dev/sda /dev/sda14 partition - 4.0M /dev/sda /dev/sda15 partition - 106M /dev/sda /dev/sda device - 50G - # 轉回qcow2格式 qemu-img convert -f raw -O qcow2 focal-server-cloudimg-amd64-50g.raw focal-server-cloudimg-amd64-50g-resized.qcow2 # 再次檢查 virt-filesystems --long --parts --blkdevs -h -a focal-server-cloudimg-amd64-50g-resized.qcow2
參考
- Shrink Qcow2 Disk Files https://pve.proxmox.com/wiki/Shrink_Qcow2_Disk_Files
到此這篇關于KVM 虛機鏡像操作, 擴容和壓縮的文章就介紹到這了,更多相關KVM 虛機鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
kvm虛擬化學習筆記(一)之kvm虛擬化環(huán)境安裝的步驟
這篇文章主要介紹了kvm虛擬化學習筆記(一)之kvm虛擬化環(huán)境安裝的步驟,非常具有實用價值,需要的朋友可以參考下。2016-12-12詳解kvm部署三個虛擬機實現(xiàn) WordPress 實驗
這篇文章主要介紹了詳解kvm部署三個虛擬機實現(xiàn) WordPress 實驗,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11