X Chen笔记---KVM调整虚拟机硬盘大小

 

1.为window的虚拟机扩容

先将磁盘镜像文件.img容量加大,进入windows操作系统使用diskgenius等类型的软件将“未分配空间”并入系统在用磁盘。

 

先将虚拟机关闭

virsh shutdown vm1-clone

 

查看虚拟机磁盘大小

qemu-img info /var/lib/libvirt/images/vm1-clone.img 

 

扩展磁盘

qemu-img resize /var/lib/libvirt/images/vm1-clone.img +5G

 

接下来就可以打开虚拟机使用磁盘操作软件将“未使用“的磁盘并入了

 

2.为linux虚拟机扩容---非逻辑卷的虚拟机

第一种方法是创建一个新的磁盘镜像文件,直接挂载到linux虚拟机上。此法简单不再单独叙述

第二种方法是创建一个全新的空的磁盘镜像,并将旧的磁盘镜像整体迁移到新的上面,此种方法操作简单并且没有风险,推荐使用。

第三种方法也是给原镜像文件直接增加磁盘空间,然后再把新旧磁盘空间融合,不过由于centos没有类似windows的磁盘操作软件,如果操作不当会在磁盘融合那部将整个磁盘给损坏,所以这个方法慎用。(2019-8-27更新:找到叫growpart的工具,可以实现安全扩容

 

方法2:

首先创建一个大的镜像文件,这个镜像文件将要替代你原有的镜像,所以需要多大的空间就创建多大的镜像

#qemu-img create -f raw outdisk.img 15G 

新的镜像outdisk.img一般会被创建在桌面,也可使用find / -name outdisk.img   来查找被创建在了哪个目录

 

使用virt-resize命令将旧镜像的内容迁移到新镜像,其中indisk为input,即旧镜像。outdisk为output,即新的镜像。

#virt-resize --expand /dev/sda2 /var/lib/libvirt/images/indisk.img /root/Desktop/outdisk.img

如果提示没有virt命令,则先需要安装libguestfs-tools工具。

#yum install libguestfs-tools

成功运行后,虚拟系统解除挂载indisk.img,并挂载新的镜像文件outdisk.img,开机测试。测试通过后可将旧的镜像indisk.img删除。

关于libguestfs-tools工具的其他用法可参考:

https://blog.csdn.net/chenxin2tj/article/details/100092212

 

 

方法3:

先直接给原镜像扩容,然后开机进入虚拟机,安装 growpart。

centos6需要安装以下三个包

yum install cloud-init cloud-utils-growpart dracut-modules-growroot  

生新生成 initramfs

dracut -f

dracut 把 growroot 的脚本封装到 initramfs 里面。 把系统启动时, initramfs 利用 growpart 命令把根分区进行扩展。然后启动真正的 kernel, 之后 cloud-init 服务会自动把文件系统进行扩展。(以上步骤未亲测)

 

centos7只需安装以下两个包

#yum install cloud-init cloud-utils-growpart


执行growpart指令对需要扩容的分区进行容量扩展操作

#growpart /dev/sda 2    //参数是要操作的磁盘代号,需要扩容的分区id
#reboot                 //要重启系统才能识别到新的分区大小

PS:本次在CentOS中扩容的/分区是这块磁盘上的最后一个分区,也就是磁盘扩展后增加的空间是加在附加在磁盘的最后的,所以可以通过growpart工具修改硬盘的分区表,将这部分空间直接append到最后一个分区(也就是我这里原本/分区的后面了)所以如果你要扩容的分区在你的系统上,并非是磁盘上的最后一个分区的话,可能无法直接无损扩充分区;谨慎使用此方法扩容,有数据丢失风险

 

3.为linux虚拟机扩容---逻辑卷的虚拟机

查看卷组相关信息,通过这个命令可以查看本机有几个逻辑卷组,及卷组名分别是什么,接下来分配空间的时候需要用到卷组名。

# vgscan

Reading all physical volumes.  This may take a while...
Found volume group "Xvdbgroup" using metadata type lvm2
Found volume group "centos" using metadata type lvm2
首先使用命令fdisk -l查看本机有几块物理硬盘,并找出哪块硬盘为新增的未分配空间,本次假设为sda

1. 创建pv

   #pvcreate /dev/sda     
   //新增硬盘 即:pvcreate /dev/sda
  
2. 把创建的新pv加入vg

   #vgextend 卷组名 /dev/sda     
   //即:vgextend centos /dev/sda              

3. 扩容逻辑卷并制作xfs文件系统
                
   #lvextend -r -l +100%FREE /dev/卷组名/逻辑卷名    
   //即:lvextend -r -l +100%FREE /dev/centos/centos-home
                

如果所需调整硬盘比较大,可能第三步等待时间会比较长。以上步骤之后重启系统,使用df -h 就可以看到硬盘空间已经成功扩展

 

逻辑卷的不同文件系统有不同的扩容方式,以下为详解+实例

当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间。如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区),那么就可以轻松进行扩容或缩容!不同文件系统类型所对应的创建、检查、调整命令不同,下面就针对xfs和ext2/3/4文件系统的lvm分区空间的扩容和缩容的操作做一记录:
########################################################
特别注意的是:
resize2fs 命令            针对的是ext2、ext3、ext4文件系统
xfs_growfs 命令         针对的是xfs文件系统
########################################################

1)ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)

1

2

3

4

5

6

lvextend -L 120G /dev/mapper/centos-home     #增大至120G

lvextend -L +20G /dev/mapper/centos-home     #增加20G

lvreduce -L 50G /dev/mapper/centos-home      #减小至50G

lvreduce -L -8G /dev/mapper/centos-home      #减小8G

lvreduce -r -l +100%free /dev/mapper/centos-home #增加所有空闲空间

resize2fs /dev/mapper/centos-home            #执行调整

2)xfs文件系统的调整命令是xfs_growfs(只支持增大)

1

2

3

4

5

6

lvextend -L 120G /dev/mapper/centos-home     #增大至120G

lvextend -L +20G /dev/mapper/centos-home     #增加20G

xfs_growfs /dev/mapper/centos-home           #执行调整

就是说:xfs文件系统只支持增大分区空间的情况,不支持减小的情况(切记!!)。

硬要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了。如果有重要文件,那就歇菜喽~~~

实例1(当系统上还有空闲空间的时候)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

1)查看分区空间。如下可知是xfs文件系统(df的-T参数就能看出文件格式)。

[root@localhost ~]# df -hT

文件系统                类型      容量  已用  可用 已用% 挂载点

/dev/mapper/centos-root xfs       200G  2.2G  198G    2% /

devtmpfs                devtmpfs   32G     0   32G    0% /dev

tmpfs                   tmpfs      32G     0   32G    0% /dev/shm

tmpfs                   tmpfs      32G   49M   32G    1% /run

tmpfs                   tmpfs      32G     0   32G    0% /sys/fs/cgroup

/dev/sda1               xfs       197M  139M   59M   71% /boot

tmpfs                   tmpfs     6.3G     0  6.3G    0% /run/user/0

/dev/mapper/centos-home xfs       628G   33M  718G    1% /home

 

2)使用vgdisplay命令查看系统上的空闲空间

root@localhost ~]# vgdisplay

  --- Volume group ---

  VG Name               centos

  System ID            

  Format                lvm2

  Metadata Areas        1

  Metadata Sequence No  6

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                3

  Open LV               3

  Max PV                0

  Cur PV                1

  Act PV                1

  VG Size               930.80 GiB

  PE Size               4.00 MiB

  Total PE              238285

  Alloc PE / Size       212736 / 831.00 GiB

  Free  PE / Size       25549 / 99.80 GiB       //这一项表示目前该系统上还存在99.80G的空闲空间(25549)

  VG UUID               a5hiAh-LB8M-9lRv-Ps1a-z35L-J4fk-sP3KrF

 

3) 将上面查到的空闲空间中的90G增减到/home分区上

[root@localhost ~]# lvextend -L +90G /dev/mapper/centos-home       //或者使用-l参数(跟PE数量),即lvextend -l +25500 /dev/mapper/centos-home

  Size of logical volume centos/home changed from 628.00 GiB (160768 extents) to 718.00 GiB (183808 extents).

  Logical volume centos/home successfully resized.

 

[root@localhost ~]# xfs_growfs /dev/mapper/centos-home

meta-data=/dev/mapper/centos-home isize=512    agcount=4, agsize=41156608 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=0 spinodes=0

data     =                       bsize=4096   blocks=164626432, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0 ftype=1

log      =internal               bsize=4096   blocks=80384, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

data blocks changed from 164626432 to 188219392

 

4)再次看着系统分区,发现home分区已经增加了90G(这种方式增加后,home分区之前的数据还不会丢失)

[root@localhost ~]# df -h

文件系统                 容量  已用  可用 已用% 挂载点

/dev/mapper/centos-root  200G  2.2G  198G    2% /

devtmpfs                  32G     0   32G    0% /dev

tmpfs                     32G     0   32G    0% /dev/shm

tmpfs                     32G   49M   32G    1% /run

tmpfs                     32G     0   32G    0% /sys/fs/cgroup

/dev/sda1                197M  139M   59M   71% /boot

tmpfs                    6.3G     0  6.3G    0% /run/user/0

/dev/mapper/centos-home  718G   33M  718G    1% /home

虽然xfs文件系统只支持增加,不支持减少。但并不是说在xfs系统文件下不能减小,只是减小后,需要重新格式化才能挂载上。这样原来的数据就丢失了!
实例2: 这种情况只适用于系统刚安装好,逻辑分区内没有什么数据或数据不多且不重要可以删除或拷贝的情况下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

系统安装好后,发现home分区过大,想从home分区中拿出100G给/分区

[root@localhost ~]# df -hT

文件系统                类型      容量  已用  可用 已用% 挂载点

/dev/mapper/centos-root xfs       205G  2.2G  203G    2% /

devtmpfs                devtmpfs   32G     0   32G    0% /dev

tmpfs                   tmpfs      32G     0   32G    0% /dev/shm

tmpfs                   tmpfs      32G   49M   32G    1% /run

tmpfs                   tmpfs      32G     0   32G    0% /sys/fs/cgroup

/dev/sda1               xfs       197M  139M   59M   71% /boot

tmpfs                   tmpfs     6.3G     0  6.3G    0% /run/user/0

/dev/mapper/centos-home xfs       718G   33M  718G    1% /home

  

[root@localhost ~]# umount /home/

  

[root@localhost ~]# lvreduce -L -100G /dev/mapper/centos-home

  WARNING: Reducing active logical volume to 618.00 GiB.

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce centos/home? [y/n]: y

  Size of logical volume centos/home changed from 718.00 GiB (183808 extents) to 618.00 GiB (158208 extents).

  Logical volume centos/home successfully resized.

  

如下,很显然xfs文件系统不能执行分区减小的调整!

[root@localhost ~]# xfs_growfs /dev/mapper/centos-home

xfs_growfs: /dev/mapper/centos-home is not a mounted XFS filesystem

[root@localhost ~]# mount /dev/mapper/centos-home /home/

mount/dev/mapper/centos-home:不能读超级块

  

这样,只能通过重新格式化这个分区,格式化后才能再次挂载到home下

[root@localhost ~]# mkfs.xfs /dev/mapper/centos-home -f

meta-data=/dev/mapper/centos-home isize=512    agcount=4, agsize=41156608 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=0, sparse=0

data     =                       bsize=4096   blocks=164626432, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0 ftype=1

log      =internal log           bsize=4096   blocks=80384, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

  

[root@localhost ~]# mount /dev/mapper/centos-home /home/

  

再次查看分区,发现home分区已经减小了100G,只不过这个分区里之前的数据都没有了。

[root@localhost ~]# df -hT        

文件系统                 类型      容量  已用  可用 已用% 挂载点

/dev/mapper/centos-root xfs       205G  2.2G  203G    2% /

devtmpfs                devtmpfs   32G     0   32G    0% /dev

tmpfs                   tmpfs      32G     0   32G    0% /dev/shm

tmpfs                   tmpfs      32G   49M   32G    1% /run

tmpfs                   tmpfs      32G     0   32G    0% /sys/fs/cgroup

/dev/sda1               xfs       197M  139M   59M   71% /boot

tmpfs                   tmpfs     6.3G     0  6.3G    0% /run/user/0

/dev/mapper/centos-home xfs       618G   73M  578G    1% /home

  

---------------------------------------------------------------------------

上面在重新格式的时候,也可以将这个格式化为ext4格式。

[root@localhost ~]# mkfs.ext4 /dev/mapper/centos-home

[root@localhost ~]# cat /etc/fstab  //将home分区的开机挂载设置里的xfs改为ext4

---------------------------------------------------------------------------

  

然后将上面从home分区拿出的100G放到/分区下

[root@localhost ~]# vgdisplay

  --- Volume group ---

  VG Name               centos

  System ID           

  Format                lvm2

  Metadata Areas        1

  Metadata Sequence No  9

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                3

  Open LV               3

  Max PV                0

  Cur PV                1

  Act PV                1

  VG Size               930.80 GiB

  PE Size               4.00 MiB

  Total PE              238285

  Alloc PE / Size       211456 / 826.00 GiB

  Free  PE / Size       26829 / 104.80 GiB

  VG UUID               a5hiAh-LB8M-9lRv-Ps1a-z35L-J4fk-sP3KrF

     

[root@localhost ~]# lvextend -L +100G /dev/mapper/centos-root

  Size of logical volume centos/root changed from 205.00 GiB (52480 extents) to 305.00 GiB (78080 extents).

  Logical volume centos/root successfully resized.

  

[root@localhost ~]# xfs_growfs /dev/mapper/centos-root

meta-data=/dev/mapper/centos-root isize=256    agcount=5, agsize=13107200 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=0        finobt=0 spinodes=0

data     =                       bsize=4096   blocks=53739520, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0 ftype=0

log      =internal               bsize=4096   blocks=25600, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

data blocks changed from 53739520 to 79953920

  

[root@localhost ~]# df -hT        

文件系统                 类型        容量  已用  可用 已用% 挂载点

/dev/mapper/centos-root xfs       305G  2.2G  203G    2% /

devtmpfs                devtmpfs   32G     0   32G    0% /dev

tmpfs                   tmpfs      32G     0   32G    0% /dev/shm

tmpfs                   tmpfs      32G   49M   32G    1% /run

tmpfs                   tmpfs      32G     0   32G    0% /sys/fs/cgroup

/dev/sda1               xfs       197M  139M   59M   71% /boot

tmpfs                   tmpfs     6.3G     0  6.3G    0% /run/user/0

/dev/mapper/centos-home xfs       618G   73M  578G    1% /hom

#################### 温馨提示 #######################
若是减小分区空间,减小前必须要先卸载这个分区。如果卸载有问题,解决如下:

[root@localhost ~]# umount /home/
umount: /home: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))

提示无法卸载,则是有进程占用/home,使用如下命令来终止占用进程:
[root@localhost ~]# fuser -m -k /home
/home: 1409 1519ce 1531e 1532e 1533e 1534e 1535e 1536e 1537e 1538e 1539e 1541e 1543e 1544e 1545e 1546e 1547e 1548e 1549e 1550e 1601m

再次卸载home分区就成功了。
[root@localhost ~]# umount /home/

-k 表示自动把霸占home分区的进程kill掉!
如果你不是很明确是否要杀死所有霸占设备的程序,还可以加一个-i 参数,这样每杀死一个程序前,都会询问!(即fuser -m -v -i -k /home)

 

 

 

综合参考

http://blog.csdn.net/hnhuangyiyang/article/details/50904078

http://blog.csdn.net/wenwenxiong/article/details/48056105

http://blog.sina.com.cn/s/blog_43b678810102vy9c.html

 

2019-8-27新增部分参考

https://xiexianbin.cn/openstack/glance/2016-12-14-centos-root-partition-auto-grow/

https://www.moonfly.net/archives/49.html

卷组部分参考

https://blog.51cto.com/junongs/2330676?source=dra

https://blog.51cto.com/linsj/2134664

详解+实例部分

https://www.cnblogs.com/kevingrace/p/5825963.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值