易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 962|回复: 1
收起左侧

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

[复制链接]
发表于 2022-4-11 17:19:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
[root@compute03 images]# virsh blockresize rhel-server-7.9 /var/lib/libvirt/images/rhel-server-7.9.qcow2 20G
- Z; t' C8 }2 U4 }' lBlock device '/var/lib/libvirt/images/rhel-server-7.9.qcow2' is resized1 _: Y+ s+ R; K1 ?9 U6 A4 _/ J: A
' @5 w1 i% n  i% ]: t1 d
[root@pxe ~]# lsblk
( j/ G5 H( A8 B; N  MNAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT' _) x* D% c, l. M+ z# R. M: c
sr0            11:0    1 1024M  0 rom  ) c5 O$ h" N/ [1 D/ w  A
vda           252:0    0   40G  0 disk
+ j$ u  B; U+ \. G├─vda1        252:1    0    1G  0 part /boot, A6 c6 }: l/ p% D! }& K5 d7 V# [( C
└─vda2        252:2    0   19G  0 part
2 A5 a( |$ S/ S6 b- O" R, `3 V% Z  ├─rhel-root 253:0    0   17G  0 lvm  /
7 K4 E3 `1 f+ A0 Y  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]. K9 I& t8 M9 X' y# d; j
loop0           7:0    0  3.6G  0 loop /mnt/6.80 v5 o  u7 Y: g% k) f  f
loop1           7:1    0  3.6G  0 loop /mnt/6.10
2 s# n- M: @# z; M$ Q9 Sloop2           7:2    0  4.2G  0 loop /mnt/7.8
% u1 ^: H- H) Y- [& ~- j: M[root@pxe ~]# growpart /dev/vda 2
5 @6 O* z( O4 lCHANGED: partition=2 start=2099200 old: size=39843807 end=41943007 new: size=81786847 end=83886047
, J$ c, s. u' N0 C: ^' u9 B[root@pxe ~]# lsblk 9 @( }# j# S$ k
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT  d3 d3 S. H7 m/ Y& u
sr0            11:0    1 1024M  0 rom  
7 l3 \1 E4 J9 ^- p' m. a( Uvda           252:0    0   40G  0 disk
, i1 p- F- g- `. m: j: }├─vda1        252:1    0    1G  0 part /boot- _" L$ O/ ~* e  F# v( v
└─vda2        252:2    0   39G  0 part
4 K4 D3 P! o4 n9 y3 @  ├─rhel-root 253:0    0   17G  0 lvm  /
1 @, F" T2 G% r$ N  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
+ P# ?) t1 B/ \" }) Bloop0           7:0    0  3.6G  0 loop /mnt/6.8
0 Y2 m6 z, B/ P+ b) p9 ~loop1           7:1    0  3.6G  0 loop /mnt/6.10) Y# i4 q" a# ^8 B$ l
loop2           7:2    0  4.2G  0 loop /mnt/7.8& |  V. ?, K* h! y1 f2 i! B

2 b0 T# s7 q9 \! h/ {
1 e' u* F3 V2 w/ e2 t- Y. T+ F7 D- Q5 v5 E+ f4 x3 Z/ R
[root@pxe ~]# lsblk / {; m* X7 N& r9 z9 {
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
4 K4 p& ~! C- H7 {- R' [% jsr0            11:0    1 1024M  0 rom  
5 O9 }0 t" e2 h6 _* V: \vda           252:0    0   40G  0 disk / W; C9 B' ~* b) ?# L& `# f
├─vda1        252:1    0    1G  0 part /boot
; b7 n5 q- |. B# J! A4 p- |└─vda2        252:2    0   39G  0 part
+ x$ ?# G& R1 B! _# \1 g& G7 F. Y2 E  ├─rhel-root 253:0    0   17G  0 lvm  /" c7 N, P* f2 z1 }2 s( _
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]5 _) a4 C# s/ O$ C& f0 g
loop0           7:0    0  3.6G  0 loop /mnt/6.8
( ^, W( _. ^4 z. s% c/ o1 y) eloop1           7:1    0  3.6G  0 loop /mnt/6.10! F. i% ~0 Q+ k8 M% m
loop2           7:2    0  4.2G  0 loop /mnt/7.8
# y( ]( e: L3 F6 g3 g$ S
/ m( e; J1 l8 p7 M2 e1 ^[root@pxe ~]# pvresize /dev/vda2
2 Z% b. _& r/ e5 S  Physical volume "/dev/vda2" changed
3 D1 t9 |* x: |, M# r, \! ]' [# \  1 physical volume(s) resized or updated / 0 physical volume(s) not resized" k' i3 H" I) S3 X
[root@pxe ~]# pvresize /dev/vda2 40
% \% `" N0 i! n+ p) o: L1 s" W3 ~  Failed to find device for physical volume "40".
! v7 ]0 x' C0 n- z% T  Physical volume "/dev/vda2" changed1 E, V6 }4 ?% H; ~7 U/ @
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized) i; J. W2 ?0 ^
4 `3 C' n+ m7 t# H
[root@pxe ~]# lvextend -l +100%FREE /dev/mapper/rhel-root6 M8 w9 l: B0 u$ s: C( W( Y: H
  Size of logical volume rhel/root changed from 16.99 GiB (4350 extents) to 36.99 GiB (9470 extents).7 O/ V' N* [, S- g/ V% g+ o
  Logical volume rhel/root successfully resized.
0 M# D4 b: c: T5 J$ g. c& O: T, I/ \; G
3 [0 s; @) I/ t! `5 H' o
[root@pxe ~]# df -TH
+ w2 W3 W$ ~9 AFilesystem            Type      Size  Used Avail Use% Mounted on$ \# i+ i2 B' _1 k9 V! P) s* A
devtmpfs              devtmpfs  952M     0  952M   0% /dev
1 h6 e0 p) C$ u' F* ?4 ]tmpfs                 tmpfs     964M     0  964M   0% /dev/shm
) k4 }: t1 N$ [6 n  N! g9 {tmpfs                 tmpfs     964M  9.1M  955M   1% /run
. G" x( J8 x) q. S. c" l% Ktmpfs                 tmpfs     964M     0  964M   0% /sys/fs/cgroup
) S" m8 t+ R' x0 ^2 _$ j/dev/mapper/rhel-root xfs        19G   18G  338M  99% /
$ A2 z4 V, g! k9 q; r2 ~/dev/vda1             xfs       1.1G  157M  907M  15% /boot' {1 R, I# h# J
tmpfs                 tmpfs     193M     0  193M   0% /run/user/0. B8 I$ ^6 D7 P8 T& ]1 y" ^
/dev/loop0            iso9660   3.9G  3.9G     0 100% /mnt/6.8
7 z0 [0 P, u0 m( Z: ^/dev/loop1            iso9660   3.9G  3.9G     0 100% /mnt/6.10
  A% h7 {  s5 g& @& Z8 D% I/dev/loop2            iso9660   4.6G  4.6G     0 100% /mnt/7.8
/ s! [. e# f* F/ L8 L0 ~: D$ s
( o% N. Z9 g0 F; g[root@pxe ~]# resize2fs -f /dev/mapper/rhel-root 4 v) B; R# _* Z3 b
resize2fs 1.42.9 (28-Dec-2013)1 |) M" J* @/ z  _1 S( D* e5 X
resize2fs: Bad magic number in super-block while trying to open /dev/mapper/rhel-root" [! c5 w/ ?* K$ n7 a! h* A
Couldn't find valid filesystem superblock.
& o1 K) S) z4 _0 h$ d& T; e- P[root@pxe ~]# pvresize /dev/vda, ^8 {+ d4 c# T
vda   vda1  vda2  
! P7 {8 K- s  N+ h. `, s6 ?- z9 `[root@pxe ~]# pvresize /dev/vda0 ^8 E% M  ]# r- g$ N9 J. z
vda   vda1  vda2  
: L/ b$ f5 I9 z8 E+ t: d& i[root@pxe ~]# pvresize /dev/vda2 ) _* P8 O5 S, n/ a6 G# s2 h5 {2 E
  Physical volume "/dev/vda2" changed$ G" }1 `2 ^9 v- R
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
( C" Y2 W5 {2 z- n( F! ?[root@pxe ~]# pvscan
# [% f; T0 m2 b7 Y8 n5 q  PV /dev/vda2   VG rhel            lvm2 [<39.00 GiB / 0    free]
) s; K$ B3 S' p, ~8 G' E+ A  Total: 1 [<39.00 GiB] / in use: 1 [<39.00 GiB] / in no VG: 0 [0   ]7 i. B$ m$ E! g# K0 S+ o) B/ p
[root@pxe ~]# vgscan
" }/ J+ }' B2 j$ e9 f. j6 `. A) A* |! Q  Reading volume groups from cache." a$ g0 z5 |- O
  Found volume group "rhel" using metadata type lvm2
2 z% ~. i4 `! k- o% q* x
1 n) G4 c0 G5 i% n+ T) h  Z( ]4 I[root@pxe ~]# lvscan
5 q3 p3 m( K* D7 p  ACTIVE            '/dev/rhel/root' [36.99 GiB] inherit
( P& G# h0 K+ b# m/ D( i# R! E  ACTIVE            '/dev/rhel/swap' [2.00 GiB] inherit
8 V& K1 L! s* p2 P, ^[root@pxe ~]# df -TH' }$ b1 p" `# @4 P6 k! B* g
Filesystem            Type      Size  Used Avail Use% Mounted on
9 I) H0 |/ }3 L) }2 o% K5 Jdevtmpfs              devtmpfs  952M     0  952M   0% /dev
$ i, d- ~- c( p8 {* Ktmpfs                 tmpfs     964M     0  964M   0% /dev/shm" W. Y2 z( D" I- v3 w2 Y/ q% {9 L
tmpfs                 tmpfs     964M  9.1M  955M   1% /run0 V  S) _/ X& [
tmpfs                 tmpfs     964M     0  964M   0% /sys/fs/cgroup1 f0 i+ e3 ^2 a5 V& ^  Y; H
/dev/mapper/rhel-root xfs        19G   18G  338M  99% /
, A' Y/ J' L; [6 q- P/dev/vda1             xfs       1.1G  157M  907M  15% /boot3 B  W, Y& R2 |. c. K' p3 y: i8 n
tmpfs                 tmpfs     193M     0  193M   0% /run/user/0
! {' _2 G" u' I/dev/loop0            iso9660   3.9G  3.9G     0 100% /mnt/6.8
  T5 |# M5 ^. x, L3 h/dev/loop1            iso9660   3.9G  3.9G     0 100% /mnt/6.10
% m  |/ _1 O" C! n  S- y, Z/dev/loop2            iso9660   4.6G  4.6G     0 100% /mnt/7.8. K& l7 e) o0 U% f3 ^2 d  Z; M- ^! @
+ e9 n: t% j8 T8 F$ F; ]
[root@pxe ~]# lvextend -l +100%FREE /dev/mapper/rhel-root
2 t+ D3 i/ r- x. n  New size (9470 extents) matches existing size (9470 extents).+ _: n+ J* T. e* D
* S' A4 f8 \" [: f3 H7 e; l
9 j, ^; M( x: ]) p5 N
[root@pxe ~]# df -TH+ y. ~7 T, H% G* r7 o; C
Filesystem            Type      Size  Used Avail Use% Mounted on& z; F2 d: @6 L& u, p% A  X
devtmpfs              devtmpfs  952M     0  952M   0% /dev; ?0 X/ w! R% D3 ~
tmpfs                 tmpfs     964M     0  964M   0% /dev/shm
) S/ b8 V- B9 `" h: p& dtmpfs                 tmpfs     964M  9.1M  955M   1% /run
# Q, ^  Q3 [5 I! p. W  H, Xtmpfs                 tmpfs     964M     0  964M   0% /sys/fs/cgroup
% x" W$ P% j# v) s0 v- H/dev/mapper/rhel-root xfs        19G   18G  338M  99% /; i: @% n! J1 d  k, p
/dev/vda1             xfs       1.1G  157M  907M  15% /boot
5 i) M1 {6 T1 r2 q& C9 E; q' d* itmpfs                 tmpfs     193M     0  193M   0% /run/user/0- F/ q/ `+ ?8 V1 Z' e
/dev/loop0            iso9660   3.9G  3.9G     0 100% /mnt/6.8" O" ~3 u* R+ o5 y8 R5 U8 B  D
/dev/loop1            iso9660   3.9G  3.9G     0 100% /mnt/6.10
1 W% ~* K. j' M1 ^) z" ?- C$ j/dev/loop2            iso9660   4.6G  4.6G     0 100% /mnt/7.8
6 G; N( U4 |4 l. G& p% o" A- u$ N- r- J8 M
/ B( D+ X' x5 i# u7 W$ P

4 b% v+ q! v' c  J
5 [+ x" O! h) j; Y/ ~( C3 Z3 |[root@pxe ~]# resize2fs -f /dev/mapper/rhel-root
& g) @" l+ s% n* V& j9 Z/ j* G: w" ^resize2fs 1.42.9 (28-Dec-2013)2 Z7 m: r3 `+ Q
resize2fs: Bad magic number in super-block while trying to open /dev/mapper/rhel-root- Y- ?  N* ?  k2 t3 H) d& P
Couldn't find valid filesystem superblock.
4 x6 K# j8 B2 E8 D
0 S; k2 w4 N4 B& v& A[root@pxe ~]# growpart /dev/vda 2& q- Q% Q% b; u7 }- M% t: d
NOCHANGE: partition 2 is size 81786847. it cannot be grown- S4 `$ p! e6 z% P; g
[root@pxe ~]# pvresize  /dev/vda2 : X5 t' M0 J0 e$ l+ g( x
  Physical volume "/dev/vda2" changed
3 d( F9 I6 i# n0 @, J  1 physical volume(s) resized or updated / 0 physical volume(s) not resized5 j3 O7 g: b( f& ]# C* Y/ o
[root@pxe ~]# xfs_growfs /dev/mapper/rhel-root / e' }5 j2 |5 u% e) F
meta-data=/dev/mapper/rhel-root  isize=512    agcount=32, agsize=140544 blks
; T; f& J- s# h: M         =                       sectsz=512   attr=2, projid32bit=1
0 C2 q: J3 \7 C2 b         =                       crc=1        finobt=0 spinodes=0  m- c% z) y- t8 r3 I+ t
data     =                       bsize=4096   blocks=4454400, imaxpct=25- I9 v: {/ c% }1 w; V
         =                       sunit=0      swidth=0 blks  L1 E; F1 z! g* e, G
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
) w. j* o0 ~/ L+ ]+ i. Blog      =internal               bsize=4096   blocks=2560, version=2! E' S. q+ _% F6 N- Z* R
         =                       sectsz=512   sunit=0 blks, lazy-count=1+ W, I3 R, L! @# E0 q
realtime =none                   extsz=4096   blocks=0, rtextents=0
7 k7 z9 q/ P8 k- K# ~; n) `+ ~data blocks changed from 4454400 to 96972803 v$ Y; `) r  |" X

& u' e' W+ Y% {+ t& I8 [2 F
 楼主| 发表于 2022-4-11 17:33:21 | 显示全部楼层
以使用如下命令
. K6 F$ _1 M1 u; Y
, t  V* r3 l3 o  j9 gqemu-img snapshot -l /var/lib/libvirt/images/kvm1.qcow2) d$ s& I( N& Q0 {& H% ~$ ?% _
磁盘镜像如果有快照,无法进行扩容
/ t6 B# G& z3 w( X
  S) _# n4 j- q" f* o, A; f再次确认,已经备份了需要扩容的磁盘,然后开始操作,此处以kvm4为例,从宿主机可以看到,目前kvm4已经启动% x7 N9 g: G! w) E! t
' u/ \3 T" Q* t' z+ p6 h) f6 C
[root@cos7 ~]# virsh list --all
: I) w1 n" i, r7 Z2 h  z; sId Name State6 v# \$ J$ y- B+ Q3 T% `6 ^& w* A
----------------------------------------------------; L! C) z' x9 E" W# J/ ]# ?. g- c
4 kvm4 running
2 T3 M( m; J+ P! X% s* l- kvm1 shut off2 Y! a& ]6 q* v- e; p+ ^7 G
- kvm2 shut off! K( U2 E" m5 e
- kvm3 shut off, ]! d' _( m; A$ F- I5 x1 z
- kvm5 shut off( p- s9 j# M; E3 J+ W
- kvm6 shut off
+ ]7 ~* A0 h' Z4 Z- W6 H/ o4 ~登录kvm4,查看虚拟机磁盘状态,如下
1 H+ c: I* v/ i& z
+ K8 W- B, P* _3 t- c5 ^[root@kvm4 ~]# fdisk -l6 l/ j5 n! F* I; s

" v) R* k5 I9 R9 \Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors
+ S! S) @+ i# ^5 gUnits = sectors of 1 * 512 = 512 bytes+ y- }+ `# n9 c) W: O" h" h1 }: L
Sector size (logical/physical): 512 bytes / 512 bytes4 K5 m$ q6 L) k9 a9 B3 a3 @; k
I/O size (minimum/optimal): 512 bytes / 512 bytes
3 N- x/ [4 J$ z; yDisk label type: dos$ z, l3 z- R$ M- t' k
Disk identifier: 0x000b9417$ V' `  ^: U) z6 y! N! u; Q/ t

$ i( K  k% p' ?9 _Device Boot Start End Blocks Id System
0 C! L. m! y* \" L9 R/dev/vda1 * 2048 2099199 1048576 83 Linux3 n# u  u2 Y6 O% ~# X9 T
/dev/vda2 2099200 10227711 4064256 82 Linux swap / Solaris4 }" K3 B+ |) A: n7 z/ t! U6 E
/dev/vda3 10227712 104857599 47314944 83 Linux
; j! m+ g) c, G% x& e! ~5 h[root@kvm4 ~]#) X# J# T# s& [
[root@kvm4 ~]#; V; M( r# D& k' p$ X# O" J# \, c
[root@kvm4 ~]#* E# g# B2 x& P5 f
[root@kvm4 ~]# df -h
& c# i, A2 w# y  }* ZFilesystem Size Used Avail Use% Mounted on+ P, U5 m- y: Z  |3 r6 C8 g
devtmpfs 1.9G 0 1.9G 0% /dev& R. x3 o* H5 x$ I
tmpfs 1.9G 0 1.9G 0% /dev/shm
& q; t( R9 P) F6 ~( P0 {1 ]: @tmpfs 1.9G 8.5M 1.9G 1% /run
0 h1 k* Z& f  ^$ Btmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup/ h" ?. E6 Z' K1 h; s" F
/dev/vda3 46G 1.3G 44G 3% /! v  @) ^/ ?% Y
/dev/vda1 1014M 142M 873M 14% /boot
3 x0 v! L& F+ S) u: V! ?tmpfs 379M 0 379M 0% /run/user/0
; @. u! G  H# G( d从上述信息可以看出,目前kvm4虚拟机只有一块vda磁盘,有三个分区,/dev/vda1分区是boot分区,/dev/vda2是swap分区,/dev/vda3是根文件系统,根的大小是46G,44G可用,此处假设,根分区已经沾满了,我们需要扩容根分区,虽然最终目标是扩容根分区,但是需要先在宿主机上,为kvm4的磁盘进行扩容,扩容完磁盘后,再扩容分区的文件系统。. q, `- N* X$ p: P- v+ {% e8 [
在宿主机上确认kvm4的磁盘镜像路径,如下:
0 n( ?: H3 \, R: w* m, w% K& X2 W2 e, h+ h& x
[root@cos7 ~]# virsh domblklist kvm4
7 G) V5 B. q6 K$ S* z4 V0 sTarget Source
& c7 W6 V2 M# Q; F/ F------------------------------------------------# N- a- I+ Y* A
vda /var/lib/libvirt/images/kvm4.qcow2$ }" V% N  W5 V. j+ H' F% c2 Y
hda -
; v, I3 }1 @" L2 P3 w' w可以看到,kvm4的磁盘镜像路径是/var/lib/libvirt/images/kvm4.qcow2,对应挂载到了kvm4的vda磁盘,先看一下目前磁盘镜像的大小# u( X- o9 V2 A5 d, F& w+ j
; K( K3 d0 Y- d5 t+ p
[root@cos7 ~]# qemu-img info /var/lib/libvirt/images/kvm4.qcow2( A+ P2 N$ N( b% I  Y+ c
image: /var/lib/libvirt/images/kvm4.qcow2# y1 p- y( T' P, H% c0 \4 ^
file format: qcow2
! a. G2 a' j! ^9 avirtual size: 50G (53687091200 bytes)* J2 p+ N1 y+ X0 U2 ~. ?( [1 C
disk size: 1.5G
" o7 h5 p* y* B; wcluster_size: 655366 b3 S7 V4 M2 ?. W, V* ~
Format specific information:
' W+ Z0 I5 T* O6 B# Rcompat: 1.1
' j& I: j) e2 T) U! I* ?2 i& Llazy refcounts: true
2 z2 l, u& f3 U6 u, j- \如上所示,磁盘虚拟大小为50G,目前占用宿主机1.5G空间,磁盘格式是一个qcow2的磁盘。
# @$ K1 A, L% U2 E# @现在,我们要扩容这个磁盘镜像,增容20G的空间,但是在操作之前,请先停止虚拟机,虽然不停止也可以增容成功,但是会报错,目前还不清楚,错误是否会对虚拟机以后的运行产生影响,保险起见,先停止虚拟机,然后再执行如下命令对磁盘镜像进行扩容。6 q# }# j+ W6 p) H, ]
停止虚拟机后,执行如下命令5 ~8 e) r9 P/ i7 [4 }5 I
1 Y. M( S1 M* g" \! O/ @
[root@cos7 ~]# qemu-img resize /var/lib/libvirt/images/kvm4.qcow2 +20G- m' P3 {, z4 K; G! _0 [
Image resized.
0 S0 R* j8 @/ d3 y( O% y增容后,再次查看磁盘镜像信息,如下,磁盘的virtual size已经从50G变成了70G7 S$ X& w  w, l

/ Z; n' ~5 t. N. W' H9 D0 Z[root@cos7 ~]# qemu-img info /var/lib/libvirt/images/kvm4.qcow2/ S$ y% ~" B9 V" a9 o
image: /var/lib/libvirt/images/kvm4.qcow2& e8 O. a: o. p3 H4 e- k+ Z
file format: qcow2
5 H. f$ o# }: v1 ~virtual size: 70G (75161927680 bytes); ?! q$ W) C1 H0 R: G
disk size: 2.5G
3 ?; P# J; E9 p' f5 a9 Dcluster_size: 65536$ d$ o9 X5 E3 p3 B) n9 s
Format specific information:
, [, g6 m0 }* r8 [- K7 zcompat: 1.1
, D2 X! K4 l! s5 c; i+ Alazy refcounts: true
2 g5 }8 J, ]" ]1 ]! ]: K磁盘扩容成功后,启动kvm4虚拟机,登录到虚拟机内,再次查看磁盘信息,发现已经变成了75G
& `. [5 a2 _. O# x0 c# p
# \$ {3 n' r: j' S6 d6 z  I. v7 M+ ][root@kvm4 ~]# fdisk -l, M9 E( I9 a  H9 ~$ N

' L* Y5 C% d) h, L# I9 q" F' TDisk /dev/vda: 75.2 GB, 75161927680 bytes, 146800640 sectors
$ m& T, o3 {- S  h' jUnits = sectors of 1 * 512 = 512 bytes
6 X4 Y8 f% |+ eSector size (logical/physical): 512 bytes / 512 bytes1 S# J$ Y  N, L0 e8 ^/ e
I/O size (minimum/optimal): 512 bytes / 512 bytes! w6 o( `; \1 K8 @  c
Disk label type: dos
( V7 G% P0 G$ z" lDisk identifier: 0x000b94174 N( c) A1 E3 \( W
! e; C2 }5 [, E3 Y. j) t! e* }
Device Boot Start End Blocks Id System
8 z, n) j: D9 u' l/dev/vda1 * 2048 2099199 1048576 83 Linux& D  A. Q) M6 B  Y8 i
/dev/vda2 2099200 10227711 4064256 82 Linux swap / Solaris7 r+ u4 X9 n7 j0 N  @0 N7 v
/dev/vda3 10227712 104857599 47314944 83 Linux' E. _; i7 ]# S- D+ d
但是,根分区和对应的文件系统还没有扩容,如下,可以看到/dev/vda3分区仍然识别为48G,根文件系统仍然识别为46G。! m9 O1 ?- ]; z; P; b% z! T5 `2 x

; d+ M, J/ a2 Y- ]8 |0 j[root@kvm4 ~]# fdisk -lu /dev/vda3" C; Q! c7 v/ n8 c; w( r8 x
$ x" T6 k0 K) K4 z
Disk /dev/vda3: 48.5 GB, 48450502656 bytes, 94629888 sectors
+ X2 o# Y: L6 F- G) ^+ N4 b6 tUnits = sectors of 1 * 512 = 512 bytes$ L( Y% `0 o! m9 c
Sector size (logical/physical): 512 bytes / 512 bytes
* A. {" M: B# |- {I/O size (minimum/optimal): 512 bytes / 512 bytes
' x7 M7 B) z+ Q5 m
+ F  c$ N# m3 c1 j4 w4 x[root@kvm4 ~]#5 W7 z7 ?* \) U, ~1 N
[root@kvm4 ~]#: U; U4 |, X- w9 }* \3 W
[root@kvm4 ~]#7 [6 [- ~* f) O' f: H& M) I
[root@kvm4 ~]# df -h
1 b$ V. A/ w: RFilesystem Size Used Avail Use% Mounted on. r9 M, \. C( H8 G
devtmpfs 1.9G 0 1.9G 0% /dev1 g6 \1 [7 b$ ?& X- L) q$ W  h! S
tmpfs 1.9G 0 1.9G 0% /dev/shm; a6 ], b1 a* X; ~
tmpfs 1.9G 8.5M 1.9G 1% /run
% M2 |. e4 y6 G( Etmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup! M# {: H5 S$ k
/dev/vda3 46G 1.3G 44G 3% /
" k3 j6 G2 D- m/ v& U/dev/vda1 1014M 142M 873M 14% /boot- `  D* K, A) n4 w0 t7 j1 W
tmpfs 379M 0 379M 0% /run/user/0
7 `. e8 V" j5 k* a我们现在的目标就是扩容根分区和文件系统。# _; A! z! b) [  y5 F' P% c# h
此处可以参考阿里云的文档进行扩容操作,链接如下:
8 G. U: _' L8 Xhttps://help.aliyun.com/document ... scm=20140722.S_help( _) i' S* B) e. u% P

. f' {! s: f  J7 l: M6 u, @我的虚拟机操作系统是centos7,分区是MBR分区,不是GPT分区,文件系统是xfs,所以,我的扩容过程可能跟实际遇到的情况不太一样,这里需要以实际情况为准,参考上面的文档,做出不同的细节处理,生产环境中最好提前克隆出一个机器或者做一个测试机进行模拟。# D8 J0 F* U; v+ K8 v, s) J: a! g
, r: W7 B" _; J4 \$ r7 |
首先,在虚拟机中安装cloud-utils-growpart工具(如果是GPT分区,先安装gdisk),对分区进行扩容,centos7中命令如下
6 }5 B4 o+ v3 a- B; I/ I* s3 b0 B* C4 @+ l/ B* z) a
yum install -y cloud-utils-growpart" C5 o5 \" @  ]$ Q& P& e
安装完成后,执行如下命令扩容对应分区,我需要扩容vda3,所以命令中是vda 3,vda和3中间有空格9 t# x( q8 q& b. P" w+ Q
: ?7 }* c$ s  b  b
[root@kvm4 ~]# growpart /dev/vda 3
, y- c4 k' n& Y3 k( FCHANGED: partition=3 start=10227712 old: size=94629888 end=104857600 new: size=136572895 end=146800607
! p8 a: n6 p9 w4 B可以看到,分区的大小已经改变,使用命令确认,vda3分区的大小已经识别为69.9G
9 n* f% J. t' G- @. b0 h
0 V' g  a7 u; Z[root@kvm4 ~]# fdisk -lu /dev/vda3
# f- O! o2 Z! i& \% L/ J; y/ \ % G, J- S. [: {$ M3 C
Disk /dev/vda3: 69.9 GB, 69925322240 bytes, 136572895 sectors
& u+ H0 w/ ~9 \. ^' w5 @) gUnits = sectors of 1 * 512 = 512 bytes/ Z" `1 X. G0 U5 T
Sector size (logical/physical): 512 bytes / 512 bytes3 P1 X( Z! {7 P. [6 ]- V
I/O size (minimum/optimal): 512 bytes / 512 bytes
3 W' Q4 q3 x' q如果扩容完成后,再次执行扩容命令,会提示NOCHANGE…it cannot be grown,这是因为,分区已经扩展完成了,没有富裕的空间可供扩展了,其实,还有一种情况也会报如下错误,导致无法扩容分区,我们一会儿再聊,先把一整套扩容流程走完,此处重复执行如下命令不会影响扩容。
' k2 P: D0 t( W7 a6 ~# N& X( U, I' Q
[root@kvm4 ~]# growpart /dev/vda 3. {. @* S0 s6 ~+ y( A
NOCHANGE: partition 3 is size 136572895. it cannot be grown
& E' M  h* K9 t  Evda3分区扩容完成后,需要扩容分区对应的文件系统,此处文件系统是xfs,所以执行xfs_growfs命令即可,如果是ext文件系统,需要使用resize2fs命令,此处运行的命令为xfs_growfs /dev/vda3; k. Y1 i+ I5 \4 U$ M& @( D
如下:
" l0 [- P! X9 b0 I8 r5 ]: y0 N* p2 q. n, I
[root@kvm4 ~]# xfs_growfs /dev/vda38 A- u+ ^9 D) Q" p* @
meta-data=/dev/vda3 isize=512 agcount=4, agsize=2957184 blks+ l! G. m! h0 u  W  n+ y, Q
= sectsz=512 attr=2, projid32bit=1
$ I- G3 ~8 D3 Q: y6 g= crc=1 finobt=0 spinodes=01 D1 G; M7 C" |0 c& p
data = bsize=4096 blocks=11828736, imaxpct=25
7 r' z/ b$ x$ K: |) q$ Z= sunit=0 swidth=0 blks
6 z+ i' o6 G$ z8 w- qnaming =version 2 bsize=4096 ascii-ci=0 ftype=1
( {& Y. B0 c" @. Nlog =internal bsize=4096 blocks=5775, version=2/ W& b3 W6 D, A1 c
= sectsz=512 sunit=0 blks, lazy-count=1
: X+ ?7 i6 ?: Y" T3 Brealtime =none extsz=4096 blocks=0, rtextents=0
9 t& W' `2 l1 W' e9 l5 y- @* l; r  Wdata blocks changed from 11828736 to 170716110 E3 z  ]5 q; G; j' [; j& G. X. P
再次查看磁盘使用情况,可以看到,根分区已经从之前的46G扩容到了66G,如下
4 w, ]$ W4 p- r# j7 J5 P+ t1 B- q. F+ ]* f% H
[root@kvm4 ~]# df -h
, R7 f% m$ J( P5 t6 v) ]: m5 x: HFilesystem Size Used Avail Use% Mounted on
0 k9 ]. x: ~# P  y& Ndevtmpfs 1.9G 0 1.9G 0% /dev
5 k& c0 {; z* z! utmpfs 1.9G 0 1.9G 0% /dev/shm, y/ H. X7 r3 q, r0 g
tmpfs 1.9G 8.5M 1.9G 1% /run, b' Y; w" h, H  ?& ^
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
4 M6 z* @& c( Z( j' v/dev/vda3 66G 1.4G 64G 3% /
  ?7 h+ k2 F$ p( c. J$ Y5 ?4 V7 J/dev/vda1 1014M 142M 873M 14% /boot5 r8 @6 Y$ q9 k' t
tmpfs 379M 0 379M 0% /run/user/0
+ h7 g1 \1 K) l3 W( X至此,整个扩容操作已经完成了。
$ f' e5 a# ~& L6 ?* N" L+ z- k, G- M; X: `0 X
此处有一个坑,刚才已经提到过,在扩容分区时,我们使用了growpart命令,如果重复执行此命令,会提示NOCHANGE…it cannot be grown,这是因为已经没有更多空间可供分区扩容了,但是,在某些特殊情况下,磁盘明明还有很多空间,在第一次执行growpart命令时就会提示it cannot be grown,现在咱们就来聊聊这种特殊情况。
1 }" T4 x+ B- b2 G+ F0 Q+ W: K- |) B, x' A2 L5 X! W& ~
如果磁盘有很多富裕空间可供分区扩容,但是每次执行growpart命令就提示it cannot be grown,很有可能是因为,你要扩容的分区不是磁盘的最后一个分区,上例中,我要扩容的vda3就是vda磁盘的最后一个分区,如下图,可以通过分区号或者分区区间很明显的看出,vda3就是vda的最后一个分区
( [6 G& s! a: ^9 z. ]& ?4 J; U: n* B* l, H4 n
这种情况下,第一次执行growpart命令扩容分区时,应该是可以正常执行的。6 D4 z$ k; X0 J- G1 ]; J+ f
但是,如果你遇到的分区是下面的情况,而你想要扩容的分区恰巧不是磁盘的最后一个分区,则无法扩容成功,会直接提示it cannot be grown
& Y0 h: D2 z6 ]1 m: H3 ]7 _) H; W- b1 m! E1 k* A% O
[root@kvm1 ~]# fdisk -l: D" a. K% K7 d* X& Q+ h4 g1 |* r

4 ~, R" b& H" U" ?+ E1 y* R8 }Disk /dev/vda: 536.9 GB, 536870912000 bytes, 1048576000 sectors: C- q* S, s  k2 k0 j5 _6 H
Units = sectors of 1 * 512 = 512 bytes4 y. C" b, M1 A% i8 \' \
Sector size (logical/physical): 512 bytes / 512 bytes
; z; _5 F$ G7 k' D# }. a  bI/O size (minimum/optimal): 512 bytes / 512 bytes( H# l1 T- m$ H& }' X/ `5 V+ X7 J- s% p- W
Disk label type: dos- z& ^$ f7 a9 @3 o8 l' x
Disk identifier: 0x000ac5a25 k0 w/ E3 Q6 o! H4 r
1 Q( S) p; l0 s* v# y& }/ T
Device Boot Start End Blocks Id System% I2 J* J/ V7 d" q$ h
/dev/vda1 * 2048 2099199 1048576 83 Linux
' F, W9 l: K  F# H5 o3 r/dev/vda2 2099200 1044367359 521134080 83 Linux
( ~* v, r  W$ S- \$ c/ j/dev/vda3 1044367360 1048561663 2097152 82 Linux swap / Solaris; ]1 P# N+ J/ d8 ]! x0 {0 D; z
[root@kvm1 ~]#6 J& m6 W5 N' U2 I
[root@kvm1 ~]#
$ I  k0 W9 o/ H, c+ K[root@kvm1 ~]# df -h
7 t2 g8 i2 y1 G6 d* TFilesystem Size Used Avail Use% Mounted on
; Y5 `4 H. l; C+ Odevtmpfs 909M 0 909M 0% /dev
  Q' N. w$ O. Ptmpfs 919M 0 919M 0% /dev/shm
* k& K# f0 _% Z9 ptmpfs 919M 8.6M 911M 1% /run
5 K7 \4 ?+ F- L" w  Ptmpfs 919M 0 919M 0% /sys/fs/cgroup
1 L1 X9 X& F5 M; w. ~, `, f/dev/vda2 497G 1.3G 496G 1% /( w: ?9 N! e5 }% }* E' O* s
/dev/vda1 1014M 142M 873M 14% /boot9 m' J) |! m  O& I- X3 g
tmpfs 184M 0 184M 0% /run/user/01 E: @8 [% O0 ?: M
如上,vda一共有三个分区,根对应的分区是vda2,即使vda磁盘有很多富裕空间,如果想要使用growpart命令扩容vda2,也是不行的,会直接提示it cannot be grown,因为上例中,vda2后面还有一个vda3分区,而上例中的情况比较好处理,因为最后一个分区是swap分区,我们只需要删除这个分区,然后再扩容vda2就好了,扩容完成后,再单独挂载一个磁盘作为swap分区或者使用文件作为swap分区,所以,在做模板机的时候要避开这个坑,别问我怎么知道的。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-9 07:16 , Processed in 0.051472 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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