菜鸟玩云计算之十二:KVM虚拟机更改大小

时间:2022-12-21 08:08:47

菜鸟玩云计算之十二:KVM虚拟机更改大小

参考:

http://www.missionfamilybank.org/expanding-resizing-your-qcow2-virtual-machine-image-with-lvm-and-ext4/

http://libguestfs.org/virt-resize.1.html

早晚我们会遇到虚拟机的大小不够用的情况。此时可以用virt-resize命令重新分配虚拟机大小。假设我们的虚拟机vm-gitlab6需要扩充到40G。那么首先关闭虚拟机,然后备份虚拟机文件。

以下操作都在下面的虚机目录下进行:

/var/lib/libvirt/images/vm-gitlab6/ubuntu-kvm/

安装必备

$ sudo apt-get install libguestfs-tools

备份文件

$ sudo virsh shutdown vm-gitlab6

$ sudo cp /var/lib/libvirt/images/vm-gitlab6/ubuntu-kvm/vm-gitlab6-img1.qcow2 /var/lib/libvirt/images/vm-gitlab6/ubuntu-kvm/vm-gitlab6-img1-back.qcow2

查看虚机分区大小

$ sudo virt-df -h vm-gitlab6-img1.qcow2

W: kvm binary is deprecated, please use qemu-system-x86_64 instead
Filesystem                                Size       Used  Available  Use%
vm-gitlab6-img1.qcow2:/dev/sda1            18G       1.1G        16G    6%

创建新的镜像文件

vm-gitlab6-img1-big.qcow2,给40G大小(瞬间结束,让人以为错误)

$ sudo qemu-img create -f qcow2 vm-gitlab6-img1-big.qcow2 40G

下面就是关键的虚拟机扩容

$ sudo virt-resize --expand /dev/sda1 vm-gitlab6-img1.qcow2 vm-gitlab6-img1-big.qcow2 

Examining vm-gitlab6-img1.qcow2 ...
W: kvm binary is deprecated, please use qemu-system-x86_64 instead
**********

Summary of changes:

/dev/sda1: This partition will be resized from 18.6G to 32.5G.  The
    filesystem ext4 on /dev/sda1 will be expanded using the 'resize2fs'
    method.

/dev/sda2: This partition will be left alone.

**********
Setting up initial partition table on vm-gitlab6-img1-1.qcow2 ...
Copying /dev/sda1 ...
 100% ⟦▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓⟧ 00:00
Copying /dev/sda2 ...
 100% ⟦▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓⟧ 00:00
W: kvm binary is deprecated, please use qemu-system-x86_64 instead
Expanding /dev/sda1 using the 'resize2fs' method ...

Resize operation completed with no errors.  Before deleting the old
disk, carefully check that the resized disk boots and works correctly.

再看看新文件大小

$ sudo virt-df -h vm-gitlab6-img1-big.qcow2

W: kvm binary is deprecated, please use qemu-system-x86_64 instead
Filesystem                                Size       Used  Available  Use%
vm-gitlab6-img1-big.qcow2:/dev/sda1          32G       1.1G        29G    4%

最后把vm-gitlab6-img1-big.qcow2改为vm-gitlab6-img1.qcow2即可。

$ sudo rm vm-gitlab6-img1.qcow2

$ sudo mv vm-gitlab6-img1-big.qcow2 vm-gitlab6-img1.qcow2

$ sudo chmod 755 vm-gitlab6-img1.qcow2

启动虚拟机

$ sudo virsh start vm-gitlab6

如果一切正常,原来那个vm-gitlab6-img1-back.qcow2就可以删除了。

shrink虚拟机

如果新虚拟机文件过大,如下:

$ ls -lh vm-gitlab6-img1-big.qcow2

-rw-r--r-- 1 root root  27G 10月  7 16:55 vm-gitlab6-img1-big.qcow2

用下面的命令转存一下,就可以缩小虚拟机文件大小(不是分区大小)。-O qcow2 是OKay的O.

$ sudo qemu-img convert -O qcow2 vm-gitlab6-img1-big.qcow2 vm-gitlab6-img1-shrink.qcow2
$ ls -lh vm-gitlab6-img1-shrink.qcow2

-rw-r--r-- 1 root root 1.7G 10月  7 17:06 vm-gitlab6-img1-shrink.qcow2

查看分区

$ virt-df -h vm-gitlab6-img1-shrink.qcow2

W: kvm binary is deprecated, please use qemu-system-x86_64 instead
Filesystem                                Size       Used  Available  Use%
vm-gitlab6-img1-shrink.qcow2:/dev/sda1                32G       1.1G        29G    4%

最后用vm-gitlab6-img1-shrink.qcow2替换vm-gitlab6-img1.qcow2即可。
==============================================================

下面内容将破坏虚拟机的内容,因此不能使用:

改变镜像文件大小(不是分区大小,是我们ls -lh显示的大小)

查看一下发现vm-gitlab6-img1.qcow2的大小变为27G,肯定是上面这个过程搞的。我希望它看起来小点。

因为qcow2格式不支持qemu-img resize,首先把它转为raw格式。

$ sudo qemu-img convert -f qcow2 vm-gitlab6-img1.qcow2 -O raw img1.raw

然后缩小raw镜像:

$ sudo qemu-img resize img1.raw -- -20G

最后转回去qcow2:

$ sudo qemu-img convert -f raw img1.raw -O qcow2 img1p.qcow2

完美解决!

cheungmine@gmail.com

菜鸟玩云计算之十二:KVM虚拟机更改大小的更多相关文章

  1. 菜鸟玩云计算之十六:Ubuntu14.04上创建的虚拟机迁移到RHEL6.4

    菜鸟玩云计算之十六:Ubuntu14.04上创建的RHEL6.4虚拟机迁移到RHEL6.4主机上 RHEL6.4 Server作为虚拟机的HOST,执行以下的命令检查配置和安装相关软件: # egre ...

  2. 菜鸟玩云计算之十四:克隆虚拟机及ssh登录的问题

    菜鸟玩云计算之十四:克隆虚拟机及ssh登录的问题 今天早上,我的Ubuntu12.04.3LTS Desktop提示升级,升级. 从vm-ubuntu12.04克隆出虚拟机vm-thrift: $ s ...

  3. 菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机

    菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机 chedou@hgdb.net 虚拟机给工作带来巨大的便利,不仅仅体现在资源的按需使用,而且配置的迁移特别方便.本文将使用Ubuntu ...

  4. 菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章

    菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章 cheungmine, 2014-10-25 0 引言 在生产环境上安装Hadoop高可用集群一直是一个需要极度耐心和体力的细致工作 ...

  5. 菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章

    菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章 cheungmine, 2014-10-26 在上一章中,我们准备好了计算机和软件.本章开始部署hadoop 高可用集群. 2 部署 ...

  6. 菜鸟玩云计算之二十:saltstack入门初步

    菜鸟玩云计算之二十 SaltStack 入门初步 0. saltstack 是什么 参考下面的文章: http://docs.saltstack.com/en/latest/topics/tutori ...

  7. 菜鸟玩云计算之十七:RHEL克隆虚拟机后改变网卡地址

    菜鸟玩云计算之十七:RHEL克隆虚拟机后改变网卡地址 (一)更改hostname # vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=your-vm ...

  8. 菜鸟玩云计算之廿二: saltstack 配置

    菜鸟玩云计算之廿二: saltstack 配置 要求环境: RHEL6.4+ >=Python2.6.6, < Python 3.0 关闭salt-master/minion服务:   # ...

  9. 菜鸟玩云计算之廿一&colon; saltstack之pillar

    菜鸟玩云计算之廿一: saltstack之pillar 参考: 点击打开链接 查看pillar数据: # salt '*' pillar.items pillar的默认根目录在:/srv/pillar ...

随机推荐

  1. Android 图片上传

    上传方式:两种   1:Base64() (1):获取图片路径,将图片转为String 类型 (2):通过post提交的方式.以键值对的方式上传到服务器,和一般的提交关键字没有任何区别. (3):这种 ...

  2. PHP:PHP页面编码问题(转载)

    MySQL数据库编码.html页面编码.PHP或html文件本身编码要全部一致. 1.MySQL数据库编码:建立数据库时指定编码(如gbk_chinese_ci),建立数据表.建立字段.插入数据时不要 ...

  3. 类似百度文库pdf2swf&plus;flexpaper解决pdf在线阅读的效果

    1:工具准备swftools.exe 下载http://www.swftools.org/download.html 安装至D盘SWFTools提供了一系列将各种文件转成swf的工具:font2swf ...

  4. python 错误处理

    在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...

  5. &lpar;转&rpar;pem&comma; cer&comma; p12 and the pains of iOS Push Notifications encryption

    转自:http://cloudfields.net/blog/ios-push-notifications-encryption/ The serious pains of setting up a ...

  6. Cesium 获取当前视图范围

    Cesium作为一个开源的WebGlobe解决方案已经很牛了,不过因为开发的资料不多,很多功能不知道怎么实现.下面记录下自己获取Cesium当前场景范围的方法(2维中对应的是extent). exte ...

  7. linux基本介绍

    Linux介绍 操作系统: 主要作用是管理好硬件设备,并为用户和应用程序提供简单的接口,以便于使用.作为中间人链接软件和硬件. 不同领域的操作系统: 1.桌面操作系统 Windows(用户群大).ma ...

  8. ESP8266使用笔记之常用固件

    开发板使用的是NodeMCU开发板: 目录 1.学习使用ESP8266官方的SDK         1.1使用SDK提供的AT固件         1.2使用SDK Build固件 2.学习使用Nod ...

  9. python之魔法方法介绍

    1.1. 简介 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加“魔法”的特殊方法. 它们经常是两个下划线包围来命名的(比如 __init__ , __lt__ ) ...

  10. JS判断浏览器种类

    function myBrowser() {                        var userAgent = navigator.userAgent; //取得浏览器的userAgent ...