虚拟机的扩容

内存的扩容相对简单:

虚拟机的内存和 CPU 是可以直接改的

  • 如果你用的是常见的虚拟化软件(比如 VMware、VirtualBox 等):

    • 先关闭(关机)虚拟机

    • 在虚拟机设置里(Settings)找到 Memory 和 CPU,调整数值即可

  • 然后重新开机就能用新的内存和 CPU

磁盘的扩容 :

 键入 fdisk -l 命令,结果如下:

fdisk -l 

磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000981d9

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM

磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

现在的情况是:VMware 虚拟机的磁盘已经从 20G 扩容到大约 50G(实际是 ~53.7G),但是系统里原来的分区 /dev/sda2(Linux LVM)还是只有大约 20G,没有用到新扩出来的空间。

那么,首先,通过 执行  df -h 命令,观察结果,如果返回结果有:

/dev/mapper/centos-root on / type xfs ...

那么说明:

  • 根分区 / 是挂载在 /dev/mapper/centos-root

  • /dev/mapper/... 是典型的 LVM 设备名

解释一下:

/dev/sda2 分区是 LVM 的 PV

centos 是卷组(VG)

root 是逻辑卷(LV)

LV /dev/centos/root(= /dev/mapper/centos-root)挂载到 /

这样就能确认:根分区 //dev/mapper/centos-root 上,确实是 LVM

2. 扩展分区 /dev/sda2

因为现在多出来的空间在 /dev/sda2 后面,你需要让 /dev/sda2 用到后面的空间。

方法:删除后重建同位置的分区,不会丢数据,执行下述命令

fdisk /dev/sda

然后按以下步骤:

  • 输入 p 查看分区表

  • 记住 /dev/sda2起始扇区号(Start)

  • 输入 d 删除分区 2

  • 输入 n 新建分区,选择主分区 p,编号 2

  • 起始扇区号 一定要和原来一样(默认就会是一样的)

    结束扇区直接回车用到磁盘末尾

    kpartx -u /dev/sda

    输入 t 设置分区类型为 8e(Linux LVM)

  • 输入 w 保存退出

这样做只修改分区表,不会动分区里的数据。

# 执行上述操作,返回内容为 :
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)

3. 让内核重新识别分区表

通常需要执行 :

partprobe

或者执行 :

kpartx -u /dev/sda

但是我的执行都报错:

[root@localhost ~]# partprobe
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。
[root@localhost ~]# kpartx -u /dev/sda
device-mapper: reload ioctl on sda1  failed: Device or resource busy
create/reload failed on sda1
device-mapper: reload ioctl on sda2  failed: Device or resource busy
create/reload failed on sda2

因为 /dev/sda2 正在被 LVM 使用(PV 已经在卷组里激活并挂载),此时 kpartxpartprobe 无法强行刷新内核的分区表。

此时最简单、最干净的办法 是 重启系统

重启之后,内核会重新读一次分区表,自然就能识别 /dev/sda2 新的大小。

4. 重启完后,识别扩容的分区,pvresize 命令

我重启后,执行 fdisk -l, 返回内容如下:

[root@localhost ~]# fdisk -l

磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000981d9

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   104857599    51379200   8e  Linux LVM

磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

现在的情况看上去分区 /dev/sda2 已经成功扩展到全盘(现在 End104857599,也就是大约 50GB 空间都被它占了)

接着,执行 pvresize XXX 命令,这是由于:

  • /dev/sda2 是 LVM 的物理卷(PV)

  • 分区虽然变大了,但 LVM 并不知道下面的物理卷已经多了可用空间

  • pvresize /dev/sda2 的作用是:告诉 LVM「现在这个 PV 后面有新空间可以用了」

执行后,LVM 才会把新空间加到卷组里,卷组才会有空闲空间(Free PE)用来扩展逻辑卷(LV)。

简单比喻一下:分区扩容好比「仓库墙打通,多了 30G 空间」。pvresize 是「通知仓库管理员,现在可以把货物放到新空间了」。如果不执行 pvresize,LVM 只知道原来 20G 空间,后面新增的空间就闲置在那里,根本用不上。

因此:执行 pvresize /dev/sda2 命令

[root@localhost ~]# pvresize /dev/sda2
  Physical volume "/dev/sda2" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
  • Physical volume "/dev/sda2" changed
    → 你刚才扩容的 /dev/sda2 物理卷已经被成功更新,让 LVM 知道它现在比原来大了。

  • 1 physical volume(s) resized or updated / 0 physical volume(s) not resized
    → 总共检查了 1 个 PV(就是 /dev/sda2),成功扩容了 1 个,没有失败的。

 5. 把新空间分配给根分区, 让根分区真正用到这部分空间

执行:

lvextend -l +100%FREE /dev/centos/root
xfs_growfs /dev/centos/root
df -h

 执行后的返回值如下:

[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root
  Size of logical volume centos/root changed from <17.00 GiB (4351 extents) to <47.00 GiB (12031 extents).
  Logical volume centos/root successfully resized.
[root@localhost ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=1113856 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=4455424, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 4455424 to 12319744
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   12M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   47G  4.0G   44G    9% /
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    378M     0  378M    0% /run/user/0

注意此时的根目录已经成功扩容到了 47G,那就是执行成功啦

 


如果你想系统补一下,可以分几块:

  1. Linux 文件系统和分区(fdisk, parted, ext4, xfs)

  2. LVM(pv, vg, lv)基本原理与常用命令

  3. Linux 系统运维(查看日志、扩容、备份)

  4. 大数据组件安装(CDH、Hive、HDFS)

  5. 虚拟化基础(VMware、VirtualBox)及磁盘/内存调整

Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理 - gegeman - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值