语境
我在 VMWare ESXI 上的 VM 中运行 Red Hat Enterprise Linux 版本 8.5 系统。
我需要在该虚拟机上调用的精确逻辑卷上获得更多空间lv_pmp
:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 78,4G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 20G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
因此,我在 VSphere 属性中将虚拟机的磁盘大小调整为 500G,其显示在以下sda
部分:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 78,4G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 20G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
然后我调整了sda3
物理卷的大小以匹配新添加的磁盘空间
$ resizepart /dev/sda 3 1000000000
$ pvresize /dev/sda3
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 476,9G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 20G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
我增加了lv_pmp
逻辑卷大小:
$ lvextend /dev/mapper/VGslash-lv_pmp -l+100%FREE
并刷新文件系统以让其检测新的大小:
$ xfs_growfs /dev/mapper/VGslash-lv_pmp
lv_pmp
到目前为止一切顺利,我得到了逻辑卷预期的大小:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 476,9G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 418,4G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
问题
我重新启动系统后就出现了问题:它似乎丢失了我对sda3
物理卷所做的大小更改,从而导致无法lv_pmp
安装逻辑卷(因为它假定父 PV 上没有足够的空间):
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 76,9G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
└─VGslash-lv_var 253:10 0 3G 0 lvm /var
sr0 11:0 1 1024M 0 rom
解决方法
重启后,可以通过手动执行以下命令来恢复正常:
### Re-apply physical volume changes
$ resizepart /dev/sda 3 1000000000
$ pvresize /dev/sda3
### Re-scan logical volumes
$ vgscan --mknodes -v
$ vgchange -a y
问题
为什么会发生这种情况?我该怎么做才能防止这种情况发生?
我不知道这是否与操作系统本身或虚拟机环境或我无法控制的其他因素有关,任何有关这方面的建议也会有所帮助。
上述解决方法并不令人满意,即使我可以将其放在启动时的脚本中,但每次启动时都必须执行此操作感觉不对:卷大小更改在重新启动后不会持续存在,这对我来说没有意义。
resizepart
不更新磁盘上的结构。它只对内核实时结构进行更改。咨询man resizepart
:您必须使用
fdisk
(或任何其他分区编辑器)来更改磁盘上的分区,然后使用resizepart
(或kpartx
、或partprobe
、或重新启动)更新内核视图。有一个名为的工具
growpart
可以同时完成这两项功能,并且在线。