找回密码
 注册
查看: 964|回复: 1

virsh blockresize 命令,扩容kvm虚机磁盘大小

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-4-11 17:19:46 | 显示全部楼层 |阅读模式
[root@compute03 images]# virsh blockresize rhel-server-7.9 /var/lib/libvirt/images/rhel-server-7.9.qcow2 20G
, A  _' U% n: l/ f# r0 a( |Block device '/var/lib/libvirt/images/rhel-server-7.9.qcow2' is resized
3 K8 |7 E5 w) m2 T, s
. `/ z3 K4 O' o% ^[root@pxe ~]# lsblk
, T( I5 [' s7 ]NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
( Z2 l% f1 D7 j- |  Xsr0            11:0    1 1024M  0 rom  
$ i' D5 m* P+ W+ S# O6 ivda           252:0    0   40G  0 disk " H- t( s$ {! J7 f  z$ h) L2 n( f
├─vda1        252:1    0    1G  0 part /boot
1 j3 L; Y6 `. N9 H└─vda2        252:2    0   19G  0 part 3 Q& m  C- o! V4 {6 T
  ├─rhel-root 253:0    0   17G  0 lvm  /4 [! D) z  C( L+ j' `
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
6 F/ X* h* s! @, gloop0           7:0    0  3.6G  0 loop /mnt/6.8  c0 Y- L- d& h
loop1           7:1    0  3.6G  0 loop /mnt/6.10
  ~* b! @0 d) |" Floop2           7:2    0  4.2G  0 loop /mnt/7.8
" V. L4 w& U8 b( r0 H  H[root@pxe ~]# growpart /dev/vda 2
1 P7 g* g' u/ ?/ DCHANGED: partition=2 start=2099200 old: size=39843807 end=41943007 new: size=81786847 end=83886047
% H' p: ?0 R; @& S2 N7 v* N[root@pxe ~]# lsblk
. s6 t* [# y3 s  pNAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
. {, @/ Y% ~* q: \6 C. [! ?3 Dsr0            11:0    1 1024M  0 rom  # p3 Z2 x+ q5 W# A' ]
vda           252:0    0   40G  0 disk
7 H2 f+ [' k0 |+ M- b; P; J  B! e├─vda1        252:1    0    1G  0 part /boot
! n7 n; O/ }2 \0 R└─vda2        252:2    0   39G  0 part 8 u6 W( n) j2 p' T
  ├─rhel-root 253:0    0   17G  0 lvm  /
# Y# _/ w" T8 e7 {& u2 [5 i. p  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
/ S* R( ~5 Q, T8 E0 Mloop0           7:0    0  3.6G  0 loop /mnt/6.85 L2 r1 S( t* `' ~. x
loop1           7:1    0  3.6G  0 loop /mnt/6.109 E: d- R8 _# i5 s
loop2           7:2    0  4.2G  0 loop /mnt/7.8
, j* s1 a. {+ `0 r& c  j( X( m9 ~
1 b" Z& e9 Z/ K2 F! b+ D! E. b  w/ N2 q2 l! ~4 R: c4 R  P
2 K- B8 _! H/ O7 T& \0 U* H
[root@pxe ~]# lsblk
& d3 O, X. Q' s0 k( o7 FNAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT9 S2 Z: S( d1 D7 m* i& x' A
sr0            11:0    1 1024M  0 rom  8 u( I$ |; X4 z- F& j0 V
vda           252:0    0   40G  0 disk 8 x0 P: V( Q1 Y" N8 W
├─vda1        252:1    0    1G  0 part /boot
4 C/ m$ x& ]; E3 N└─vda2        252:2    0   39G  0 part $ z3 P; I3 E' z& M
  ├─rhel-root 253:0    0   17G  0 lvm  /  @& G8 z0 \6 l- E
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]! J0 W9 d+ T9 n$ v( y* r
loop0           7:0    0  3.6G  0 loop /mnt/6.8
# A( g; P, O2 [# v. uloop1           7:1    0  3.6G  0 loop /mnt/6.10
5 S- {8 V, P# y/ R, N8 C7 \loop2           7:2    0  4.2G  0 loop /mnt/7.8
" j# U: C2 E( s: I3 j4 [" z
+ o! D: q( z4 `5 y[root@pxe ~]# pvresize /dev/vda2 2 Q: J$ z. h( g7 Y; I8 x
  Physical volume "/dev/vda2" changed
+ h/ U  t" g% T7 f1 v. z: n, K  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
- O  T8 {  H; M& [; U* |% s[root@pxe ~]# pvresize /dev/vda2 40
9 I: V6 P( I3 }- G" j  Failed to find device for physical volume "40".' J/ B' |. A7 d0 f& w, K
  Physical volume "/dev/vda2" changed
- P" @7 N  L) }1 y+ X& h  1 physical volume(s) resized or updated / 0 physical volume(s) not resized" w, e/ z) q9 \" S1 M7 X

, T9 b  h: D3 O- {[root@pxe ~]# lvextend -l +100%FREE /dev/mapper/rhel-root
: X" G; [9 B# Z4 V  Size of logical volume rhel/root changed from 16.99 GiB (4350 extents) to 36.99 GiB (9470 extents).& @; q5 M* s8 A
  Logical volume rhel/root successfully resized.
6 H! [6 i- n) S/ A5 O5 j4 m3 ^0 b: h# g) Z3 X- Y5 T* e
* B9 p5 F- }4 S- l
[root@pxe ~]# df -TH9 i! [1 n- v+ q* l
Filesystem            Type      Size  Used Avail Use% Mounted on
) n; [" g9 w; s; E# [devtmpfs              devtmpfs  952M     0  952M   0% /dev
7 p( f. @* ?  F# htmpfs                 tmpfs     964M     0  964M   0% /dev/shm( ?5 L3 e1 [4 t" j. J
tmpfs                 tmpfs     964M  9.1M  955M   1% /run9 ?* h3 [6 q! d/ r2 u1 l& v
tmpfs                 tmpfs     964M     0  964M   0% /sys/fs/cgroup! Z4 J, x% s3 W) F
/dev/mapper/rhel-root xfs        19G   18G  338M  99% /
1 J4 [1 ^8 x  ^, R/dev/vda1             xfs       1.1G  157M  907M  15% /boot2 ]/ H4 [0 ]) l# Z- V
tmpfs                 tmpfs     193M     0  193M   0% /run/user/0) \% Y+ Z& D5 a% e' i* f
/dev/loop0            iso9660   3.9G  3.9G     0 100% /mnt/6.8
6 h& }9 B1 G. H7 k9 Q2 O/dev/loop1            iso9660   3.9G  3.9G     0 100% /mnt/6.10) C; N: P% h- i" ^: F) w/ ~8 l, f
/dev/loop2            iso9660   4.6G  4.6G     0 100% /mnt/7.8
5 ?. Q% D. J0 [  `5 z2 l# _, o. c
; B8 a8 p1 c. k; ^9 G[root@pxe ~]# resize2fs -f /dev/mapper/rhel-root
1 z  r) M3 Q& }" [) _resize2fs 1.42.9 (28-Dec-2013)
& o9 @  h5 R& ?8 wresize2fs: Bad magic number in super-block while trying to open /dev/mapper/rhel-root
4 q; S: c3 x2 D  J+ }5 c" m- Q/ nCouldn't find valid filesystem superblock.
$ @# A# j6 U8 z[root@pxe ~]# pvresize /dev/vda
' U" z; B& V4 @( _' B5 Z2 c$ vvda   vda1  vda2  ) ~. v: H0 U1 U8 V: W& X6 h: ]: g
[root@pxe ~]# pvresize /dev/vda
0 a9 I* y5 f6 _/ zvda   vda1  vda2  
. m8 G6 w) ^# Y9 I3 q' Q+ `3 w[root@pxe ~]# pvresize /dev/vda2 & {( w- ~" }! ?+ @# u2 i  I
  Physical volume "/dev/vda2" changed
  {# z2 w6 s+ z7 T* f! W8 C( M  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
- H4 q& f- E8 x4 s+ g[root@pxe ~]# pvscan
2 W% `6 Y  s; M, ]& Z9 z: b  PV /dev/vda2   VG rhel            lvm2 [<39.00 GiB / 0    free]
- P$ H3 Y' f) Z: b  Total: 1 [<39.00 GiB] / in use: 1 [<39.00 GiB] / in no VG: 0 [0   ]
& _3 G( _7 t$ h$ [$ B[root@pxe ~]# vgscan ( e/ W: \3 c  W, q! F
  Reading volume groups from cache.' z0 T6 t/ ^3 A* P& P: |; G
  Found volume group "rhel" using metadata type lvm2
$ R0 }$ p. O' y  d! Z' u6 @
& x8 j- S/ G1 \% V: i  v[root@pxe ~]# lvscan
: a, n& @2 q: _7 r3 J9 O  ACTIVE            '/dev/rhel/root' [36.99 GiB] inherit
- u' k+ y9 H- p2 q2 j  ACTIVE            '/dev/rhel/swap' [2.00 GiB] inherit
' l  T9 o! d5 N; ^, m5 U5 U1 q6 M[root@pxe ~]# df -TH
" r6 ?* ~* U) {9 Y3 M# sFilesystem            Type      Size  Used Avail Use% Mounted on$ d4 i8 G2 O  \2 z, n! l) f
devtmpfs              devtmpfs  952M     0  952M   0% /dev
) O( [! Z& M* f+ f/ E5 }) @tmpfs                 tmpfs     964M     0  964M   0% /dev/shm
5 P, |: Q( L6 e) \tmpfs                 tmpfs     964M  9.1M  955M   1% /run
  y% u0 T' [* d, G. }- ltmpfs                 tmpfs     964M     0  964M   0% /sys/fs/cgroup7 H& V# K$ f, {3 ^( C/ F1 K5 Z
/dev/mapper/rhel-root xfs        19G   18G  338M  99% /  G) I6 {) P- e! c* W8 m
/dev/vda1             xfs       1.1G  157M  907M  15% /boot. e  @; `; {3 l3 Z& B
tmpfs                 tmpfs     193M     0  193M   0% /run/user/0
8 `. c% C* I4 B4 S  M/dev/loop0            iso9660   3.9G  3.9G     0 100% /mnt/6.8
& y* L" u- w5 y1 G6 O3 h8 ^/dev/loop1            iso9660   3.9G  3.9G     0 100% /mnt/6.10  J/ d6 W+ l' X" Q3 l6 @9 b- ^
/dev/loop2            iso9660   4.6G  4.6G     0 100% /mnt/7.8- J" J5 `* P  D2 C/ Z: m0 ~

5 O+ I  t6 ]# L' W( d1 I7 |- }- E[root@pxe ~]# lvextend -l +100%FREE /dev/mapper/rhel-root1 v/ P* Y5 t) o6 u2 t3 M
  New size (9470 extents) matches existing size (9470 extents).; j; g, g" d& v0 a, J; S$ V

( r: t* l2 C; A$ t4 L. E+ Z' ^0 e& g- a4 g7 D* }2 m) Z' D$ I
[root@pxe ~]# df -TH
7 B  w# ~9 ~7 n+ S! ^  fFilesystem            Type      Size  Used Avail Use% Mounted on
. g7 q, A  W) v& l  Odevtmpfs              devtmpfs  952M     0  952M   0% /dev, g# @- P% P4 B$ @% _& l
tmpfs                 tmpfs     964M     0  964M   0% /dev/shm! x  W" l) x$ G3 M) R# n3 v
tmpfs                 tmpfs     964M  9.1M  955M   1% /run3 A1 r7 u. K) [( G6 o' N
tmpfs                 tmpfs     964M     0  964M   0% /sys/fs/cgroup
7 p5 N' p+ _5 ~- i$ U/dev/mapper/rhel-root xfs        19G   18G  338M  99% /5 M% E! M( ~+ @6 }1 `
/dev/vda1             xfs       1.1G  157M  907M  15% /boot
3 V& P* c) M$ n2 N8 G" p1 I' Y' b6 ntmpfs                 tmpfs     193M     0  193M   0% /run/user/0
& e6 k2 O/ B/ s6 A1 P+ |/dev/loop0            iso9660   3.9G  3.9G     0 100% /mnt/6.8# z$ f) u9 [6 b4 a
/dev/loop1            iso9660   3.9G  3.9G     0 100% /mnt/6.10  s/ ~6 Y  x( x8 S$ _# [
/dev/loop2            iso9660   4.6G  4.6G     0 100% /mnt/7.81 v+ P$ R; R; D* [: \( ~

+ f- b* p  B! [7 F( T# f8 M# e
, k& g& o% l' E7 k1 s3 d, S/ I- o, j4 x  b0 }% |$ \+ P. _
* [  d- l+ \% D5 e8 T
[root@pxe ~]# resize2fs -f /dev/mapper/rhel-root ) m: S/ e, ]0 Z8 @1 h' y
resize2fs 1.42.9 (28-Dec-2013)
  S! f/ \& `( Z: Q; x2 N, eresize2fs: Bad magic number in super-block while trying to open /dev/mapper/rhel-root/ v2 f! F9 K0 I2 V$ a
Couldn't find valid filesystem superblock.* {( O/ A0 z- A; H9 \+ T; o
+ ~- V! Q3 G$ r: P( g$ H0 G' `
[root@pxe ~]# growpart /dev/vda 20 \, [" c) |+ h/ r% N5 `# H, C
NOCHANGE: partition 2 is size 81786847. it cannot be grown$ }4 b* H1 F# |2 ?0 m" s4 x
[root@pxe ~]# pvresize  /dev/vda2
# c; d$ f) @: Q1 I( C6 b* f  Physical volume "/dev/vda2" changed
  u. D% C' q) g7 h! a& ?( @  1 physical volume(s) resized or updated / 0 physical volume(s) not resized& D) M! N8 x) g. q0 e! g1 d  Z
[root@pxe ~]# xfs_growfs /dev/mapper/rhel-root + C% ]$ r! I! F# S- q# ]1 k/ X1 |
meta-data=/dev/mapper/rhel-root  isize=512    agcount=32, agsize=140544 blks0 y" ~! M8 ?- c2 i- n
         =                       sectsz=512   attr=2, projid32bit=1
) O6 h& M% x) r8 J         =                       crc=1        finobt=0 spinodes=0* E! G3 A. ~5 v4 x7 Y
data     =                       bsize=4096   blocks=4454400, imaxpct=25. p" ]" v# A: v0 P% k. a
         =                       sunit=0      swidth=0 blks
9 \3 y3 A. b7 }$ B, d7 t  gnaming   =version 2              bsize=4096   ascii-ci=0 ftype=1
$ \  w# \* U! Olog      =internal               bsize=4096   blocks=2560, version=2
; y8 A; E8 u/ A5 [* \         =                       sectsz=512   sunit=0 blks, lazy-count=1( n- J" x7 \$ n# L7 O* F8 [6 p
realtime =none                   extsz=4096   blocks=0, rtextents=0
1 ?! o8 F6 |9 K& ]data blocks changed from 4454400 to 9697280
+ L) u! Z0 I. Y# q! g
7 }2 S$ T  W) K- {5 m

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-4-11 17:33:21 | 显示全部楼层
以使用如下命令, A4 T9 d1 p8 p4 v. B/ s( E5 W5 y
2 b, X7 h% O8 R" V
qemu-img snapshot -l /var/lib/libvirt/images/kvm1.qcow2
( \  W$ V+ F8 G磁盘镜像如果有快照,无法进行扩容- S8 I9 A) A4 N% Y
. Q2 a( N& k8 L8 ?" I
再次确认,已经备份了需要扩容的磁盘,然后开始操作,此处以kvm4为例,从宿主机可以看到,目前kvm4已经启动; z1 c! I# a7 _( [
+ p. I; X% ~. ?
[root@cos7 ~]# virsh list --all
! x) u& I4 D" C1 a/ N/ z$ v- XId Name State) n9 `+ N# s7 u9 p! h' |- i
----------------------------------------------------
6 f4 G" A) \" a& b" L5 d9 c4 kvm4 running  t4 B0 e: L) v$ [
- kvm1 shut off
8 G$ F8 H0 K2 }- kvm2 shut off4 Z) r( A( z/ L4 ?( Z
- kvm3 shut off) [. `4 D, G- x. O8 l
- kvm5 shut off7 q/ B: L0 y& [" C* ^& {; B. U
- kvm6 shut off' H' v) C. j0 m% j0 J1 Z6 {" Z
登录kvm4,查看虚拟机磁盘状态,如下
% M# u4 K8 V1 f% K5 U& ?0 ]9 M- C( g5 I7 u" ?1 w5 c
[root@kvm4 ~]# fdisk -l$ {- S  ]7 t1 M8 L
7 J2 L+ }. D8 ^7 Q) x
Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors" u7 [) p. U/ D9 b; R2 r( ~
Units = sectors of 1 * 512 = 512 bytes
3 h# l, B6 H) j2 l% d0 vSector size (logical/physical): 512 bytes / 512 bytes
/ _0 J' M( }0 o8 t1 BI/O size (minimum/optimal): 512 bytes / 512 bytes8 j  [, D& W& E( R( E
Disk label type: dos
) R0 Y- ~0 A* L7 m* V% e) QDisk identifier: 0x000b94178 t+ i" s6 m' i, R! w5 ]
" g$ D" M3 @* J8 b# w: D6 @
Device Boot Start End Blocks Id System6 M% y" x( `" t, l2 w
/dev/vda1 * 2048 2099199 1048576 83 Linux
8 e2 \! D  {' }3 C5 U' a5 _/dev/vda2 2099200 10227711 4064256 82 Linux swap / Solaris- g1 X  t3 b* p8 Q! g) W1 r
/dev/vda3 10227712 104857599 47314944 83 Linux
; E3 R8 |7 ]0 O6 w[root@kvm4 ~]#
3 o6 Z: [+ u9 s+ r0 T[root@kvm4 ~]#2 p" ~+ ~& u% f- ~
[root@kvm4 ~]#! [! [$ j* d( v( ^
[root@kvm4 ~]# df -h
' U% W0 D# c, _7 L$ l! b3 hFilesystem Size Used Avail Use% Mounted on
1 O  M) O) E1 b& Hdevtmpfs 1.9G 0 1.9G 0% /dev. ?: ~. W5 h* ?- w& _
tmpfs 1.9G 0 1.9G 0% /dev/shm7 m) S2 j5 Q/ s* M6 x6 H; Q! e
tmpfs 1.9G 8.5M 1.9G 1% /run
, Y# Y  @1 ?- Qtmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
  J( w: j& B* M1 ?0 `/dev/vda3 46G 1.3G 44G 3% /
3 j. _. B0 U6 g/ P3 w: i2 U3 r/dev/vda1 1014M 142M 873M 14% /boot, E! A  @: F' G0 B2 ~
tmpfs 379M 0 379M 0% /run/user/08 G' U; }1 u" @
从上述信息可以看出,目前kvm4虚拟机只有一块vda磁盘,有三个分区,/dev/vda1分区是boot分区,/dev/vda2是swap分区,/dev/vda3是根文件系统,根的大小是46G,44G可用,此处假设,根分区已经沾满了,我们需要扩容根分区,虽然最终目标是扩容根分区,但是需要先在宿主机上,为kvm4的磁盘进行扩容,扩容完磁盘后,再扩容分区的文件系统。
* H# J: n# V9 K% Z在宿主机上确认kvm4的磁盘镜像路径,如下:
: M$ G, \3 U* R1 j
- ^0 i) k& M: Y" \[root@cos7 ~]# virsh domblklist kvm4* @& W$ W' y" z$ W9 X" \6 V. x
Target Source# q" o' d$ k9 D! [
------------------------------------------------0 V9 X% M+ y) ?0 J: |: z: Y
vda /var/lib/libvirt/images/kvm4.qcow2( I# r8 d5 K$ ^* l7 }
hda -. `2 l3 w# L+ ~: G) h* F: ]* ^# q
可以看到,kvm4的磁盘镜像路径是/var/lib/libvirt/images/kvm4.qcow2,对应挂载到了kvm4的vda磁盘,先看一下目前磁盘镜像的大小
, P8 X* G. d& g
2 g0 e, z+ q0 H; [7 @& B[root@cos7 ~]# qemu-img info /var/lib/libvirt/images/kvm4.qcow2
9 |. N! s: G6 z* O1 u2 q2 wimage: /var/lib/libvirt/images/kvm4.qcow2; J" V4 h5 ^% {) _8 P6 @3 [7 j
file format: qcow2) }' H" C9 o4 o" \
virtual size: 50G (53687091200 bytes)7 _0 v" v- l$ R! {3 P$ E9 e
disk size: 1.5G
5 ]% P0 w: x5 \' t8 s+ w; |cluster_size: 65536- u6 ^* c3 X& |5 V
Format specific information:* b, W$ u8 W4 h& x
compat: 1.1
7 J$ q* f/ S$ X8 u% Olazy refcounts: true5 Z+ ?+ k% T6 C! A6 j
如上所示,磁盘虚拟大小为50G,目前占用宿主机1.5G空间,磁盘格式是一个qcow2的磁盘。8 p, Y3 t$ h( x* u$ I
现在,我们要扩容这个磁盘镜像,增容20G的空间,但是在操作之前,请先停止虚拟机,虽然不停止也可以增容成功,但是会报错,目前还不清楚,错误是否会对虚拟机以后的运行产生影响,保险起见,先停止虚拟机,然后再执行如下命令对磁盘镜像进行扩容。9 ?0 G  y. o" Z/ @! D
停止虚拟机后,执行如下命令
* b2 S/ {7 ]  T1 o
) }( h. R$ z9 \# L# t: Z2 s4 @' X* ?% o8 P[root@cos7 ~]# qemu-img resize /var/lib/libvirt/images/kvm4.qcow2 +20G
, g6 T* M+ r! m4 `6 G) k3 x* MImage resized.7 y0 W! f+ h8 ~4 ]3 F7 Y1 R
增容后,再次查看磁盘镜像信息,如下,磁盘的virtual size已经从50G变成了70G
4 `+ }& V" S# @) K! Y
+ e: P% D! ?+ Q1 u3 u1 X3 t* G5 m[root@cos7 ~]# qemu-img info /var/lib/libvirt/images/kvm4.qcow26 P0 F( ^/ x. N( i* Q7 e
image: /var/lib/libvirt/images/kvm4.qcow2
, G+ y5 a, h8 f! K3 [. kfile format: qcow2& }4 |* P$ H8 \3 h; V$ G* X8 r
virtual size: 70G (75161927680 bytes)
$ A1 f+ a2 H. s5 R! j; n( f) rdisk size: 2.5G& r- G6 k9 L0 Z0 Y  ^
cluster_size: 655367 D: h# U5 L8 Q& z
Format specific information:
  ~6 n* f& x2 f8 ~compat: 1.1
) R) c( e- {" ]% G& ~( b( Blazy refcounts: true
8 p4 z$ O, z5 }. w! f磁盘扩容成功后,启动kvm4虚拟机,登录到虚拟机内,再次查看磁盘信息,发现已经变成了75G' ~3 x2 U& u  p/ U' e- w& z( s
" W4 V, ~* V% W% x% j9 s0 F  r
[root@kvm4 ~]# fdisk -l; M3 L0 z% s9 d3 K
1 P5 e+ G+ F6 U) m; `! T
Disk /dev/vda: 75.2 GB, 75161927680 bytes, 146800640 sectors5 k& h, m3 s  A6 _6 w. r  L0 S6 D4 E
Units = sectors of 1 * 512 = 512 bytes1 K$ a$ N, P7 w6 H* e
Sector size (logical/physical): 512 bytes / 512 bytes
  G: X: ?- c1 Q3 NI/O size (minimum/optimal): 512 bytes / 512 bytes
8 D9 ~( c  J5 {) }$ Y  h+ DDisk label type: dos; |! k' g# q) k2 H
Disk identifier: 0x000b9417* _7 M4 n$ Y2 H9 E4 f" _% H
3 Q' N8 Q3 [# P8 F# Z% l: R
Device Boot Start End Blocks Id System. y0 N+ l% Q  Y9 w9 }: o
/dev/vda1 * 2048 2099199 1048576 83 Linux
3 C& b2 ~$ m5 T/ I2 k5 E4 s0 ]/dev/vda2 2099200 10227711 4064256 82 Linux swap / Solaris
. v: c4 Q6 C9 H9 a/dev/vda3 10227712 104857599 47314944 83 Linux2 I1 T6 ~2 U0 u0 X$ B
但是,根分区和对应的文件系统还没有扩容,如下,可以看到/dev/vda3分区仍然识别为48G,根文件系统仍然识别为46G。
4 H; _( x( T4 B. m% |
" U% {  D- J  o3 B[root@kvm4 ~]# fdisk -lu /dev/vda3
# H) a* E) M3 N$ } 0 o4 U" G, j0 j7 `& z# j
Disk /dev/vda3: 48.5 GB, 48450502656 bytes, 94629888 sectors" z/ u/ w! O$ K! |6 P  ]9 r
Units = sectors of 1 * 512 = 512 bytes! F5 b: K) {  r* F
Sector size (logical/physical): 512 bytes / 512 bytes$ e  [8 b" k! b. c9 q# \! b" j7 a
I/O size (minimum/optimal): 512 bytes / 512 bytes) D+ O7 M1 ~2 r3 P+ K) G/ p

! \- x! G2 f6 a1 ?& C9 J! j# _+ D[root@kvm4 ~]#- V6 H5 z! _- H! ?  Z7 E9 l: U1 c
[root@kvm4 ~]#+ D+ t+ k$ `* \2 x; R/ D3 K
[root@kvm4 ~]#2 G, M' V& D0 Q3 [
[root@kvm4 ~]# df -h
$ C7 S% Q4 C7 l, w3 ]0 fFilesystem Size Used Avail Use% Mounted on
: F7 s0 z+ q: \. U( B* Udevtmpfs 1.9G 0 1.9G 0% /dev
! L. q4 g; K) t  Ltmpfs 1.9G 0 1.9G 0% /dev/shm2 l# d; `8 ^: ~% F
tmpfs 1.9G 8.5M 1.9G 1% /run
% ?2 [3 T& y4 H& m; p% Stmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
. M6 T0 U8 U- m) `% ~* t: y) O; a/dev/vda3 46G 1.3G 44G 3% /
) U+ U+ x/ B/ z; j; o/dev/vda1 1014M 142M 873M 14% /boot4 X: `/ _3 W3 s$ n: Y& M
tmpfs 379M 0 379M 0% /run/user/0& Y/ r" @4 X/ z+ Z4 F. M- ]
我们现在的目标就是扩容根分区和文件系统。
9 t% C5 ~, l' p: Q此处可以参考阿里云的文档进行扩容操作,链接如下:. }+ g+ _+ T# N" {' l& \1 H
https://help.aliyun.com/document ... scm=20140722.S_help
' N7 w8 l! G: y) D' E( y: f3 O6 R
& {$ {. p$ F& @+ M* e我的虚拟机操作系统是centos7,分区是MBR分区,不是GPT分区,文件系统是xfs,所以,我的扩容过程可能跟实际遇到的情况不太一样,这里需要以实际情况为准,参考上面的文档,做出不同的细节处理,生产环境中最好提前克隆出一个机器或者做一个测试机进行模拟。% z  Q2 x; O) @/ U
3 m1 j  x1 J! r( n0 O
首先,在虚拟机中安装cloud-utils-growpart工具(如果是GPT分区,先安装gdisk),对分区进行扩容,centos7中命令如下
+ g$ @1 {7 j$ l& @" |) L5 X1 f5 v! e' x7 s
yum install -y cloud-utils-growpart5 c0 c- e2 s' Z* m) F
安装完成后,执行如下命令扩容对应分区,我需要扩容vda3,所以命令中是vda 3,vda和3中间有空格
+ W- O# O3 [+ `  L5 L6 F2 s) u! p' p) C( _& f$ I
[root@kvm4 ~]# growpart /dev/vda 3
; R; {, \3 w* Y: V7 S, K: vCHANGED: partition=3 start=10227712 old: size=94629888 end=104857600 new: size=136572895 end=146800607
0 Y, g5 s7 k6 t! Q3 T- Z) l  ?: j可以看到,分区的大小已经改变,使用命令确认,vda3分区的大小已经识别为69.9G6 A0 [- q; p# j
& e4 g) `# L% J# D8 b- {
[root@kvm4 ~]# fdisk -lu /dev/vda32 p6 v. w5 o! ]* r: Z8 Q- X- N; A! S
. G* ]3 g1 h; `; ^" _& M
Disk /dev/vda3: 69.9 GB, 69925322240 bytes, 136572895 sectors6 ~, J) ~5 [% T( i9 ]( ~2 m
Units = sectors of 1 * 512 = 512 bytes' J$ Z) N1 J2 L1 c
Sector size (logical/physical): 512 bytes / 512 bytes
, L2 O, j  U1 b) kI/O size (minimum/optimal): 512 bytes / 512 bytes& A! u" c" a7 p1 w7 |* t
如果扩容完成后,再次执行扩容命令,会提示NOCHANGE…it cannot be grown,这是因为,分区已经扩展完成了,没有富裕的空间可供扩展了,其实,还有一种情况也会报如下错误,导致无法扩容分区,我们一会儿再聊,先把一整套扩容流程走完,此处重复执行如下命令不会影响扩容。* r: b. m# C' f! e! T8 }; `3 o
+ @6 R" o( t) `- g5 G% |+ J
[root@kvm4 ~]# growpart /dev/vda 38 Z% p+ m' h0 D& T+ l4 n
NOCHANGE: partition 3 is size 136572895. it cannot be grown
( [( e$ i5 S& Z: |vda3分区扩容完成后,需要扩容分区对应的文件系统,此处文件系统是xfs,所以执行xfs_growfs命令即可,如果是ext文件系统,需要使用resize2fs命令,此处运行的命令为xfs_growfs /dev/vda3
! K: n/ @# a1 l  ?如下:
- a$ T6 M) q8 R) O7 V) j% q1 f
[root@kvm4 ~]# xfs_growfs /dev/vda3
1 }# `, ]# k6 `" z1 cmeta-data=/dev/vda3 isize=512 agcount=4, agsize=2957184 blks
# M( U2 b' ^( |+ T4 c= sectsz=512 attr=2, projid32bit=1% h! s6 k$ U4 L- U. q
= crc=1 finobt=0 spinodes=0& b/ z& Z# U+ h' D  H, |
data = bsize=4096 blocks=11828736, imaxpct=25
0 ^0 s! d. J% O) y= sunit=0 swidth=0 blks0 t/ _2 f1 B7 E
naming =version 2 bsize=4096 ascii-ci=0 ftype=11 U4 m! P- U/ |) k+ d
log =internal bsize=4096 blocks=5775, version=27 f- m) q$ C* ]
= sectsz=512 sunit=0 blks, lazy-count=15 r3 G. p7 e7 v0 c3 i/ t+ ~( g
realtime =none extsz=4096 blocks=0, rtextents=0
2 D0 v6 Y0 C! {+ i5 Ddata blocks changed from 11828736 to 17071611
/ L( i1 z: D+ O2 n( o6 L6 L, N/ N8 z9 z再次查看磁盘使用情况,可以看到,根分区已经从之前的46G扩容到了66G,如下
$ l3 o8 E5 U6 y% P. U
+ q+ q" j$ b# [) P5 D[root@kvm4 ~]# df -h- Y  W8 S. @- b
Filesystem Size Used Avail Use% Mounted on
+ q  D$ W% N! F. r; W, J( qdevtmpfs 1.9G 0 1.9G 0% /dev
6 Z$ R5 O0 ^0 Q' \/ e4 Jtmpfs 1.9G 0 1.9G 0% /dev/shm
0 g1 |2 S( P0 S: U3 y# j/ n0 Ltmpfs 1.9G 8.5M 1.9G 1% /run* x* E. r5 u; m$ U1 j% D" @+ U8 c
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
+ Q# u0 U, \" t7 }# D# ]/dev/vda3 66G 1.4G 64G 3% // ]7 S) [- _4 K3 E9 g4 {. ?
/dev/vda1 1014M 142M 873M 14% /boot
& V6 R  I+ Q; r0 y% O, ]' z! Stmpfs 379M 0 379M 0% /run/user/09 z6 o+ I* Q7 E6 F: `; b
至此,整个扩容操作已经完成了。
* D$ h& g6 t$ p2 a2 ]0 K# K. s4 f+ I& V9 k
此处有一个坑,刚才已经提到过,在扩容分区时,我们使用了growpart命令,如果重复执行此命令,会提示NOCHANGE…it cannot be grown,这是因为已经没有更多空间可供分区扩容了,但是,在某些特殊情况下,磁盘明明还有很多空间,在第一次执行growpart命令时就会提示it cannot be grown,现在咱们就来聊聊这种特殊情况。- H7 t$ ]& w7 ~2 T
- ~6 f# M9 {, n7 N) Q: w5 b" ?
如果磁盘有很多富裕空间可供分区扩容,但是每次执行growpart命令就提示it cannot be grown,很有可能是因为,你要扩容的分区不是磁盘的最后一个分区,上例中,我要扩容的vda3就是vda磁盘的最后一个分区,如下图,可以通过分区号或者分区区间很明显的看出,vda3就是vda的最后一个分区" |5 q) Q7 t1 x$ n4 ?5 ~
6 l  c/ t& `; q/ y9 }! k3 I5 @8 X
这种情况下,第一次执行growpart命令扩容分区时,应该是可以正常执行的。
3 |% D1 K! h- c. n+ M( b1 C% [但是,如果你遇到的分区是下面的情况,而你想要扩容的分区恰巧不是磁盘的最后一个分区,则无法扩容成功,会直接提示it cannot be grown
' n* Y) ~, H) `0 Z/ |1 l* U
& B0 `  F: n* w[root@kvm1 ~]# fdisk -l+ U9 q3 R. U/ F3 z! j
& X3 g5 _1 z8 Q# {
Disk /dev/vda: 536.9 GB, 536870912000 bytes, 1048576000 sectors
3 }/ D% S* H7 M$ |9 t0 rUnits = sectors of 1 * 512 = 512 bytes
+ V- s5 q4 x7 E3 ~6 P$ w! x4 TSector size (logical/physical): 512 bytes / 512 bytes$ P+ Y8 w; o( v/ t4 U% f
I/O size (minimum/optimal): 512 bytes / 512 bytes7 k* C1 W* r& y1 F3 z$ H- F* G
Disk label type: dos
! Z& b  [* V8 s" ]9 Y6 XDisk identifier: 0x000ac5a2
: C, }* [/ `3 h) M8 k* ~ . z9 B' u$ X; a- M% `9 v
Device Boot Start End Blocks Id System
) u8 z6 q- [3 |7 h8 w/dev/vda1 * 2048 2099199 1048576 83 Linux
5 X- ?! Y( K, U* i/dev/vda2 2099200 1044367359 521134080 83 Linux
* r$ U$ o1 \! V" w/dev/vda3 1044367360 1048561663 2097152 82 Linux swap / Solaris
' a9 g2 p  n8 c# e8 a  F! i[root@kvm1 ~]#' ?1 R. C+ t% x% b/ ~/ H
[root@kvm1 ~]#5 M. L* Q) m4 |: `" c! ?8 l
[root@kvm1 ~]# df -h8 X0 x/ i% |3 ~: Z6 y
Filesystem Size Used Avail Use% Mounted on, h  u, l3 `! F+ F) n. w
devtmpfs 909M 0 909M 0% /dev3 q% i5 w7 o3 v, P2 l1 c
tmpfs 919M 0 919M 0% /dev/shm3 N' o2 ^9 ~5 y; R
tmpfs 919M 8.6M 911M 1% /run' ]6 H9 K4 d& X& {6 x
tmpfs 919M 0 919M 0% /sys/fs/cgroup
% ]# `8 A3 O6 N% T/dev/vda2 497G 1.3G 496G 1% /
) l0 I3 m4 \2 v  {( g/dev/vda1 1014M 142M 873M 14% /boot4 Z) ^+ H/ D0 l) \% H6 _
tmpfs 184M 0 184M 0% /run/user/0/ k* h% j) ~: \  L5 s
如上,vda一共有三个分区,根对应的分区是vda2,即使vda磁盘有很多富裕空间,如果想要使用growpart命令扩容vda2,也是不行的,会直接提示it cannot be grown,因为上例中,vda2后面还有一个vda3分区,而上例中的情况比较好处理,因为最后一个分区是swap分区,我们只需要删除这个分区,然后再扩容vda2就好了,扩容完成后,再单独挂载一个磁盘作为swap分区或者使用文件作为swap分区,所以,在做模板机的时候要避开这个坑,别问我怎么知道的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:41 , Processed in 0.017587 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表