VMware不关机扩容linux磁盘

来自三线的随记
Admin讨论 | 贡献2024年8月11日 (日) 11:30的版本

在虚拟化平台对磁盘扩容后 fdisk -l 识别不到分区 (partition丢失)

注意在部分OS下,可能在扩容前 Disk 的相关 partition 信息在fdisk中是可以正常识别的,但是在 vsphere / esxi 对磁盘进行扩容以后

就发现 partition 丢了【fdisk -l /dev/sda 看不到某些分区】(特别是centos7.9 + fdisk -l + GPT)

这时候可以直接 parted /dev/sda

进入以后应该就会提示

Error: The backup GPT table is not at the end of the disk, as it should be.  This might mean that
another operating system believes the disk is smaller.  Fix, by moving the backup to the end (and
removing the old backup)?

直接进行Fix并扩容即可

也可以找到原本的扇区记录,然后进入fdisk ,修改 partition table 为 GPT,根据相关扇区记录,把分区重新建立回来即可

lvm类型的分区扩容

利用fdisk - 传统步骤扩容分区(旧版本fdisk对GPT兼容不好,GPT分区表建议使用parted)

磁盘名sda, vg名 cl, lv名 root 等自行根据实际情况修改!

  1. vsphere(虚拟化平台)层面完成磁盘扩容
  2. 进入系统 shell 中,执行命令 lsblk 查看对应的磁盘是否有感知到新的容量。有时候会碰到 os 无法感知到 disk 容量变化的情况出现,这时候需要手动rescan一下echo 1 > /sys/class/block/sda/device/rescan
  3. fdisk -l /dev/sda 确认相关分区及扇区信息
  4. 使用fdisk /dev/sda 进入交互式操作删除重建需要扩容的分区(增大分区容量,保留原本的LVM2_member signature, 起始扇区与原本一致)
  5. partprobe /dev/sda
  6. pvresize /dev/sda3
  7. lvextend /dev/cl/root /dev/sda3
  8. xfs_growfs /dev/mapper/cl-root
  9. 完成

利用parted工具一行命令直接扩容第三分区到100%

磁盘名sda, vg名 cl, lv名 root 等自行根据实际情况修改!

parted /dev/sda --script -- resizepart 3 100%
pvresize /dev/sda3 && lvextend -l +100%FREE /dev/ol/root && xfs_growfs /

非lvm类型虚拟磁盘扩容(磁盘直接作为了挂载点)

磁盘名sda, vg名 cl, lv名 root 等自行根据实际情况修改!

  1. vm层面完成磁盘扩容
  2. 同样手动rescan一下让os感知磁盘容量变化echo 1 > /sys/class/block/sda/device/rescan
  3. 根据文件系统类型执行fs扩容,如xfs_growfs / resize2fs
  4. 例如⬇️
[root@192-168-157-39 ~]# lsblk /dev/sdb
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  150G  0 disk /var/lib/containers

[root@192-168-157-39 ~]# echo 1 > /sys/class/block/sdb/device/rescan

[root@192-168-157-39 ~]# lsblk /dev/sdb
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  155G  0 disk /var/lib/containers

[root@192-168-157-39 ~]# cat /etc/fstab |grep cont
/dev/sdb /var/lib/containers xfs defaults,pquota 0 0

[root@192-168-157-39 ~]# xfs_growfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=9830400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=39321600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=19200, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 39321600 to 40632320

[root@192-168-157-39 ~]# df -h /var/lib/containers
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        155G   19G  137G  12% /var/lib/containers

[root@192-168-157-39 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk
├─sda1            8:1    0 1019M  0 part /boot
└─sda2            8:2    0   49G  0 part
  └─centos-root 253:0    0   49G  0 lvm  /
sdb               8:16   0  155G  0 disk /var/lib/containers
sr0              11:0    1  9.5G  0 rom

额外延伸:How to scan\detect new LUN’s & SCSI disks in Linux?