找回密码
 注册
查看: 966|回复: 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 20G5 T# [) t1 b0 n7 ~' ~
Block device '/var/lib/libvirt/images/rhel-server-7.9.qcow2' is resized
6 P9 q1 c0 n0 s% q9 N5 k( A$ l8 ], C, O% r9 f3 K! S
[root@pxe ~]# lsblk * A6 d1 }# |! r. P+ J0 i
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
% P( s. S& ?, Jsr0            11:0    1 1024M  0 rom  
4 U1 M3 [6 u, U2 ^! v# B# Uvda           252:0    0   40G  0 disk
6 q% Q% ?, P$ b$ x- [4 w& V├─vda1        252:1    0    1G  0 part /boot4 t6 g+ Q% [; O. s' l8 [, x" d
└─vda2        252:2    0   19G  0 part : x2 A& H5 z/ W5 f1 q
  ├─rhel-root 253:0    0   17G  0 lvm  /
) o6 Q0 @  A, a; D  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]8 E3 n; y2 Q% x& n! [8 f0 _+ v
loop0           7:0    0  3.6G  0 loop /mnt/6.8
# ^9 d; X2 m" Q- [8 R" W# {( Qloop1           7:1    0  3.6G  0 loop /mnt/6.10
- x) F1 a$ W# zloop2           7:2    0  4.2G  0 loop /mnt/7.8
. \3 V! I4 S! a" U4 @[root@pxe ~]# growpart /dev/vda 2
+ o) g9 p% r6 [5 |+ VCHANGED: partition=2 start=2099200 old: size=39843807 end=41943007 new: size=81786847 end=838860475 C* T' `! s% e3 G
[root@pxe ~]# lsblk 7 i; D) R- F, T9 z$ o+ p/ y
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
& {8 r- H( y+ Y' B' `sr0            11:0    1 1024M  0 rom  
5 g3 N2 x  B' k2 \5 T5 J  S+ s. [vda           252:0    0   40G  0 disk 3 c& O8 O* Z1 L( I
├─vda1        252:1    0    1G  0 part /boot7 p- x! c& N' ~; n- h( Q6 k0 @
└─vda2        252:2    0   39G  0 part / c3 k! @& j% ?+ a9 N) X  J2 Y) x
  ├─rhel-root 253:0    0   17G  0 lvm  /
: O- d5 w1 t% s8 [' V7 z3 A1 M  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]: Y4 Y$ Q; x+ Z  I7 p! ^
loop0           7:0    0  3.6G  0 loop /mnt/6.8
/ J) l! u$ a4 F$ T+ wloop1           7:1    0  3.6G  0 loop /mnt/6.10
* ^) c3 B9 S& C+ D( Dloop2           7:2    0  4.2G  0 loop /mnt/7.88 U1 M+ ]) Q, u" H; B

, J2 j2 }/ m4 B) B# c. J. _2 m
: B3 y; k4 {; ?8 W+ n% O  Q9 M
! l$ K, m# w3 j" O' d[root@pxe ~]# lsblk 4 }3 r8 {( b' m3 F% Q* s* B* T
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT3 p4 q8 H& h/ B2 c+ z2 }  j) \0 s0 G
sr0            11:0    1 1024M  0 rom  5 K6 [) O) N- k5 U; y; v
vda           252:0    0   40G  0 disk . I) q# O( G, D  J
├─vda1        252:1    0    1G  0 part /boot
, v/ D. t' y4 E# k# K/ U5 K$ V└─vda2        252:2    0   39G  0 part 4 E& m* @+ w: j' L4 v' {4 J
  ├─rhel-root 253:0    0   17G  0 lvm  /" l+ I7 X1 N0 u
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
$ f4 P. C  m/ T1 dloop0           7:0    0  3.6G  0 loop /mnt/6.8
& I# J, h3 d, cloop1           7:1    0  3.6G  0 loop /mnt/6.100 D, G: T) B. R
loop2           7:2    0  4.2G  0 loop /mnt/7.8% L4 X0 \- q( M2 W+ A: [( J. K+ g
3 O0 n+ c8 \) a5 t% t
[root@pxe ~]# pvresize /dev/vda2
( P1 {; j6 H5 O7 o" A0 ^, w  Physical volume "/dev/vda2" changed  e2 M( s/ K0 S8 n5 p* X
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
6 f% o5 ?5 l1 l$ P[root@pxe ~]# pvresize /dev/vda2 40, \- [& d5 N3 ^
  Failed to find device for physical volume "40".6 x) I% ~  M. e
  Physical volume "/dev/vda2" changed& M/ y3 W  w! ~7 @1 Z
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized% X5 Q7 R& \& F+ d; w
- j7 v! h. |* p: J; J
[root@pxe ~]# lvextend -l +100%FREE /dev/mapper/rhel-root
0 a: F+ r& X: c0 m. O/ j( y6 L, |  Size of logical volume rhel/root changed from 16.99 GiB (4350 extents) to 36.99 GiB (9470 extents).  r7 R. Q6 j) {0 t
  Logical volume rhel/root successfully resized.
, _. `* M% G2 w6 p. n/ m' P6 H
; }  W$ I4 o6 D, p
2 q4 _9 u- D: C! @[root@pxe ~]# df -TH- |; B/ \7 Y  n) p( K* [% T/ I1 r
Filesystem            Type      Size  Used Avail Use% Mounted on! j3 ]! o, ~( F- b: M' p
devtmpfs              devtmpfs  952M     0  952M   0% /dev
0 N: l4 I/ v$ |& V. g- u5 W: ^tmpfs                 tmpfs     964M     0  964M   0% /dev/shm
2 z9 o! u/ m6 q5 d6 _& x& J0 c1 Dtmpfs                 tmpfs     964M  9.1M  955M   1% /run
9 f2 |6 f6 f8 M* p2 K- s4 Gtmpfs                 tmpfs     964M     0  964M   0% /sys/fs/cgroup
  f; {) U3 }( G6 y% p/dev/mapper/rhel-root xfs        19G   18G  338M  99% /  n& x, m5 o5 R* K9 U& g  ~' j& _: [
/dev/vda1             xfs       1.1G  157M  907M  15% /boot
' C! C: r8 |" G9 r0 ftmpfs                 tmpfs     193M     0  193M   0% /run/user/0# L* \# u0 q" @6 M
/dev/loop0            iso9660   3.9G  3.9G     0 100% /mnt/6.8
. T. F) q: K' l  p* x0 j/dev/loop1            iso9660   3.9G  3.9G     0 100% /mnt/6.10
! z4 a2 _2 X1 _( I" b9 f/dev/loop2            iso9660   4.6G  4.6G     0 100% /mnt/7.8
. X, _# `; Z" Z
5 j( q( H% W/ U/ Q) L. r[root@pxe ~]# resize2fs -f /dev/mapper/rhel-root 0 `! X. q; \/ o* O: Y& ^7 f, B$ f3 v
resize2fs 1.42.9 (28-Dec-2013)
8 K# Y& Q/ p4 e4 P! n8 ~. p/ u8 p% Zresize2fs: Bad magic number in super-block while trying to open /dev/mapper/rhel-root+ r% }. T6 p* ^; t6 u: d. e
Couldn't find valid filesystem superblock.
. c; m+ Z3 `" C) r, t3 L4 u[root@pxe ~]# pvresize /dev/vda
2 V: f) O6 n0 a* L6 {5 f, Svda   vda1  vda2  6 d$ s% i$ n  J
[root@pxe ~]# pvresize /dev/vda6 G6 N; d6 }2 U; B; s& x) R
vda   vda1  vda2  7 j* t1 q0 u' g- p& l+ J6 V9 `8 l7 b
[root@pxe ~]# pvresize /dev/vda2
8 ~* s' i6 o' P/ F, t  Physical volume "/dev/vda2" changed7 ?7 j. B% z& r. ]
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized  Z, @; Z$ A" A; f2 n& W& ^, J) {& g
[root@pxe ~]# pvscan ; Y- |, P) a* x4 r4 c( d+ @
  PV /dev/vda2   VG rhel            lvm2 [<39.00 GiB / 0    free]* M2 H' P+ V9 \5 @% [3 X
  Total: 1 [<39.00 GiB] / in use: 1 [<39.00 GiB] / in no VG: 0 [0   ]# e6 Z# _( O- I5 R4 J+ N  [
[root@pxe ~]# vgscan 9 K! U% F- R) y( [. h* a  z, P
  Reading volume groups from cache.
- W- _5 Y7 Y4 x2 L$ a" P  Found volume group "rhel" using metadata type lvm2
4 Z; R* h, g" [; J7 {' \* q
7 h- f# e; \: G5 F[root@pxe ~]# lvscan ; H& V. q1 K2 \3 r
  ACTIVE            '/dev/rhel/root' [36.99 GiB] inherit; X( m0 J4 V7 P! b9 D& q5 _
  ACTIVE            '/dev/rhel/swap' [2.00 GiB] inherit
1 o# P5 ]- b' R7 U, y3 e/ ~[root@pxe ~]# df -TH$ _, V$ O; z' R" m0 d5 c& V
Filesystem            Type      Size  Used Avail Use% Mounted on  k; n( S4 @9 }# \8 i
devtmpfs              devtmpfs  952M     0  952M   0% /dev
3 q: U: x; }' y0 C5 jtmpfs                 tmpfs     964M     0  964M   0% /dev/shm
" w' U6 ~2 u# `: k' _1 dtmpfs                 tmpfs     964M  9.1M  955M   1% /run0 N+ w  c7 ]0 P1 Q
tmpfs                 tmpfs     964M     0  964M   0% /sys/fs/cgroup! v- n0 d: t3 _; ~+ ~
/dev/mapper/rhel-root xfs        19G   18G  338M  99% /4 l* k, Z) q) I8 L+ Q! x% b0 f) d
/dev/vda1             xfs       1.1G  157M  907M  15% /boot- \' _) w) p8 X1 W, h5 q( {9 L# L
tmpfs                 tmpfs     193M     0  193M   0% /run/user/0
) c! @- }9 O% n# ?( Z/ Y2 h/dev/loop0            iso9660   3.9G  3.9G     0 100% /mnt/6.8
* A; t$ S- R8 s1 k; g/dev/loop1            iso9660   3.9G  3.9G     0 100% /mnt/6.10
' ]+ p( P8 r& v4 z& }: _4 }1 K/dev/loop2            iso9660   4.6G  4.6G     0 100% /mnt/7.8
, G3 }0 j9 Z( {1 W4 C3 y' E
" ^. d2 G# m+ s9 o/ B: `% }, Q5 `[root@pxe ~]# lvextend -l +100%FREE /dev/mapper/rhel-root2 H. y$ O, \# r
  New size (9470 extents) matches existing size (9470 extents).
  f/ m) D4 d# Q9 X2 J/ y: W1 F4 {5 x! a% N6 A

  Q5 |, a( X0 ]6 W[root@pxe ~]# df -TH( t- \% m$ f; h! [) Y
Filesystem            Type      Size  Used Avail Use% Mounted on& i9 E1 T4 r( O7 u- z  F  ]- C
devtmpfs              devtmpfs  952M     0  952M   0% /dev5 Z& i# l' y0 D, ^" N. \3 \1 F8 N
tmpfs                 tmpfs     964M     0  964M   0% /dev/shm8 ^, R5 }7 b& r8 z6 s$ v! x
tmpfs                 tmpfs     964M  9.1M  955M   1% /run
$ j7 Y' m- W6 itmpfs                 tmpfs     964M     0  964M   0% /sys/fs/cgroup. h1 G3 X3 \9 i5 u* C9 a1 ]
/dev/mapper/rhel-root xfs        19G   18G  338M  99% /- f$ I' T+ o. I* s3 B5 |
/dev/vda1             xfs       1.1G  157M  907M  15% /boot. L8 S# y: f. p) F3 Z) M0 ]% K7 a
tmpfs                 tmpfs     193M     0  193M   0% /run/user/0; u' n0 A: z; v' L" |
/dev/loop0            iso9660   3.9G  3.9G     0 100% /mnt/6.8
0 v) w9 f( Y/ l( `6 g7 w/dev/loop1            iso9660   3.9G  3.9G     0 100% /mnt/6.10/ K; M8 P+ U4 {$ _7 _: C
/dev/loop2            iso9660   4.6G  4.6G     0 100% /mnt/7.8
5 ~2 X! ?1 N2 Z( }: ~! q5 k* p( I# Y1 d& E3 R
* O3 {. j# A# e+ U  E. }* t
- L- R( `* {8 R9 [' H7 |. N

5 O/ @4 W4 }+ H: K, V* x[root@pxe ~]# resize2fs -f /dev/mapper/rhel-root : V# j$ ^+ i3 v; Y0 i( _: P
resize2fs 1.42.9 (28-Dec-2013)/ Q) ^" M: G. ]. ^
resize2fs: Bad magic number in super-block while trying to open /dev/mapper/rhel-root2 |- r# D5 `5 x7 B5 |
Couldn't find valid filesystem superblock.  K' P4 I  q3 M
; I& t* m* r/ W$ k3 Q% D
[root@pxe ~]# growpart /dev/vda 29 K8 E; Z( `$ ]6 z
NOCHANGE: partition 2 is size 81786847. it cannot be grown* u. U, W; E, `! A0 R( }9 y0 a' ^2 I
[root@pxe ~]# pvresize  /dev/vda2 " s! {$ U' V% C$ W! V& O5 o& ]
  Physical volume "/dev/vda2" changed+ n/ J/ V0 K* @' o1 p: e
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
7 s( z4 h7 j2 u+ |[root@pxe ~]# xfs_growfs /dev/mapper/rhel-root ( S) B5 i2 g) f; s
meta-data=/dev/mapper/rhel-root  isize=512    agcount=32, agsize=140544 blks  T  P- d$ s5 [8 ]
         =                       sectsz=512   attr=2, projid32bit=1
8 c) U1 P$ D! R; K9 T         =                       crc=1        finobt=0 spinodes=0, f# u; T8 X1 [4 V. z/ L% w( I, \
data     =                       bsize=4096   blocks=4454400, imaxpct=25
) a: p( c8 _4 p/ D  ?         =                       sunit=0      swidth=0 blks
9 P: R$ k  X& b  _" ~7 X# N5 bnaming   =version 2              bsize=4096   ascii-ci=0 ftype=1" {; l3 b( l9 P9 J: v
log      =internal               bsize=4096   blocks=2560, version=2+ V, N- X: x9 |7 v+ @9 ]0 x
         =                       sectsz=512   sunit=0 blks, lazy-count=18 f. M% ~+ O( |" B& |
realtime =none                   extsz=4096   blocks=0, rtextents=0; G, A$ ^& O' H* |# z$ s- G
data blocks changed from 4454400 to 9697280- f' _. }4 @" Z5 D8 n

4 y3 K3 n" v4 ~& d9 b$ Z  g

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-4-11 17:33:21 | 显示全部楼层
以使用如下命令& n# W% z8 Z( K

+ S6 X0 W1 j5 ?; U6 l6 @& H- Hqemu-img snapshot -l /var/lib/libvirt/images/kvm1.qcow2* N- X) O' P, R& L
磁盘镜像如果有快照,无法进行扩容
/ z6 W6 G1 K9 l6 e0 J  Y4 L0 N5 ]2 ?; }. q1 o
再次确认,已经备份了需要扩容的磁盘,然后开始操作,此处以kvm4为例,从宿主机可以看到,目前kvm4已经启动; `6 j6 A  O* O, f5 ?- L( d
- r3 [6 j4 F, `4 o' Y
[root@cos7 ~]# virsh list --all0 V& ^$ N5 n, b% m8 {9 h& v3 |9 ^
Id Name State- q& n" K( ?; g) ~3 Z9 @
----------------------------------------------------  o4 v' p7 ^: E( t! z& r% F8 Q+ S2 Z
4 kvm4 running, Z0 |" s3 J7 q, P( L. E& r
- kvm1 shut off
# E2 x1 P4 T. b8 O: i- kvm2 shut off
7 t$ B) T4 z: l. ?$ Y- kvm3 shut off( c  [9 p6 @3 h# v. v& l% e
- kvm5 shut off6 L: _* @9 O+ t4 T* H, P5 z& `8 W: v9 s
- kvm6 shut off- y9 E# I( @+ n* X
登录kvm4,查看虚拟机磁盘状态,如下9 D0 L: g5 J' R3 D% P2 ]% P
/ c8 ]( l! o' K! m9 E/ p
[root@kvm4 ~]# fdisk -l' y7 P4 R! B0 y* z/ R* e/ D- m
6 s9 e3 z: T% s) @* U
Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors
! _) {/ A$ W  lUnits = sectors of 1 * 512 = 512 bytes3 i) t1 p) A+ \( v# r, E7 y9 n
Sector size (logical/physical): 512 bytes / 512 bytes% |* C0 m+ j' y$ ~
I/O size (minimum/optimal): 512 bytes / 512 bytes! z- b9 {8 `3 O5 l3 a/ q) I
Disk label type: dos
% C7 o# F/ G0 @3 Z9 m) lDisk identifier: 0x000b9417
' ]! W8 W1 G6 l; y: ?" N9 |: ^ # y* o$ O# y; Y0 E- j( S
Device Boot Start End Blocks Id System
! s5 n# ~, l9 P& f: p& G. z/dev/vda1 * 2048 2099199 1048576 83 Linux5 `) ?0 J/ D$ X0 f5 W1 ]3 o  Y
/dev/vda2 2099200 10227711 4064256 82 Linux swap / Solaris; L8 }8 a* K6 f( w$ [0 d
/dev/vda3 10227712 104857599 47314944 83 Linux- B. H: i, }1 F; B' `" p
[root@kvm4 ~]#
* ~) P+ A* d! z4 s, f/ W[root@kvm4 ~]#
3 _4 u+ Z1 a% X; `* E5 y[root@kvm4 ~]#+ H. b; X# b# f7 h+ @6 {" Q9 F
[root@kvm4 ~]# df -h
3 G9 _7 Q9 G3 m* y8 a4 E7 E- TFilesystem Size Used Avail Use% Mounted on9 ^/ v$ W5 _" u0 c
devtmpfs 1.9G 0 1.9G 0% /dev+ s( @$ v$ P0 u! I
tmpfs 1.9G 0 1.9G 0% /dev/shm
- B% e& E# V. Y! w$ qtmpfs 1.9G 8.5M 1.9G 1% /run! B0 L0 ]& ?: V% V$ o$ \
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup# w+ n' F$ s2 z5 |
/dev/vda3 46G 1.3G 44G 3% /
& Z! \# A, P) d1 g( P. D6 y& u/dev/vda1 1014M 142M 873M 14% /boot# m, j/ n3 k9 w
tmpfs 379M 0 379M 0% /run/user/0& F. m0 i5 X  J! x' l8 {
从上述信息可以看出,目前kvm4虚拟机只有一块vda磁盘,有三个分区,/dev/vda1分区是boot分区,/dev/vda2是swap分区,/dev/vda3是根文件系统,根的大小是46G,44G可用,此处假设,根分区已经沾满了,我们需要扩容根分区,虽然最终目标是扩容根分区,但是需要先在宿主机上,为kvm4的磁盘进行扩容,扩容完磁盘后,再扩容分区的文件系统。  e* @9 `* H: G4 S
在宿主机上确认kvm4的磁盘镜像路径,如下:" W1 ^. A) a, F- m: W# G
' ~! a' F+ R) {7 g) |; k
[root@cos7 ~]# virsh domblklist kvm4! J! G5 W- o, C
Target Source2 y& m6 F. O% R" j5 H2 o
------------------------------------------------
, j+ d& t9 c2 O/ @9 i* K9 t% j( m& qvda /var/lib/libvirt/images/kvm4.qcow2
3 r( H5 Z0 s  n+ shda -
6 o' D# Z, y5 |& u可以看到,kvm4的磁盘镜像路径是/var/lib/libvirt/images/kvm4.qcow2,对应挂载到了kvm4的vda磁盘,先看一下目前磁盘镜像的大小
3 h- [, W( z5 n3 Q/ p/ V6 J
: e) Q$ F* P! T3 ~: N[root@cos7 ~]# qemu-img info /var/lib/libvirt/images/kvm4.qcow2
6 f/ c( N7 y5 l' A6 Fimage: /var/lib/libvirt/images/kvm4.qcow2  x! N& U9 }# J) _3 F; q2 W
file format: qcow2
% C9 |- ]( r3 @- E( H0 Y0 F; Q5 kvirtual size: 50G (53687091200 bytes)* y( ^' @  ~0 ?0 V
disk size: 1.5G- k' E$ M+ y. t
cluster_size: 655369 b9 Q' O) p* o" J
Format specific information:. C+ p& \# w" u6 k2 B; @
compat: 1.1. y( v2 ~) J, e! S7 t% F
lazy refcounts: true8 D+ o9 }3 x+ j3 R
如上所示,磁盘虚拟大小为50G,目前占用宿主机1.5G空间,磁盘格式是一个qcow2的磁盘。/ e% s1 x9 I1 k
现在,我们要扩容这个磁盘镜像,增容20G的空间,但是在操作之前,请先停止虚拟机,虽然不停止也可以增容成功,但是会报错,目前还不清楚,错误是否会对虚拟机以后的运行产生影响,保险起见,先停止虚拟机,然后再执行如下命令对磁盘镜像进行扩容。* M+ }, ~2 q. j9 M
停止虚拟机后,执行如下命令
, ^- {0 T  ]0 {( q0 P( `: T
* L0 E; o# P! r$ w[root@cos7 ~]# qemu-img resize /var/lib/libvirt/images/kvm4.qcow2 +20G
$ ~8 F9 }. c6 ^# S* S$ sImage resized.
8 t1 {0 a6 E/ }' r% k增容后,再次查看磁盘镜像信息,如下,磁盘的virtual size已经从50G变成了70G
& ~( \5 B* T( a% W5 p2 H; C  e% R4 n
[root@cos7 ~]# qemu-img info /var/lib/libvirt/images/kvm4.qcow2- G( D+ }3 b1 m8 `4 g* ~, j, n, E
image: /var/lib/libvirt/images/kvm4.qcow2
: l# e+ u4 O% Y2 `file format: qcow2
$ |" E1 y+ {1 Yvirtual size: 70G (75161927680 bytes)
: m' N# ^" y, Y' Kdisk size: 2.5G
( y; F3 l! `% Kcluster_size: 65536
- E1 `) T; u+ zFormat specific information:0 q9 ^5 J. |7 D; q
compat: 1.1
- R6 [, i2 r' S9 b  clazy refcounts: true
4 ]! F2 z, Y, ], ?. f磁盘扩容成功后,启动kvm4虚拟机,登录到虚拟机内,再次查看磁盘信息,发现已经变成了75G3 `: I, G& y+ I* {; K" I
& v5 x# A8 V+ l3 M: M( Y
[root@kvm4 ~]# fdisk -l, K; [5 C! q+ o9 ]0 W

' D* u. T+ C( t- TDisk /dev/vda: 75.2 GB, 75161927680 bytes, 146800640 sectors
' }- |% B7 |1 o+ `+ @  r( N5 gUnits = sectors of 1 * 512 = 512 bytes
, D) }8 v* [: Y3 P. C* v  ESector size (logical/physical): 512 bytes / 512 bytes
9 G7 j4 `6 o- J, V3 h' v7 HI/O size (minimum/optimal): 512 bytes / 512 bytes6 B8 S# s) k' T# U" ^' y7 V, F5 h: b
Disk label type: dos$ G# F* t; @: w3 O5 G" o: x) E' c
Disk identifier: 0x000b9417
, P( w: D! I0 L0 A9 Y
0 |" D! s7 l$ O- nDevice Boot Start End Blocks Id System# B8 s* v! j3 ]! Q7 e
/dev/vda1 * 2048 2099199 1048576 83 Linux
. p3 f; ?& C8 g8 l- T/dev/vda2 2099200 10227711 4064256 82 Linux swap / Solaris
; K* T$ V+ Y/ N2 c/dev/vda3 10227712 104857599 47314944 83 Linux2 W9 V! M+ ]6 c+ O7 p$ s$ y: Q
但是,根分区和对应的文件系统还没有扩容,如下,可以看到/dev/vda3分区仍然识别为48G,根文件系统仍然识别为46G。
* p* ~4 |  k/ O# s; h, e$ V9 }: [+ `- [! Y; d  T/ F6 }4 K
[root@kvm4 ~]# fdisk -lu /dev/vda3- Y! e1 |/ c* C  R9 D

: G% r5 _8 G- JDisk /dev/vda3: 48.5 GB, 48450502656 bytes, 94629888 sectors% C- h2 u9 U5 S5 A9 d- @
Units = sectors of 1 * 512 = 512 bytes. B$ k( ]7 J% C3 A
Sector size (logical/physical): 512 bytes / 512 bytes
1 T& t6 q+ X8 E2 gI/O size (minimum/optimal): 512 bytes / 512 bytes6 E9 q; _- ~0 |1 c% @' _. D7 Y
6 x% ?3 C" \$ |& j; k: g# ?: N- @. }
[root@kvm4 ~]#
4 E  R) |+ ?0 v! _) O( J/ p[root@kvm4 ~]#
; t# q# g2 ^: b/ Q6 _9 ?9 R. Y[root@kvm4 ~]#
2 F9 c  X" z, D7 O: s( A[root@kvm4 ~]# df -h
) e) p( E! y6 p, J4 _* R/ W5 i+ m1 sFilesystem Size Used Avail Use% Mounted on5 ^- n4 H" E5 W9 n4 Q) K
devtmpfs 1.9G 0 1.9G 0% /dev, a3 _9 n0 p. |7 ~7 m
tmpfs 1.9G 0 1.9G 0% /dev/shm4 u* q+ O0 F6 p
tmpfs 1.9G 8.5M 1.9G 1% /run
% p" a8 |+ x. @, H" Q5 j! Itmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup: \0 |7 a) R6 O
/dev/vda3 46G 1.3G 44G 3% /
7 z+ i. U$ C- e2 t3 A* ^/dev/vda1 1014M 142M 873M 14% /boot3 _; |0 T  o2 n" B
tmpfs 379M 0 379M 0% /run/user/0
2 F% x6 J" [: Y: M; g7 f我们现在的目标就是扩容根分区和文件系统。
: }3 G) k+ l$ u6 Y5 h; E' h6 `此处可以参考阿里云的文档进行扩容操作,链接如下:
/ C; }4 X9 |1 Qhttps://help.aliyun.com/document ... scm=20140722.S_help' c- d) N, \1 _/ W; h* q1 T: B) y

: n( n) g# f6 {/ w2 p' U1 @( H- M我的虚拟机操作系统是centos7,分区是MBR分区,不是GPT分区,文件系统是xfs,所以,我的扩容过程可能跟实际遇到的情况不太一样,这里需要以实际情况为准,参考上面的文档,做出不同的细节处理,生产环境中最好提前克隆出一个机器或者做一个测试机进行模拟。
/ y; K% |# @& H+ A" n
% b, K% u# [" }$ l+ K6 R0 z# Q$ [首先,在虚拟机中安装cloud-utils-growpart工具(如果是GPT分区,先安装gdisk),对分区进行扩容,centos7中命令如下
# Q# \& ~0 c4 o; R7 l2 b  ~( O$ _* w
yum install -y cloud-utils-growpart
5 O3 }: \3 ?2 n2 b' Z安装完成后,执行如下命令扩容对应分区,我需要扩容vda3,所以命令中是vda 3,vda和3中间有空格+ ~7 ]* q7 U) |" p: Q2 j3 Z
7 O! z* X3 [4 V# i" N
[root@kvm4 ~]# growpart /dev/vda 3
+ c* G6 @9 `4 h* eCHANGED: partition=3 start=10227712 old: size=94629888 end=104857600 new: size=136572895 end=146800607
2 E- ?7 K1 |# r: |/ ^4 I可以看到,分区的大小已经改变,使用命令确认,vda3分区的大小已经识别为69.9G
' k& ?9 T$ ?/ E6 l! b5 `( ^# }5 p0 S
% _4 R- \- y! _; G) j* ]. {[root@kvm4 ~]# fdisk -lu /dev/vda3: K4 M( a5 F! Q3 }( B0 v+ ]+ O( {% s
5 X0 g$ s# N/ x3 l
Disk /dev/vda3: 69.9 GB, 69925322240 bytes, 136572895 sectors
  X3 i8 F/ J3 K  _8 e/ RUnits = sectors of 1 * 512 = 512 bytes
2 p0 ]6 G& Z+ RSector size (logical/physical): 512 bytes / 512 bytes
7 p0 e7 M6 _+ J3 t; A# ~I/O size (minimum/optimal): 512 bytes / 512 bytes6 P  g# B  x$ a
如果扩容完成后,再次执行扩容命令,会提示NOCHANGE…it cannot be grown,这是因为,分区已经扩展完成了,没有富裕的空间可供扩展了,其实,还有一种情况也会报如下错误,导致无法扩容分区,我们一会儿再聊,先把一整套扩容流程走完,此处重复执行如下命令不会影响扩容。% ?: t' f0 w1 S' ~7 l
7 ]/ B% |/ S* t+ M% W; S
[root@kvm4 ~]# growpart /dev/vda 3
! Y; R7 l) _( lNOCHANGE: partition 3 is size 136572895. it cannot be grown$ W1 z0 T5 @6 S8 z" f
vda3分区扩容完成后,需要扩容分区对应的文件系统,此处文件系统是xfs,所以执行xfs_growfs命令即可,如果是ext文件系统,需要使用resize2fs命令,此处运行的命令为xfs_growfs /dev/vda3
9 y  D! Q; F- p" ?+ M  Z) c) C如下:3 r! b4 }8 r% p; f5 c( P

+ O/ s; I& ?* R. N[root@kvm4 ~]# xfs_growfs /dev/vda3
/ d3 r4 p1 A  H# _/ |8 x7 Tmeta-data=/dev/vda3 isize=512 agcount=4, agsize=2957184 blks1 R: ?, ^, J  S+ ?! O" e2 K$ I
= sectsz=512 attr=2, projid32bit=1* x* N3 V# `' T# F4 ^, {8 w
= crc=1 finobt=0 spinodes=0! |0 U. r9 K8 Q( ]8 ~1 e! T
data = bsize=4096 blocks=11828736, imaxpct=25
0 e, m0 s# P+ Z5 `= sunit=0 swidth=0 blks
) ?1 |, _! Z: @1 I$ c7 F- h9 inaming =version 2 bsize=4096 ascii-ci=0 ftype=1& v9 t, x5 t7 P) b, A) `
log =internal bsize=4096 blocks=5775, version=2
2 |& _6 v5 x" e% O. n2 P6 ~/ X' @= sectsz=512 sunit=0 blks, lazy-count=1
0 K- B% F; @+ Crealtime =none extsz=4096 blocks=0, rtextents=0& ]) p$ |# o! ]8 d0 e) w
data blocks changed from 11828736 to 170716117 Y4 N1 N% G3 }- y# O0 ?3 t  {' `
再次查看磁盘使用情况,可以看到,根分区已经从之前的46G扩容到了66G,如下
. V2 ^4 Z  @' Y! E' `! G% x  I7 u# k  O9 e
[root@kvm4 ~]# df -h4 @+ v) \2 b$ e. ^, I1 l
Filesystem Size Used Avail Use% Mounted on, ]' C: a& l5 s# q( c4 L4 d
devtmpfs 1.9G 0 1.9G 0% /dev
$ }' ^7 W6 W2 J* o8 B! h1 L- |tmpfs 1.9G 0 1.9G 0% /dev/shm# b* E% I& s+ {7 F( M6 U. K9 U; k
tmpfs 1.9G 8.5M 1.9G 1% /run
; w- m& S1 K; S2 S8 \( \tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
. J; I, {6 O& p, A; ^( @9 t/dev/vda3 66G 1.4G 64G 3% // H7 C: |5 b- W( [. m& W
/dev/vda1 1014M 142M 873M 14% /boot5 M5 O/ k$ p  L) v8 e1 A+ q
tmpfs 379M 0 379M 0% /run/user/0
. s" R9 C9 l; j8 y至此,整个扩容操作已经完成了。3 N9 s' ?; I& v
) ~3 ]7 o/ V6 o) ~& M8 V  c
此处有一个坑,刚才已经提到过,在扩容分区时,我们使用了growpart命令,如果重复执行此命令,会提示NOCHANGE…it cannot be grown,这是因为已经没有更多空间可供分区扩容了,但是,在某些特殊情况下,磁盘明明还有很多空间,在第一次执行growpart命令时就会提示it cannot be grown,现在咱们就来聊聊这种特殊情况。
& i/ T7 L, l8 e2 }& k3 _# X' p
9 |5 Q  N$ k" M3 a如果磁盘有很多富裕空间可供分区扩容,但是每次执行growpart命令就提示it cannot be grown,很有可能是因为,你要扩容的分区不是磁盘的最后一个分区,上例中,我要扩容的vda3就是vda磁盘的最后一个分区,如下图,可以通过分区号或者分区区间很明显的看出,vda3就是vda的最后一个分区
: U& S! v' X( }. o; ~- x$ ^1 i, W- g
这种情况下,第一次执行growpart命令扩容分区时,应该是可以正常执行的。
* }7 a3 a1 r* u0 c+ a2 B( P但是,如果你遇到的分区是下面的情况,而你想要扩容的分区恰巧不是磁盘的最后一个分区,则无法扩容成功,会直接提示it cannot be grown4 K8 F. h3 V8 N
5 ^1 N- p" @: U) B3 @& Y
[root@kvm1 ~]# fdisk -l% _! C! b- E  a& Q
9 b7 j* [; m; @! m
Disk /dev/vda: 536.9 GB, 536870912000 bytes, 1048576000 sectors; u/ w, r0 C2 d0 s; y! g$ H2 h' N
Units = sectors of 1 * 512 = 512 bytes; E  L: O" k9 e% |' Q
Sector size (logical/physical): 512 bytes / 512 bytes+ Z2 e3 M$ l/ u7 ]
I/O size (minimum/optimal): 512 bytes / 512 bytes
3 \( L) K4 H* @3 R; K0 Q  yDisk label type: dos
/ V6 `: Y- k8 {! UDisk identifier: 0x000ac5a2
/ t; P5 S/ h& w: r/ f- j; @: R4 }
0 a% l9 k7 I3 @% E8 y- r8 z+ fDevice Boot Start End Blocks Id System. X$ M& _) o  }5 h, ^( j: s
/dev/vda1 * 2048 2099199 1048576 83 Linux
" k# A' _! B5 Y- l1 F/dev/vda2 2099200 1044367359 521134080 83 Linux+ {$ M6 N" B: T; F, E
/dev/vda3 1044367360 1048561663 2097152 82 Linux swap / Solaris! p/ |+ K0 @& i0 [4 _9 k  s
[root@kvm1 ~]#
4 ]7 y% k+ E; @0 L& o[root@kvm1 ~]#
( ]$ N. e! y8 d2 H5 O[root@kvm1 ~]# df -h) u# [+ G3 ]7 Q+ G5 @
Filesystem Size Used Avail Use% Mounted on( K2 d" ]* {8 K: n, ~
devtmpfs 909M 0 909M 0% /dev
# z" V3 d3 a* R. ^' ptmpfs 919M 0 919M 0% /dev/shm6 q9 E; R8 A' H; L
tmpfs 919M 8.6M 911M 1% /run# c2 W7 G- b9 `+ Z/ n
tmpfs 919M 0 919M 0% /sys/fs/cgroup
+ @4 c. I* A$ j5 u$ v- A% @3 m/dev/vda2 497G 1.3G 496G 1% /
$ U# T% A4 ]) o+ G+ p- E8 F" S/dev/vda1 1014M 142M 873M 14% /boot) {3 E6 M7 A7 [& B
tmpfs 184M 0 184M 0% /run/user/0
# u$ V' h* r( n0 o$ S7 f6 p如上,vda一共有三个分区,根对应的分区是vda2,即使vda磁盘有很多富裕空间,如果想要使用growpart命令扩容vda2,也是不行的,会直接提示it cannot be grown,因为上例中,vda2后面还有一个vda3分区,而上例中的情况比较好处理,因为最后一个分区是swap分区,我们只需要删除这个分区,然后再扩容vda2就好了,扩容完成后,再单独挂载一个磁盘作为swap分区或者使用文件作为swap分区,所以,在做模板机的时候要避开这个坑,别问我怎么知道的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 03:49 , Processed in 0.026246 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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